Full Code of mysql/mysql-router for AI

8.0 cc0179f982bb cached
1854 files
27.1 MB
7.2M tokens
18479 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (28,876K chars total). Download the full file to get everything.
Repository: mysql/mysql-router
Branch: 8.0
Commit: cc0179f982bb
Files: 1854
Total size: 27.1 MB

Directory structure:
gitextract_2ty1zw_5/

├── .gitignore
├── CMakeLists.txt
├── License.txt
├── README.txt
├── cmake/
│   ├── Coverage.cmake
│   ├── FindGMock.cmake
│   ├── FindLibEvent2.cmake
│   ├── FindMySQL.cmake
│   ├── HarnessTesting.cmake
│   ├── Plugin.cmake
│   ├── TextUtils.cmake
│   ├── cmake_parse_arguments.cmake
│   ├── compile_flags.cmake
│   ├── compiler.cmake
│   ├── configure.cmake
│   ├── docs.cmake
│   ├── gmocktest.cmake
│   ├── install_layout.cmake
│   ├── libutils.cmake
│   ├── mysqlx_protobuf.cmake
│   ├── packaging.cmake
│   ├── platform.cmake
│   ├── protobuf.cmake
│   ├── settings.cmake
│   ├── ssl.cmake
│   ├── testing.cmake
│   └── version.cmake
├── config.h.in
├── doc/
│   ├── doxygen.cfg.in
│   ├── router_doxygen.css
│   ├── router_footer.html
│   ├── router_header.html
│   └── sample_mysqlrouter.conf
├── ext/
│   ├── RAPIDJSON-README
│   ├── duktape/
│   │   └── duktape-2.1.0/
│   │       ├── LICENSE.txt
│   │       ├── README.rst
│   │       ├── extras/
│   │       │   ├── README.rst
│   │       │   ├── alloc-pool/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_alloc_pool.c
│   │       │   │   ├── duk_alloc_pool.h
│   │       │   │   ├── ptrcomp.yaml
│   │       │   │   ├── ptrcomp_fixup.h
│   │       │   │   └── test.c
│   │       │   ├── console/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_console.c
│   │       │   │   ├── duk_console.h
│   │       │   │   └── test.c
│   │       │   ├── duk-v1-compat/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_v1_compat.c
│   │       │   │   ├── duk_v1_compat.h
│   │       │   │   ├── test.c
│   │       │   │   ├── test_compile1.js
│   │       │   │   ├── test_compile2.js
│   │       │   │   ├── test_eval1.js
│   │       │   │   └── test_eval2.js
│   │       │   ├── logging/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_logging.c
│   │       │   │   ├── duk_logging.h
│   │       │   │   └── test.c
│   │       │   ├── minimal-printf/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_minimal_printf.c
│   │       │   │   ├── duk_minimal_printf.h
│   │       │   │   └── test.c
│   │       │   ├── module-duktape/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_module_duktape.c
│   │       │   │   ├── duk_module_duktape.h
│   │       │   │   └── test.c
│   │       │   ├── module-node/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_module_node.c
│   │       │   │   ├── duk_module_node.h
│   │       │   │   └── test.c
│   │       │   └── print-alert/
│   │       │       ├── Makefile
│   │       │       ├── README.rst
│   │       │       ├── duk_print_alert.c
│   │       │       ├── duk_print_alert.h
│   │       │       └── test.c
│   │       ├── licenses/
│   │       │   ├── commonjs.txt
│   │       │   ├── lua.txt
│   │       │   ├── murmurhash2.txt
│   │       │   ├── splitmix64.txt
│   │       │   └── xoroshiro128plus.txt
│   │       └── src/
│   │           ├── duk_config.h
│   │           ├── duk_source_meta.json
│   │           ├── duktape.c
│   │           └── duktape.h
│   ├── gmock/
│   │   ├── CHANGES
│   │   ├── CMakeLists.txt
│   │   ├── CONTRIBUTORS
│   │   ├── LICENSE
│   │   ├── Makefile.am
│   │   ├── README
│   │   ├── build-aux/
│   │   │   └── .keep
│   │   ├── configure.ac
│   │   ├── include/
│   │   │   └── gmock/
│   │   │       ├── gmock-actions.h
│   │   │       ├── gmock-cardinalities.h
│   │   │       ├── gmock-generated-actions.h
│   │   │       ├── gmock-generated-actions.h.pump
│   │   │       ├── gmock-generated-function-mockers.h
│   │   │       ├── gmock-generated-function-mockers.h.pump
│   │   │       ├── gmock-generated-matchers.h
│   │   │       ├── gmock-generated-matchers.h.pump
│   │   │       ├── gmock-generated-nice-strict.h
│   │   │       ├── gmock-generated-nice-strict.h.pump
│   │   │       ├── gmock-matchers.h
│   │   │       ├── gmock-more-actions.h
│   │   │       ├── gmock-more-matchers.h
│   │   │       ├── gmock-spec-builders.h
│   │   │       ├── gmock.h
│   │   │       └── internal/
│   │   │           ├── gmock-generated-internal-utils.h
│   │   │           ├── gmock-generated-internal-utils.h.pump
│   │   │           ├── gmock-internal-utils.h
│   │   │           └── gmock-port.h
│   │   ├── make/
│   │   │   └── Makefile
│   │   ├── msvc/
│   │   │   ├── 2005/
│   │   │   │   ├── gmock.sln
│   │   │   │   ├── gmock.vcproj
│   │   │   │   ├── gmock_config.vsprops
│   │   │   │   ├── gmock_main.vcproj
│   │   │   │   └── gmock_test.vcproj
│   │   │   └── 2010/
│   │   │       ├── gmock.sln
│   │   │       ├── gmock.vcxproj
│   │   │       ├── gmock_config.props
│   │   │       ├── gmock_main.vcxproj
│   │   │       └── gmock_test.vcxproj
│   │   ├── scripts/
│   │   │   ├── fuse_gmock_files.py
│   │   │   ├── generator/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README
│   │   │   │   ├── README.cppclean
│   │   │   │   ├── cpp/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── ast.py
│   │   │   │   │   ├── gmock_class.py
│   │   │   │   │   ├── gmock_class_test.py
│   │   │   │   │   ├── keywords.py
│   │   │   │   │   ├── tokenize.py
│   │   │   │   │   └── utils.py
│   │   │   │   └── gmock_gen.py
│   │   │   ├── gmock-config.in
│   │   │   ├── gmock_doctor.py
│   │   │   ├── upload.py
│   │   │   └── upload_gmock.py
│   │   ├── src/
│   │   │   ├── gmock-all.cc
│   │   │   ├── gmock-cardinalities.cc
│   │   │   ├── gmock-internal-utils.cc
│   │   │   ├── gmock-matchers.cc
│   │   │   ├── gmock-spec-builders.cc
│   │   │   ├── gmock.cc
│   │   │   └── gmock_main.cc
│   │   └── test/
│   │       ├── gmock-actions_test.cc
│   │       ├── gmock-cardinalities_test.cc
│   │       ├── gmock-generated-actions_test.cc
│   │       ├── gmock-generated-function-mockers_test.cc
│   │       ├── gmock-generated-internal-utils_test.cc
│   │       ├── gmock-generated-matchers_test.cc
│   │       ├── gmock-internal-utils_test.cc
│   │       ├── gmock-matchers_test.cc
│   │       ├── gmock-more-actions_test.cc
│   │       ├── gmock-nice-strict_test.cc
│   │       ├── gmock-port_test.cc
│   │       ├── gmock-spec-builders_test.cc
│   │       ├── gmock_all_test.cc
│   │       ├── gmock_ex_test.cc
│   │       ├── gmock_leak_test.py
│   │       ├── gmock_leak_test_.cc
│   │       ├── gmock_link2_test.cc
│   │       ├── gmock_link_test.cc
│   │       ├── gmock_link_test.h
│   │       ├── gmock_output_test.py
│   │       ├── gmock_output_test_.cc
│   │       ├── gmock_output_test_golden.txt
│   │       ├── gmock_stress_test.cc
│   │       ├── gmock_test.cc
│   │       └── gmock_test_utils.py
│   ├── gtest/
│   │   ├── CHANGES
│   │   ├── CMakeLists.txt
│   │   ├── CONTRIBUTORS
│   │   ├── LICENSE
│   │   ├── Makefile.am
│   │   ├── README
│   │   ├── build-aux/
│   │   │   └── .keep
│   │   ├── cmake/
│   │   │   └── internal_utils.cmake
│   │   ├── codegear/
│   │   │   ├── gtest.cbproj
│   │   │   ├── gtest.groupproj
│   │   │   ├── gtest_all.cc
│   │   │   ├── gtest_link.cc
│   │   │   ├── gtest_main.cbproj
│   │   │   └── gtest_unittest.cbproj
│   │   ├── configure.ac
│   │   ├── include/
│   │   │   └── gtest/
│   │   │       ├── gtest-death-test.h
│   │   │       ├── gtest-message.h
│   │   │       ├── gtest-param-test.h
│   │   │       ├── gtest-param-test.h.pump
│   │   │       ├── gtest-printers.h
│   │   │       ├── gtest-spi.h
│   │   │       ├── gtest-test-part.h
│   │   │       ├── gtest-typed-test.h
│   │   │       ├── gtest.h
│   │   │       ├── gtest_pred_impl.h
│   │   │       ├── gtest_prod.h
│   │   │       └── internal/
│   │   │           ├── gtest-death-test-internal.h
│   │   │           ├── gtest-filepath.h
│   │   │           ├── gtest-internal.h
│   │   │           ├── gtest-linked_ptr.h
│   │   │           ├── gtest-param-util-generated.h
│   │   │           ├── gtest-param-util-generated.h.pump
│   │   │           ├── gtest-param-util.h
│   │   │           ├── gtest-port.h
│   │   │           ├── gtest-string.h
│   │   │           ├── gtest-tuple.h
│   │   │           ├── gtest-tuple.h.pump
│   │   │           ├── gtest-type-util.h
│   │   │           └── gtest-type-util.h.pump
│   │   ├── m4/
│   │   │   ├── acx_pthread.m4
│   │   │   └── gtest.m4
│   │   ├── make/
│   │   │   └── Makefile
│   │   ├── msvc/
│   │   │   ├── gtest-md.sln
│   │   │   ├── gtest-md.vcproj
│   │   │   ├── gtest.sln
│   │   │   ├── gtest.vcproj
│   │   │   ├── gtest_main-md.vcproj
│   │   │   ├── gtest_main.vcproj
│   │   │   ├── gtest_prod_test-md.vcproj
│   │   │   ├── gtest_prod_test.vcproj
│   │   │   ├── gtest_unittest-md.vcproj
│   │   │   └── gtest_unittest.vcproj
│   │   ├── samples/
│   │   │   ├── prime_tables.h
│   │   │   ├── sample1.cc
│   │   │   ├── sample1.h
│   │   │   ├── sample10_unittest.cc
│   │   │   ├── sample1_unittest.cc
│   │   │   ├── sample2.cc
│   │   │   ├── sample2.h
│   │   │   ├── sample2_unittest.cc
│   │   │   ├── sample3-inl.h
│   │   │   ├── sample3_unittest.cc
│   │   │   ├── sample4.cc
│   │   │   ├── sample4.h
│   │   │   ├── sample4_unittest.cc
│   │   │   ├── sample5_unittest.cc
│   │   │   ├── sample6_unittest.cc
│   │   │   ├── sample7_unittest.cc
│   │   │   ├── sample8_unittest.cc
│   │   │   └── sample9_unittest.cc
│   │   ├── scripts/
│   │   │   ├── fuse_gtest_files.py
│   │   │   ├── gen_gtest_pred_impl.py
│   │   │   ├── gtest-config.in
│   │   │   ├── pump.py
│   │   │   ├── test/
│   │   │   │   └── Makefile
│   │   │   ├── upload.py
│   │   │   └── upload_gtest.py
│   │   ├── src/
│   │   │   ├── gtest-all.cc
│   │   │   ├── gtest-death-test.cc
│   │   │   ├── gtest-filepath.cc
│   │   │   ├── gtest-internal-inl.h
│   │   │   ├── gtest-port.cc
│   │   │   ├── gtest-printers.cc
│   │   │   ├── gtest-test-part.cc
│   │   │   ├── gtest-typed-test.cc
│   │   │   ├── gtest.cc
│   │   │   └── gtest_main.cc
│   │   ├── test/
│   │   │   ├── gtest-death-test_ex_test.cc
│   │   │   ├── gtest-death-test_test.cc
│   │   │   ├── gtest-filepath_test.cc
│   │   │   ├── gtest-linked_ptr_test.cc
│   │   │   ├── gtest-listener_test.cc
│   │   │   ├── gtest-message_test.cc
│   │   │   ├── gtest-options_test.cc
│   │   │   ├── gtest-param-test2_test.cc
│   │   │   ├── gtest-param-test_test.cc
│   │   │   ├── gtest-param-test_test.h
│   │   │   ├── gtest-port_test.cc
│   │   │   ├── gtest-printers_test.cc
│   │   │   ├── gtest-test-part_test.cc
│   │   │   ├── gtest-tuple_test.cc
│   │   │   ├── gtest-typed-test2_test.cc
│   │   │   ├── gtest-typed-test_test.cc
│   │   │   ├── gtest-typed-test_test.h
│   │   │   ├── gtest-unittest-api_test.cc
│   │   │   ├── gtest_all_test.cc
│   │   │   ├── gtest_break_on_failure_unittest.py
│   │   │   ├── gtest_break_on_failure_unittest_.cc
│   │   │   ├── gtest_catch_exceptions_test.py
│   │   │   ├── gtest_catch_exceptions_test_.cc
│   │   │   ├── gtest_color_test.py
│   │   │   ├── gtest_color_test_.cc
│   │   │   ├── gtest_env_var_test.py
│   │   │   ├── gtest_env_var_test_.cc
│   │   │   ├── gtest_environment_test.cc
│   │   │   ├── gtest_filter_unittest.py
│   │   │   ├── gtest_filter_unittest_.cc
│   │   │   ├── gtest_help_test.py
│   │   │   ├── gtest_help_test_.cc
│   │   │   ├── gtest_list_tests_unittest.py
│   │   │   ├── gtest_list_tests_unittest_.cc
│   │   │   ├── gtest_main_unittest.cc
│   │   │   ├── gtest_no_test_unittest.cc
│   │   │   ├── gtest_output_test.py
│   │   │   ├── gtest_output_test_.cc
│   │   │   ├── gtest_output_test_golden_lin.txt
│   │   │   ├── gtest_pred_impl_unittest.cc
│   │   │   ├── gtest_premature_exit_test.cc
│   │   │   ├── gtest_prod_test.cc
│   │   │   ├── gtest_repeat_test.cc
│   │   │   ├── gtest_shuffle_test.py
│   │   │   ├── gtest_shuffle_test_.cc
│   │   │   ├── gtest_sole_header_test.cc
│   │   │   ├── gtest_stress_test.cc
│   │   │   ├── gtest_test_utils.py
│   │   │   ├── gtest_throw_on_failure_ex_test.cc
│   │   │   ├── gtest_throw_on_failure_test.py
│   │   │   ├── gtest_throw_on_failure_test_.cc
│   │   │   ├── gtest_uninitialized_test.py
│   │   │   ├── gtest_uninitialized_test_.cc
│   │   │   ├── gtest_unittest.cc
│   │   │   ├── gtest_xml_outfile1_test_.cc
│   │   │   ├── gtest_xml_outfile2_test_.cc
│   │   │   ├── gtest_xml_outfiles_test.py
│   │   │   ├── gtest_xml_output_unittest.py
│   │   │   ├── gtest_xml_output_unittest_.cc
│   │   │   ├── gtest_xml_test_utils.py
│   │   │   ├── production.cc
│   │   │   └── production.h
│   │   └── xcode/
│   │       ├── Config/
│   │       │   ├── DebugProject.xcconfig
│   │       │   ├── FrameworkTarget.xcconfig
│   │       │   ├── General.xcconfig
│   │       │   ├── ReleaseProject.xcconfig
│   │       │   ├── StaticLibraryTarget.xcconfig
│   │       │   └── TestTarget.xcconfig
│   │       ├── Resources/
│   │       │   └── Info.plist
│   │       ├── Samples/
│   │       │   └── FrameworkSample/
│   │       │       ├── Info.plist
│   │       │       ├── WidgetFramework.xcodeproj/
│   │       │       │   └── project.pbxproj
│   │       │       ├── runtests.sh
│   │       │       ├── widget.cc
│   │       │       ├── widget.h
│   │       │       └── widget_test.cc
│   │       ├── Scripts/
│   │       │   ├── runtests.sh
│   │       │   └── versiongenerate.py
│   │       └── gtest.xcodeproj/
│   │           └── project.pbxproj
│   ├── protobuf/
│   │   ├── CMakeLists.txt
│   │   └── protobuf-3.0.0/
│   │       ├── BUILD
│   │       ├── CHANGES.txt
│   │       ├── CONTRIBUTORS.txt
│   │       ├── LICENSE
│   │       ├── Makefile.am
│   │       ├── Makefile.in
│   │       ├── README.md
│   │       ├── WORKSPACE
│   │       ├── aclocal.m4
│   │       ├── ar-lib
│   │       ├── autogen.sh
│   │       ├── cmake/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── README.md
│   │       │   ├── examples.cmake
│   │       │   ├── extract_includes.bat.in
│   │       │   ├── install.cmake
│   │       │   ├── libprotobuf-lite.cmake
│   │       │   ├── libprotobuf.cmake
│   │       │   ├── libprotoc.cmake
│   │       │   ├── protobuf-config-version.cmake.in
│   │       │   ├── protobuf-config.cmake.in
│   │       │   ├── protobuf-module.cmake.in
│   │       │   ├── protobuf-options.cmake
│   │       │   ├── protoc.cmake
│   │       │   └── tests.cmake
│   │       ├── compile
│   │       ├── config.guess
│   │       ├── config.h.in
│   │       ├── config.sub
│   │       ├── configure
│   │       ├── configure.ac
│   │       ├── conformance/
│   │       │   ├── ConformanceJava.java
│   │       │   ├── ConformanceJavaLite.java
│   │       │   ├── Makefile.am
│   │       │   ├── Makefile.in
│   │       │   ├── README.md
│   │       │   ├── conformance.proto
│   │       │   ├── conformance_cpp.cc
│   │       │   ├── conformance_objc.m
│   │       │   ├── conformance_python.py
│   │       │   ├── conformance_ruby.rb
│   │       │   ├── conformance_test.cc
│   │       │   ├── conformance_test.h
│   │       │   ├── conformance_test_runner.cc
│   │       │   ├── failure_list_cpp.txt
│   │       │   ├── failure_list_csharp.txt
│   │       │   ├── failure_list_java.txt
│   │       │   ├── failure_list_objc.txt
│   │       │   ├── failure_list_python-post26.txt
│   │       │   ├── failure_list_python.txt
│   │       │   ├── failure_list_python_cpp.txt
│   │       │   ├── failure_list_ruby.txt
│   │       │   └── third_party/
│   │       │       └── jsoncpp/
│   │       │           ├── json.h
│   │       │           └── jsoncpp.cpp
│   │       ├── depcomp
│   │       ├── editors/
│   │       │   ├── README.txt
│   │       │   ├── proto.vim
│   │       │   └── protobuf-mode.el
│   │       ├── generate_descriptor_proto.sh
│   │       ├── gmock.BUILD
│   │       ├── install-sh
│   │       ├── ltmain.sh
│   │       ├── m4/
│   │       │   ├── ac_system_extensions.m4
│   │       │   ├── acx_check_suncc.m4
│   │       │   ├── acx_pthread.m4
│   │       │   ├── libtool.m4
│   │       │   ├── ltoptions.m4
│   │       │   ├── ltsugar.m4
│   │       │   ├── ltversion.m4
│   │       │   ├── lt~obsolete.m4
│   │       │   └── stl_hash.m4
│   │       ├── missing
│   │       ├── protobuf-lite.pc.in
│   │       ├── protobuf.bzl
│   │       ├── protobuf.pc.in
│   │       ├── six.BUILD
│   │       ├── src/
│   │       │   ├── Makefile.am
│   │       │   ├── Makefile.in
│   │       │   ├── README.md
│   │       │   └── google/
│   │       │       └── protobuf/
│   │       │           ├── any.cc
│   │       │           ├── any.h
│   │       │           ├── any.pb.cc
│   │       │           ├── any.pb.h
│   │       │           ├── any.proto
│   │       │           ├── any_test.cc
│   │       │           ├── any_test.proto
│   │       │           ├── api.pb.cc
│   │       │           ├── api.pb.h
│   │       │           ├── api.proto
│   │       │           ├── arena.cc
│   │       │           ├── arena.h
│   │       │           ├── arena_test_util.cc
│   │       │           ├── arena_test_util.h
│   │       │           ├── arena_unittest.cc
│   │       │           ├── arenastring.cc
│   │       │           ├── arenastring.h
│   │       │           ├── arenastring_unittest.cc
│   │       │           ├── compiler/
│   │       │           │   ├── code_generator.cc
│   │       │           │   ├── code_generator.h
│   │       │           │   ├── command_line_interface.cc
│   │       │           │   ├── command_line_interface.h
│   │       │           │   ├── command_line_interface_unittest.cc
│   │       │           │   ├── cpp/
│   │       │           │   │   ├── cpp_bootstrap_unittest.cc
│   │       │           │   │   ├── cpp_enum.cc
│   │       │           │   │   ├── cpp_enum.h
│   │       │           │   │   ├── cpp_enum_field.cc
│   │       │           │   │   ├── cpp_enum_field.h
│   │       │           │   │   ├── cpp_extension.cc
│   │       │           │   │   ├── cpp_extension.h
│   │       │           │   │   ├── cpp_field.cc
│   │       │           │   │   ├── cpp_field.h
│   │       │           │   │   ├── cpp_file.cc
│   │       │           │   │   ├── cpp_file.h
│   │       │           │   │   ├── cpp_generator.cc
│   │       │           │   │   ├── cpp_generator.h
│   │       │           │   │   ├── cpp_helpers.cc
│   │       │           │   │   ├── cpp_helpers.h
│   │       │           │   │   ├── cpp_map_field.cc
│   │       │           │   │   ├── cpp_map_field.h
│   │       │           │   │   ├── cpp_message.cc
│   │       │           │   │   ├── cpp_message.h
│   │       │           │   │   ├── cpp_message_field.cc
│   │       │           │   │   ├── cpp_message_field.h
│   │       │           │   │   ├── cpp_options.h
│   │       │           │   │   ├── cpp_plugin_unittest.cc
│   │       │           │   │   ├── cpp_primitive_field.cc
│   │       │           │   │   ├── cpp_primitive_field.h
│   │       │           │   │   ├── cpp_service.cc
│   │       │           │   │   ├── cpp_service.h
│   │       │           │   │   ├── cpp_string_field.cc
│   │       │           │   │   ├── cpp_string_field.h
│   │       │           │   │   ├── cpp_test_bad_identifiers.proto
│   │       │           │   │   ├── cpp_test_large_enum_value.proto
│   │       │           │   │   ├── cpp_unittest.cc
│   │       │           │   │   ├── cpp_unittest.h
│   │       │           │   │   └── metadata_test.cc
│   │       │           │   ├── csharp/
│   │       │           │   │   ├── csharp_doc_comment.cc
│   │       │           │   │   ├── csharp_doc_comment.h
│   │       │           │   │   ├── csharp_enum.cc
│   │       │           │   │   ├── csharp_enum.h
│   │       │           │   │   ├── csharp_enum_field.cc
│   │       │           │   │   ├── csharp_enum_field.h
│   │       │           │   │   ├── csharp_field_base.cc
│   │       │           │   │   ├── csharp_field_base.h
│   │       │           │   │   ├── csharp_generator.cc
│   │       │           │   │   ├── csharp_generator.h
│   │       │           │   │   ├── csharp_generator_unittest.cc
│   │       │           │   │   ├── csharp_helpers.cc
│   │       │           │   │   ├── csharp_helpers.h
│   │       │           │   │   ├── csharp_map_field.cc
│   │       │           │   │   ├── csharp_map_field.h
│   │       │           │   │   ├── csharp_message.cc
│   │       │           │   │   ├── csharp_message.h
│   │       │           │   │   ├── csharp_message_field.cc
│   │       │           │   │   ├── csharp_message_field.h
│   │       │           │   │   ├── csharp_names.h
│   │       │           │   │   ├── csharp_options.h
│   │       │           │   │   ├── csharp_primitive_field.cc
│   │       │           │   │   ├── csharp_primitive_field.h
│   │       │           │   │   ├── csharp_reflection_class.cc
│   │       │           │   │   ├── csharp_reflection_class.h
│   │       │           │   │   ├── csharp_repeated_enum_field.cc
│   │       │           │   │   ├── csharp_repeated_enum_field.h
│   │       │           │   │   ├── csharp_repeated_message_field.cc
│   │       │           │   │   ├── csharp_repeated_message_field.h
│   │       │           │   │   ├── csharp_repeated_primitive_field.cc
│   │       │           │   │   ├── csharp_repeated_primitive_field.h
│   │       │           │   │   ├── csharp_source_generator_base.cc
│   │       │           │   │   ├── csharp_source_generator_base.h
│   │       │           │   │   ├── csharp_wrapper_field.cc
│   │       │           │   │   └── csharp_wrapper_field.h
│   │       │           │   ├── importer.cc
│   │       │           │   ├── importer.h
│   │       │           │   ├── importer_unittest.cc
│   │       │           │   ├── java/
│   │       │           │   │   ├── java_context.cc
│   │       │           │   │   ├── java_context.h
│   │       │           │   │   ├── java_doc_comment.cc
│   │       │           │   │   ├── java_doc_comment.h
│   │       │           │   │   ├── java_doc_comment_unittest.cc
│   │       │           │   │   ├── java_enum.cc
│   │       │           │   │   ├── java_enum.h
│   │       │           │   │   ├── java_enum_field.cc
│   │       │           │   │   ├── java_enum_field.h
│   │       │           │   │   ├── java_enum_field_lite.cc
│   │       │           │   │   ├── java_enum_field_lite.h
│   │       │           │   │   ├── java_enum_lite.cc
│   │       │           │   │   ├── java_enum_lite.h
│   │       │           │   │   ├── java_extension.cc
│   │       │           │   │   ├── java_extension.h
│   │       │           │   │   ├── java_extension_lite.cc
│   │       │           │   │   ├── java_extension_lite.h
│   │       │           │   │   ├── java_field.cc
│   │       │           │   │   ├── java_field.h
│   │       │           │   │   ├── java_file.cc
│   │       │           │   │   ├── java_file.h
│   │       │           │   │   ├── java_generator.cc
│   │       │           │   │   ├── java_generator.h
│   │       │           │   │   ├── java_generator_factory.cc
│   │       │           │   │   ├── java_generator_factory.h
│   │       │           │   │   ├── java_helpers.cc
│   │       │           │   │   ├── java_helpers.h
│   │       │           │   │   ├── java_lazy_message_field.cc
│   │       │           │   │   ├── java_lazy_message_field.h
│   │       │           │   │   ├── java_lazy_message_field_lite.cc
│   │       │           │   │   ├── java_lazy_message_field_lite.h
│   │       │           │   │   ├── java_map_field.cc
│   │       │           │   │   ├── java_map_field.h
│   │       │           │   │   ├── java_map_field_lite.cc
│   │       │           │   │   ├── java_map_field_lite.h
│   │       │           │   │   ├── java_message.cc
│   │       │           │   │   ├── java_message.h
│   │       │           │   │   ├── java_message_builder.cc
│   │       │           │   │   ├── java_message_builder.h
│   │       │           │   │   ├── java_message_builder_lite.cc
│   │       │           │   │   ├── java_message_builder_lite.h
│   │       │           │   │   ├── java_message_field.cc
│   │       │           │   │   ├── java_message_field.h
│   │       │           │   │   ├── java_message_field_lite.cc
│   │       │           │   │   ├── java_message_field_lite.h
│   │       │           │   │   ├── java_message_lite.cc
│   │       │           │   │   ├── java_message_lite.h
│   │       │           │   │   ├── java_name_resolver.cc
│   │       │           │   │   ├── java_name_resolver.h
│   │       │           │   │   ├── java_names.h
│   │       │           │   │   ├── java_options.h
│   │       │           │   │   ├── java_plugin_unittest.cc
│   │       │           │   │   ├── java_primitive_field.cc
│   │       │           │   │   ├── java_primitive_field.h
│   │       │           │   │   ├── java_primitive_field_lite.cc
│   │       │           │   │   ├── java_primitive_field_lite.h
│   │       │           │   │   ├── java_service.cc
│   │       │           │   │   ├── java_service.h
│   │       │           │   │   ├── java_shared_code_generator.cc
│   │       │           │   │   ├── java_shared_code_generator.h
│   │       │           │   │   ├── java_string_field.cc
│   │       │           │   │   ├── java_string_field.h
│   │       │           │   │   ├── java_string_field_lite.cc
│   │       │           │   │   └── java_string_field_lite.h
│   │       │           │   ├── javanano/
│   │       │           │   │   ├── javanano_enum.cc
│   │       │           │   │   ├── javanano_enum.h
│   │       │           │   │   ├── javanano_enum_field.cc
│   │       │           │   │   ├── javanano_enum_field.h
│   │       │           │   │   ├── javanano_extension.cc
│   │       │           │   │   ├── javanano_extension.h
│   │       │           │   │   ├── javanano_field.cc
│   │       │           │   │   ├── javanano_field.h
│   │       │           │   │   ├── javanano_file.cc
│   │       │           │   │   ├── javanano_file.h
│   │       │           │   │   ├── javanano_generator.cc
│   │       │           │   │   ├── javanano_generator.h
│   │       │           │   │   ├── javanano_helpers.cc
│   │       │           │   │   ├── javanano_helpers.h
│   │       │           │   │   ├── javanano_map_field.cc
│   │       │           │   │   ├── javanano_map_field.h
│   │       │           │   │   ├── javanano_message.cc
│   │       │           │   │   ├── javanano_message.h
│   │       │           │   │   ├── javanano_message_field.cc
│   │       │           │   │   ├── javanano_message_field.h
│   │       │           │   │   ├── javanano_params.h
│   │       │           │   │   ├── javanano_primitive_field.cc
│   │       │           │   │   └── javanano_primitive_field.h
│   │       │           │   ├── js/
│   │       │           │   │   ├── js_generator.cc
│   │       │           │   │   └── js_generator.h
│   │       │           │   ├── main.cc
│   │       │           │   ├── mock_code_generator.cc
│   │       │           │   ├── mock_code_generator.h
│   │       │           │   ├── objectivec/
│   │       │           │   │   ├── objectivec_enum.cc
│   │       │           │   │   ├── objectivec_enum.h
│   │       │           │   │   ├── objectivec_enum_field.cc
│   │       │           │   │   ├── objectivec_enum_field.h
│   │       │           │   │   ├── objectivec_extension.cc
│   │       │           │   │   ├── objectivec_extension.h
│   │       │           │   │   ├── objectivec_field.cc
│   │       │           │   │   ├── objectivec_field.h
│   │       │           │   │   ├── objectivec_file.cc
│   │       │           │   │   ├── objectivec_file.h
│   │       │           │   │   ├── objectivec_generator.cc
│   │       │           │   │   ├── objectivec_generator.h
│   │       │           │   │   ├── objectivec_helpers.cc
│   │       │           │   │   ├── objectivec_helpers.h
│   │       │           │   │   ├── objectivec_helpers_unittest.cc
│   │       │           │   │   ├── objectivec_map_field.cc
│   │       │           │   │   ├── objectivec_map_field.h
│   │       │           │   │   ├── objectivec_message.cc
│   │       │           │   │   ├── objectivec_message.h
│   │       │           │   │   ├── objectivec_message_field.cc
│   │       │           │   │   ├── objectivec_message_field.h
│   │       │           │   │   ├── objectivec_oneof.cc
│   │       │           │   │   ├── objectivec_oneof.h
│   │       │           │   │   ├── objectivec_primitive_field.cc
│   │       │           │   │   └── objectivec_primitive_field.h
│   │       │           │   ├── package_info.h
│   │       │           │   ├── parser.cc
│   │       │           │   ├── parser.h
│   │       │           │   ├── parser_unittest.cc
│   │       │           │   ├── plugin.cc
│   │       │           │   ├── plugin.h
│   │       │           │   ├── plugin.pb.cc
│   │       │           │   ├── plugin.pb.h
│   │       │           │   ├── plugin.proto
│   │       │           │   ├── python/
│   │       │           │   │   ├── python_generator.cc
│   │       │           │   │   ├── python_generator.h
│   │       │           │   │   └── python_plugin_unittest.cc
│   │       │           │   ├── ruby/
│   │       │           │   │   ├── ruby_generated_code.proto
│   │       │           │   │   ├── ruby_generated_code_pb.rb
│   │       │           │   │   ├── ruby_generator.cc
│   │       │           │   │   ├── ruby_generator.h
│   │       │           │   │   └── ruby_generator_unittest.cc
│   │       │           │   ├── subprocess.cc
│   │       │           │   ├── subprocess.h
│   │       │           │   ├── test_plugin.cc
│   │       │           │   ├── zip_output_unittest.sh
│   │       │           │   ├── zip_writer.cc
│   │       │           │   └── zip_writer.h
│   │       │           ├── descriptor.cc
│   │       │           ├── descriptor.h
│   │       │           ├── descriptor.pb.cc
│   │       │           ├── descriptor.pb.h
│   │       │           ├── descriptor.proto
│   │       │           ├── descriptor_database.cc
│   │       │           ├── descriptor_database.h
│   │       │           ├── descriptor_database_unittest.cc
│   │       │           ├── descriptor_unittest.cc
│   │       │           ├── drop_unknown_fields_test.cc
│   │       │           ├── duration.pb.cc
│   │       │           ├── duration.pb.h
│   │       │           ├── duration.proto
│   │       │           ├── dynamic_message.cc
│   │       │           ├── dynamic_message.h
│   │       │           ├── dynamic_message_unittest.cc
│   │       │           ├── empty.pb.cc
│   │       │           ├── empty.pb.h
│   │       │           ├── empty.proto
│   │       │           ├── extension_set.cc
│   │       │           ├── extension_set.h
│   │       │           ├── extension_set_heavy.cc
│   │       │           ├── extension_set_unittest.cc
│   │       │           ├── field_mask.pb.cc
│   │       │           ├── field_mask.pb.h
│   │       │           ├── field_mask.proto
│   │       │           ├── generated_enum_reflection.h
│   │       │           ├── generated_enum_util.h
│   │       │           ├── generated_message_reflection.cc
│   │       │           ├── generated_message_reflection.h
│   │       │           ├── generated_message_reflection_unittest.cc
│   │       │           ├── generated_message_util.cc
│   │       │           ├── generated_message_util.h
│   │       │           ├── io/
│   │       │           │   ├── coded_stream.cc
│   │       │           │   ├── coded_stream.h
│   │       │           │   ├── coded_stream_inl.h
│   │       │           │   ├── coded_stream_unittest.cc
│   │       │           │   ├── gzip_stream.cc
│   │       │           │   ├── gzip_stream.h
│   │       │           │   ├── gzip_stream_unittest.sh
│   │       │           │   ├── package_info.h
│   │       │           │   ├── printer.cc
│   │       │           │   ├── printer.h
│   │       │           │   ├── printer_unittest.cc
│   │       │           │   ├── strtod.cc
│   │       │           │   ├── strtod.h
│   │       │           │   ├── tokenizer.cc
│   │       │           │   ├── tokenizer.h
│   │       │           │   ├── tokenizer_unittest.cc
│   │       │           │   ├── zero_copy_stream.cc
│   │       │           │   ├── zero_copy_stream.h
│   │       │           │   ├── zero_copy_stream_impl.cc
│   │       │           │   ├── zero_copy_stream_impl.h
│   │       │           │   ├── zero_copy_stream_impl_lite.cc
│   │       │           │   ├── zero_copy_stream_impl_lite.h
│   │       │           │   └── zero_copy_stream_unittest.cc
│   │       │           ├── lite_arena_unittest.cc
│   │       │           ├── lite_unittest.cc
│   │       │           ├── map.h
│   │       │           ├── map_entry.h
│   │       │           ├── map_entry_lite.h
│   │       │           ├── map_field.cc
│   │       │           ├── map_field.h
│   │       │           ├── map_field_inl.h
│   │       │           ├── map_field_lite.h
│   │       │           ├── map_field_test.cc
│   │       │           ├── map_lite_test_util.cc
│   │       │           ├── map_lite_test_util.h
│   │       │           ├── map_lite_unittest.proto
│   │       │           ├── map_proto2_unittest.proto
│   │       │           ├── map_test.cc
│   │       │           ├── map_test_util.cc
│   │       │           ├── map_test_util.h
│   │       │           ├── map_test_util_impl.h
│   │       │           ├── map_type_handler.h
│   │       │           ├── map_unittest.proto
│   │       │           ├── message.cc
│   │       │           ├── message.h
│   │       │           ├── message_lite.cc
│   │       │           ├── message_lite.h
│   │       │           ├── message_unittest.cc
│   │       │           ├── metadata.h
│   │       │           ├── no_field_presence_test.cc
│   │       │           ├── package_info.h
│   │       │           ├── preserve_unknown_enum_test.cc
│   │       │           ├── proto3_arena_lite_unittest.cc
│   │       │           ├── proto3_arena_unittest.cc
│   │       │           ├── proto3_lite_unittest.cc
│   │       │           ├── reflection.h
│   │       │           ├── reflection_internal.h
│   │       │           ├── reflection_ops.cc
│   │       │           ├── reflection_ops.h
│   │       │           ├── reflection_ops_unittest.cc
│   │       │           ├── repeated_field.cc
│   │       │           ├── repeated_field.h
│   │       │           ├── repeated_field_reflection_unittest.cc
│   │       │           ├── repeated_field_unittest.cc
│   │       │           ├── service.cc
│   │       │           ├── service.h
│   │       │           ├── source_context.pb.cc
│   │       │           ├── source_context.pb.h
│   │       │           ├── source_context.proto
│   │       │           ├── struct.pb.cc
│   │       │           ├── struct.pb.h
│   │       │           ├── struct.proto
│   │       │           ├── stubs/
│   │       │           │   ├── atomic_sequence_num.h
│   │       │           │   ├── atomicops.h
│   │       │           │   ├── atomicops_internals_arm64_gcc.h
│   │       │           │   ├── atomicops_internals_arm_gcc.h
│   │       │           │   ├── atomicops_internals_arm_qnx.h
│   │       │           │   ├── atomicops_internals_atomicword_compat.h
│   │       │           │   ├── atomicops_internals_generic_gcc.h
│   │       │           │   ├── atomicops_internals_macosx.h
│   │       │           │   ├── atomicops_internals_mips_gcc.h
│   │       │           │   ├── atomicops_internals_pnacl.h
│   │       │           │   ├── atomicops_internals_power.h
│   │       │           │   ├── atomicops_internals_ppc_gcc.h
│   │       │           │   ├── atomicops_internals_solaris.h
│   │       │           │   ├── atomicops_internals_tsan.h
│   │       │           │   ├── atomicops_internals_x86_gcc.cc
│   │       │           │   ├── atomicops_internals_x86_gcc.h
│   │       │           │   ├── atomicops_internals_x86_msvc.cc
│   │       │           │   ├── atomicops_internals_x86_msvc.h
│   │       │           │   ├── bytestream.cc
│   │       │           │   ├── bytestream.h
│   │       │           │   ├── bytestream_unittest.cc
│   │       │           │   ├── callback.h
│   │       │           │   ├── casts.h
│   │       │           │   ├── common.cc
│   │       │           │   ├── common.h
│   │       │           │   ├── common_unittest.cc
│   │       │           │   ├── fastmem.h
│   │       │           │   ├── hash.h
│   │       │           │   ├── int128.cc
│   │       │           │   ├── int128.h
│   │       │           │   ├── int128_unittest.cc
│   │       │           │   ├── logging.h
│   │       │           │   ├── macros.h
│   │       │           │   ├── map_util.h
│   │       │           │   ├── mathlimits.cc
│   │       │           │   ├── mathlimits.h
│   │       │           │   ├── mathutil.h
│   │       │           │   ├── mutex.h
│   │       │           │   ├── once.cc
│   │       │           │   ├── once.h
│   │       │           │   ├── once_unittest.cc
│   │       │           │   ├── platform_macros.h
│   │       │           │   ├── port.h
│   │       │           │   ├── scoped_ptr.h
│   │       │           │   ├── shared_ptr.h
│   │       │           │   ├── singleton.h
│   │       │           │   ├── status.cc
│   │       │           │   ├── status.h
│   │       │           │   ├── status_macros.h
│   │       │           │   ├── status_test.cc
│   │       │           │   ├── statusor.cc
│   │       │           │   ├── statusor.h
│   │       │           │   ├── statusor_test.cc
│   │       │           │   ├── stl_util.h
│   │       │           │   ├── stringpiece.cc
│   │       │           │   ├── stringpiece.h
│   │       │           │   ├── stringpiece_unittest.cc
│   │       │           │   ├── stringprintf.cc
│   │       │           │   ├── stringprintf.h
│   │       │           │   ├── stringprintf_unittest.cc
│   │       │           │   ├── structurally_valid.cc
│   │       │           │   ├── structurally_valid_unittest.cc
│   │       │           │   ├── strutil.cc
│   │       │           │   ├── strutil.h
│   │       │           │   ├── strutil_unittest.cc
│   │       │           │   ├── substitute.cc
│   │       │           │   ├── substitute.h
│   │       │           │   ├── template_util.h
│   │       │           │   ├── template_util_unittest.cc
│   │       │           │   ├── time.cc
│   │       │           │   ├── time.h
│   │       │           │   ├── time_test.cc
│   │       │           │   ├── type_traits.h
│   │       │           │   └── type_traits_unittest.cc
│   │       │           ├── test_util.cc
│   │       │           ├── test_util.h
│   │       │           ├── test_util_lite.cc
│   │       │           ├── test_util_lite.h
│   │       │           ├── testdata/
│   │       │           │   ├── bad_utf8_string
│   │       │           │   ├── golden_message
│   │       │           │   ├── golden_message_maps
│   │       │           │   ├── golden_message_oneof_implemented
│   │       │           │   ├── golden_message_proto3
│   │       │           │   ├── golden_packed_fields_message
│   │       │           │   ├── map_test_data.txt
│   │       │           │   ├── text_format_unittest_data.txt
│   │       │           │   ├── text_format_unittest_data_oneof_implemented.txt
│   │       │           │   ├── text_format_unittest_data_pointy.txt
│   │       │           │   ├── text_format_unittest_data_pointy_oneof.txt
│   │       │           │   ├── text_format_unittest_extensions_data.txt
│   │       │           │   └── text_format_unittest_extensions_data_pointy.txt
│   │       │           ├── testing/
│   │       │           │   ├── file.cc
│   │       │           │   ├── file.h
│   │       │           │   ├── googletest.cc
│   │       │           │   ├── googletest.h
│   │       │           │   ├── zcgunzip.cc
│   │       │           │   └── zcgzip.cc
│   │       │           ├── text_format.cc
│   │       │           ├── text_format.h
│   │       │           ├── text_format_unittest.cc
│   │       │           ├── timestamp.pb.cc
│   │       │           ├── timestamp.pb.h
│   │       │           ├── timestamp.proto
│   │       │           ├── type.pb.cc
│   │       │           ├── type.pb.h
│   │       │           ├── type.proto
│   │       │           ├── unittest.proto
│   │       │           ├── unittest_arena.proto
│   │       │           ├── unittest_custom_options.proto
│   │       │           ├── unittest_drop_unknown_fields.proto
│   │       │           ├── unittest_embed_optimize_for.proto
│   │       │           ├── unittest_empty.proto
│   │       │           ├── unittest_enormous_descriptor.proto
│   │       │           ├── unittest_import.proto
│   │       │           ├── unittest_import_lite.proto
│   │       │           ├── unittest_import_public.proto
│   │       │           ├── unittest_import_public_lite.proto
│   │       │           ├── unittest_lite.proto
│   │       │           ├── unittest_lite_imports_nonlite.proto
│   │       │           ├── unittest_mset.proto
│   │       │           ├── unittest_mset_wire_format.proto
│   │       │           ├── unittest_no_arena.proto
│   │       │           ├── unittest_no_arena_import.proto
│   │       │           ├── unittest_no_arena_lite.proto
│   │       │           ├── unittest_no_field_presence.proto
│   │       │           ├── unittest_no_generic_services.proto
│   │       │           ├── unittest_optimize_for.proto
│   │       │           ├── unittest_preserve_unknown_enum.proto
│   │       │           ├── unittest_preserve_unknown_enum2.proto
│   │       │           ├── unittest_proto3_arena.proto
│   │       │           ├── unittest_proto3_arena_lite.proto
│   │       │           ├── unittest_proto3_lite.proto
│   │       │           ├── unittest_well_known_types.proto
│   │       │           ├── unknown_field_set.cc
│   │       │           ├── unknown_field_set.h
│   │       │           ├── unknown_field_set_unittest.cc
│   │       │           ├── util/
│   │       │           │   ├── field_comparator.cc
│   │       │           │   ├── field_comparator.h
│   │       │           │   ├── field_comparator_test.cc
│   │       │           │   ├── field_mask_util.cc
│   │       │           │   ├── field_mask_util.h
│   │       │           │   ├── field_mask_util_test.cc
│   │       │           │   ├── internal/
│   │       │           │   │   ├── constants.h
│   │       │           │   │   ├── datapiece.cc
│   │       │           │   │   ├── datapiece.h
│   │       │           │   │   ├── default_value_objectwriter.cc
│   │       │           │   │   ├── default_value_objectwriter.h
│   │       │           │   │   ├── default_value_objectwriter_test.cc
│   │       │           │   │   ├── error_listener.cc
│   │       │           │   │   ├── error_listener.h
│   │       │           │   │   ├── expecting_objectwriter.h
│   │       │           │   │   ├── field_mask_utility.cc
│   │       │           │   │   ├── field_mask_utility.h
│   │       │           │   │   ├── json_escaping.cc
│   │       │           │   │   ├── json_escaping.h
│   │       │           │   │   ├── json_objectwriter.cc
│   │       │           │   │   ├── json_objectwriter.h
│   │       │           │   │   ├── json_objectwriter_test.cc
│   │       │           │   │   ├── json_stream_parser.cc
│   │       │           │   │   ├── json_stream_parser.h
│   │       │           │   │   ├── json_stream_parser_test.cc
│   │       │           │   │   ├── location_tracker.h
│   │       │           │   │   ├── mock_error_listener.h
│   │       │           │   │   ├── object_location_tracker.h
│   │       │           │   │   ├── object_source.h
│   │       │           │   │   ├── object_writer.cc
│   │       │           │   │   ├── object_writer.h
│   │       │           │   │   ├── proto_writer.cc
│   │       │           │   │   ├── proto_writer.h
│   │       │           │   │   ├── protostream_objectsource.cc
│   │       │           │   │   ├── protostream_objectsource.h
│   │       │           │   │   ├── protostream_objectsource_test.cc
│   │       │           │   │   ├── protostream_objectwriter.cc
│   │       │           │   │   ├── protostream_objectwriter.h
│   │       │           │   │   ├── protostream_objectwriter_test.cc
│   │       │           │   │   ├── structured_objectwriter.h
│   │       │           │   │   ├── testdata/
│   │       │           │   │   │   ├── anys.proto
│   │       │           │   │   │   ├── books.proto
│   │       │           │   │   │   ├── default_value.proto
│   │       │           │   │   │   ├── default_value_test.proto
│   │       │           │   │   │   ├── field_mask.proto
│   │       │           │   │   │   ├── maps.proto
│   │       │           │   │   │   ├── oneofs.proto
│   │       │           │   │   │   ├── struct.proto
│   │       │           │   │   │   └── timestamp_duration.proto
│   │       │           │   │   ├── type_info.cc
│   │       │           │   │   ├── type_info.h
│   │       │           │   │   ├── type_info_test_helper.cc
│   │       │           │   │   ├── type_info_test_helper.h
│   │       │           │   │   ├── utility.cc
│   │       │           │   │   └── utility.h
│   │       │           │   ├── json_format_proto3.proto
│   │       │           │   ├── json_util.cc
│   │       │           │   ├── json_util.h
│   │       │           │   ├── json_util_test.cc
│   │       │           │   ├── message_differencer.cc
│   │       │           │   ├── message_differencer.h
│   │       │           │   ├── message_differencer_unittest.cc
│   │       │           │   ├── message_differencer_unittest.proto
│   │       │           │   ├── time_util.cc
│   │       │           │   ├── time_util.h
│   │       │           │   ├── time_util_test.cc
│   │       │           │   ├── type_resolver.h
│   │       │           │   ├── type_resolver_util.cc
│   │       │           │   ├── type_resolver_util.h
│   │       │           │   └── type_resolver_util_test.cc
│   │       │           ├── well_known_types_unittest.cc
│   │       │           ├── wire_format.cc
│   │       │           ├── wire_format.h
│   │       │           ├── wire_format_lite.cc
│   │       │           ├── wire_format_lite.h
│   │       │           ├── wire_format_lite_inl.h
│   │       │           ├── wire_format_unittest.cc
│   │       │           ├── wrappers.pb.cc
│   │       │           ├── wrappers.pb.h
│   │       │           └── wrappers.proto
│   │       ├── test-driver
│   │       ├── update_file_lists.sh
│   │       └── util/
│   │           └── python/
│   │               └── BUILD
│   ├── rapidjson/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── .gitmodules
│   │   ├── .travis.yml
│   │   ├── CHANGELOG.md
│   │   ├── CMakeLists.txt
│   │   ├── CMakeModules/
│   │   │   └── FindGTestSrc.cmake
│   │   ├── RapidJSON.pc.in
│   │   ├── RapidJSONConfig.cmake.in
│   │   ├── RapidJSONConfigVersion.cmake.in
│   │   ├── appveyor.yml
│   │   ├── bin/
│   │   │   ├── data/
│   │   │   │   ├── glossary.json
│   │   │   │   ├── menu.json
│   │   │   │   ├── readme.txt
│   │   │   │   ├── sample.json
│   │   │   │   ├── webapp.json
│   │   │   │   └── widget.json
│   │   │   ├── encodings/
│   │   │   │   ├── utf16be.json
│   │   │   │   ├── utf16bebom.json
│   │   │   │   ├── utf16le.json
│   │   │   │   ├── utf16lebom.json
│   │   │   │   ├── utf32be.json
│   │   │   │   ├── utf32bebom.json
│   │   │   │   ├── utf32le.json
│   │   │   │   ├── utf32lebom.json
│   │   │   │   ├── utf8.json
│   │   │   │   └── utf8bom.json
│   │   │   └── types/
│   │   │       ├── booleans.json
│   │   │       ├── floats.json
│   │   │       ├── guids.json
│   │   │       ├── integers.json
│   │   │       ├── mixed.json
│   │   │       ├── nulls.json
│   │   │       ├── paragraphs.json
│   │   │       └── readme.txt
│   │   ├── doc/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Doxyfile.in
│   │   │   ├── Doxyfile.zh-cn.in
│   │   │   ├── diagram/
│   │   │   │   ├── architecture.dot
│   │   │   │   ├── insituparsing.dot
│   │   │   │   ├── iterative-parser-states-diagram.dot
│   │   │   │   ├── makefile
│   │   │   │   ├── move1.dot
│   │   │   │   ├── move2.dot
│   │   │   │   ├── move3.dot
│   │   │   │   ├── normalparsing.dot
│   │   │   │   ├── simpledom.dot
│   │   │   │   ├── tutorial.dot
│   │   │   │   └── utilityclass.dot
│   │   │   ├── dom.md
│   │   │   ├── dom.zh-cn.md
│   │   │   ├── encoding.md
│   │   │   ├── encoding.zh-cn.md
│   │   │   ├── faq.md
│   │   │   ├── faq.zh-cn.md
│   │   │   ├── features.md
│   │   │   ├── features.zh-cn.md
│   │   │   ├── internals.md
│   │   │   ├── misc/
│   │   │   │   ├── DoxygenLayout.xml
│   │   │   │   ├── doxygenextra.css
│   │   │   │   ├── footer.html
│   │   │   │   └── header.html
│   │   │   ├── npm.md
│   │   │   ├── performance.md
│   │   │   ├── performance.zh-cn.md
│   │   │   ├── pointer.md
│   │   │   ├── pointer.zh-cn.md
│   │   │   ├── sax.md
│   │   │   ├── sax.zh-cn.md
│   │   │   ├── schema.md
│   │   │   ├── schema.zh-cn.md
│   │   │   ├── stream.md
│   │   │   ├── stream.zh-cn.md
│   │   │   ├── tutorial.md
│   │   │   └── tutorial.zh-cn.md
│   │   ├── docker/
│   │   │   └── debian/
│   │   │       └── Dockerfile
│   │   ├── example/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── capitalize/
│   │   │   │   └── capitalize.cpp
│   │   │   ├── condense/
│   │   │   │   └── condense.cpp
│   │   │   ├── filterkey/
│   │   │   │   └── filterkey.cpp
│   │   │   ├── filterkeydom/
│   │   │   │   └── filterkeydom.cpp
│   │   │   ├── jsonx/
│   │   │   │   └── jsonx.cpp
│   │   │   ├── messagereader/
│   │   │   │   └── messagereader.cpp
│   │   │   ├── parsebyparts/
│   │   │   │   └── parsebyparts.cpp
│   │   │   ├── pretty/
│   │   │   │   └── pretty.cpp
│   │   │   ├── prettyauto/
│   │   │   │   └── prettyauto.cpp
│   │   │   ├── schemavalidator/
│   │   │   │   └── schemavalidator.cpp
│   │   │   ├── serialize/
│   │   │   │   └── serialize.cpp
│   │   │   ├── simpledom/
│   │   │   │   └── simpledom.cpp
│   │   │   ├── simplereader/
│   │   │   │   └── simplereader.cpp
│   │   │   ├── simplewriter/
│   │   │   │   └── simplewriter.cpp
│   │   │   └── tutorial/
│   │   │       └── tutorial.cpp
│   │   ├── include/
│   │   │   └── rapidjson/
│   │   │       ├── allocators.h
│   │   │       ├── document.h
│   │   │       ├── encodedstream.h
│   │   │       ├── encodings.h
│   │   │       ├── error/
│   │   │       │   ├── en.h
│   │   │       │   └── error.h
│   │   │       ├── filereadstream.h
│   │   │       ├── filewritestream.h
│   │   │       ├── fwd.h
│   │   │       ├── internal/
│   │   │       │   ├── biginteger.h
│   │   │       │   ├── diyfp.h
│   │   │       │   ├── dtoa.h
│   │   │       │   ├── ieee754.h
│   │   │       │   ├── itoa.h
│   │   │       │   ├── meta.h
│   │   │       │   ├── pow10.h
│   │   │       │   ├── regex.h
│   │   │       │   ├── stack.h
│   │   │       │   ├── strfunc.h
│   │   │       │   ├── strtod.h
│   │   │       │   └── swap.h
│   │   │       ├── istreamwrapper.h
│   │   │       ├── memorybuffer.h
│   │   │       ├── memorystream.h
│   │   │       ├── msinttypes/
│   │   │       │   ├── inttypes.h
│   │   │       │   └── stdint.h
│   │   │       ├── ostreamwrapper.h
│   │   │       ├── pointer.h
│   │   │       ├── prettywriter.h
│   │   │       ├── rapidjson.h
│   │   │       ├── reader.h
│   │   │       ├── schema.h
│   │   │       ├── stream.h
│   │   │       ├── stringbuffer.h
│   │   │       └── writer.h
│   │   ├── include_dirs.js
│   │   ├── library.json
│   │   ├── license.txt
│   │   ├── license_readme-oracle.txt
│   │   ├── package.json
│   │   ├── rapidjson.autopkg
│   │   ├── readme.md
│   │   ├── readme.zh-cn.md
│   │   ├── test/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── perftest/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── misctest.cpp
│   │   │   │   ├── perftest.cpp
│   │   │   │   ├── perftest.h
│   │   │   │   ├── platformtest.cpp
│   │   │   │   ├── rapidjsontest.cpp
│   │   │   │   └── schematest.cpp
│   │   │   └── unittest/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── allocatorstest.cpp
│   │   │       ├── bigintegertest.cpp
│   │   │       ├── documenttest.cpp
│   │   │       ├── dtoatest.cpp
│   │   │       ├── encodedstreamtest.cpp
│   │   │       ├── encodingstest.cpp
│   │   │       ├── filestreamtest.cpp
│   │   │       ├── fwdtest.cpp
│   │   │       ├── istreamwrappertest.cpp
│   │   │       ├── itoatest.cpp
│   │   │       ├── jsoncheckertest.cpp
│   │   │       ├── namespacetest.cpp
│   │   │       ├── ostreamwrappertest.cpp
│   │   │       ├── pointertest.cpp
│   │   │       ├── prettywritertest.cpp
│   │   │       ├── readertest.cpp
│   │   │       ├── regextest.cpp
│   │   │       ├── schematest.cpp
│   │   │       ├── simdtest.cpp
│   │   │       ├── strfunctest.cpp
│   │   │       ├── stringbuffertest.cpp
│   │   │       ├── strtodtest.cpp
│   │   │       ├── unittest.cpp
│   │   │       ├── unittest.h
│   │   │       ├── valuetest.cpp
│   │   │       └── writertest.cpp
│   │   └── travis-doxygen.sh
│   └── yassl/
│       ├── AUTHORS
│       ├── CMakeLists.txt
│       ├── COPYING
│       ├── ChangeLog
│       ├── FLOSS-EXCEPTIONS
│       ├── INSTALL
│       ├── NEWS
│       ├── README
│       ├── certs/
│       │   ├── ca-cert.pem
│       │   ├── ca-key.pem
│       │   ├── client-cert.der
│       │   ├── client-cert.pem
│       │   ├── client-key.der
│       │   ├── client-key.pem
│       │   ├── client-keyEnc.pem
│       │   ├── client-keyEnc3.pem
│       │   ├── dsa-cert.pem
│       │   ├── dsa1024.der
│       │   ├── dsa1024.pem
│       │   ├── server-cert.pem
│       │   ├── server-key.pem
│       │   ├── server-keyEnc.pem
│       │   └── taoCert.txt
│       ├── examples/
│       │   ├── client/
│       │   │   ├── client.cpp
│       │   │   └── client.dsp
│       │   ├── echoclient/
│       │   │   ├── echoclient.cpp
│       │   │   ├── echoclient.dsp
│       │   │   ├── input
│       │   │   └── quit
│       │   ├── echoserver/
│       │   │   ├── echoserver.cpp
│       │   │   └── echoserver.dsp
│       │   └── server/
│       │       ├── server.cpp
│       │       └── server.dsp
│       ├── include/
│       │   ├── buffer.hpp
│       │   ├── cert_wrapper.hpp
│       │   ├── crypto_wrapper.hpp
│       │   ├── factory.hpp
│       │   ├── handshake.hpp
│       │   ├── lock.hpp
│       │   ├── log.hpp
│       │   ├── openssl/
│       │   │   ├── crypto.h
│       │   │   ├── des.h
│       │   │   ├── des_old.h
│       │   │   ├── engine.h
│       │   │   ├── err.h
│       │   │   ├── evp.h
│       │   │   ├── generate_prefix_files.pl
│       │   │   ├── hmac.h
│       │   │   ├── lhash.h
│       │   │   ├── md4.h
│       │   │   ├── md5.h
│       │   │   ├── objects.h
│       │   │   ├── opensslv.h
│       │   │   ├── pem.h
│       │   │   ├── pkcs12.h
│       │   │   ├── prefix_crypto.h
│       │   │   ├── prefix_ssl.h
│       │   │   ├── rand.h
│       │   │   ├── rsa.h
│       │   │   ├── sha.h
│       │   │   ├── ssl.h
│       │   │   ├── transport_types.h
│       │   │   ├── x509.h
│       │   │   └── x509v3.h
│       │   ├── socket_wrapper.hpp
│       │   ├── timer.hpp
│       │   ├── yassl.hpp
│       │   ├── yassl_error.hpp
│       │   ├── yassl_imp.hpp
│       │   ├── yassl_int.hpp
│       │   └── yassl_types.hpp
│       ├── lib/
│       │   └── dummy
│       ├── src/
│       │   ├── buffer.cpp
│       │   ├── cert_wrapper.cpp
│       │   ├── crypto_wrapper.cpp
│       │   ├── dummy.cpp
│       │   ├── handshake.cpp
│       │   ├── lock.cpp
│       │   ├── log.cpp
│       │   ├── make.bat
│       │   ├── socket_wrapper.cpp
│       │   ├── ssl.cpp
│       │   ├── template_instnt.cpp
│       │   ├── timer.cpp
│       │   ├── yassl.cpp
│       │   ├── yassl_error.cpp
│       │   ├── yassl_imp.cpp
│       │   └── yassl_int.cpp
│       ├── taocrypt/
│       │   ├── CMakeLists.txt
│       │   ├── COPYING
│       │   ├── INSTALL
│       │   ├── README
│       │   ├── benchmark/
│       │   │   ├── benchmark.cpp
│       │   │   ├── benchmark.dsp
│       │   │   ├── dh1024.der
│       │   │   ├── dsa1024.der
│       │   │   ├── make.bat
│       │   │   └── rsa1024.der
│       │   ├── include/
│       │   │   ├── aes.hpp
│       │   │   ├── algebra.hpp
│       │   │   ├── arc4.hpp
│       │   │   ├── asn.hpp
│       │   │   ├── block.hpp
│       │   │   ├── blowfish.hpp
│       │   │   ├── coding.hpp
│       │   │   ├── des.hpp
│       │   │   ├── dh.hpp
│       │   │   ├── dsa.hpp
│       │   │   ├── error.hpp
│       │   │   ├── file.hpp
│       │   │   ├── hash.hpp
│       │   │   ├── hc128.hpp
│       │   │   ├── hmac.hpp
│       │   │   ├── integer.hpp
│       │   │   ├── kernelc.hpp
│       │   │   ├── md2.hpp
│       │   │   ├── md4.hpp
│       │   │   ├── md5.hpp
│       │   │   ├── misc.hpp
│       │   │   ├── modarith.hpp
│       │   │   ├── modes.hpp
│       │   │   ├── pwdbased.hpp
│       │   │   ├── rabbit.hpp
│       │   │   ├── random.hpp
│       │   │   ├── ripemd.hpp
│       │   │   ├── rsa.hpp
│       │   │   ├── runtime.hpp
│       │   │   ├── sha.hpp
│       │   │   ├── twofish.hpp
│       │   │   ├── type_traits.hpp
│       │   │   └── types.hpp
│       │   ├── mySTL/
│       │   │   ├── algorithm.hpp
│       │   │   ├── helpers.hpp
│       │   │   ├── list.hpp
│       │   │   ├── memory.hpp
│       │   │   ├── memory_array.hpp
│       │   │   ├── pair.hpp
│       │   │   ├── stdexcept.hpp
│       │   │   └── vector.hpp
│       │   ├── src/
│       │   │   ├── aes.cpp
│       │   │   ├── aestables.cpp
│       │   │   ├── algebra.cpp
│       │   │   ├── arc4.cpp
│       │   │   ├── asn.cpp
│       │   │   ├── bftables.cpp
│       │   │   ├── blowfish.cpp
│       │   │   ├── coding.cpp
│       │   │   ├── des.cpp
│       │   │   ├── dh.cpp
│       │   │   ├── dsa.cpp
│       │   │   ├── file.cpp
│       │   │   ├── hash.cpp
│       │   │   ├── hc128.cpp
│       │   │   ├── integer.cpp
│       │   │   ├── make.bat
│       │   │   ├── md2.cpp
│       │   │   ├── md4.cpp
│       │   │   ├── md5.cpp
│       │   │   ├── misc.cpp
│       │   │   ├── rabbit.cpp
│       │   │   ├── random.cpp
│       │   │   ├── ripemd.cpp
│       │   │   ├── rsa.cpp
│       │   │   ├── sha.cpp
│       │   │   ├── template_instnt.cpp
│       │   │   ├── tftables.cpp
│       │   │   └── twofish.cpp
│       │   ├── taocrypt.dsp
│       │   ├── taocrypt.dsw
│       │   ├── test/
│       │   │   ├── make.bat
│       │   │   ├── memory.cpp
│       │   │   ├── test.cpp
│       │   │   └── test.dsp
│       │   └── test.dsw
│       ├── testsuite/
│       │   ├── cipher-test.sh
│       │   ├── input
│       │   ├── make.bat
│       │   ├── quit
│       │   ├── test.hpp
│       │   ├── testsuite.cpp
│       │   └── testsuite.dsp
│       ├── yassl.dsp
│       └── yassl.dsw
├── packaging/
│   ├── README_Debian.md
│   ├── WiX/
│   │   ├── CMakeLists.txt
│   │   ├── CPackWixConfig.cmake
│   │   ├── ca/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── CustomAction.cpp
│   │   │   └── CustomAction.def
│   │   ├── create_msi.cmake.in
│   │   ├── custom_ui.wxs
│   │   ├── extra.wxs.in
│   │   ├── mysql_router.wxs.in
│   │   ├── mysql_router_extra.wxs.in
│   │   ├── mysqlrouter.conf.in
│   │   └── versioninfo.rc.in
│   ├── build_deb.sh
│   ├── build_rpm.sh
│   ├── deb-artful/
│   │   ├── changelog
│   │   └── control
│   ├── deb-bionic/
│   │   ├── changelog
│   │   └── control
│   ├── deb-common/
│   │   ├── compat
│   │   ├── copyright
│   │   ├── extra/
│   │   │   ├── apparmor-profile.in
│   │   │   └── mysqlrouter.conf.in
│   │   ├── mysql-router-dev.install
│   │   ├── mysql-router-dev.lintian-overrides
│   │   ├── mysql-router.install
│   │   ├── mysql-router.lintian-overrides
│   │   ├── mysql-router.mysqlrouter.init
│   │   ├── mysql-router.postinst
│   │   ├── mysql-router.postrm
│   │   ├── mysql-router.preinst
│   │   ├── mysql-router.prerm
│   │   ├── rules
│   │   └── source/
│   │       └── format
│   ├── deb-jessie/
│   │   ├── changelog
│   │   └── control
│   ├── deb-stretch/
│   │   ├── changelog
│   │   └── control
│   ├── deb-trusty/
│   │   ├── changelog
│   │   └── control
│   ├── deb-vivid/
│   │   ├── changelog
│   │   └── control
│   ├── deb-wily/
│   │   ├── changelog
│   │   └── control
│   ├── deb-xenial/
│   │   ├── changelog
│   │   └── control
│   ├── deb-yakkety/
│   │   ├── changelog
│   │   └── control
│   ├── deb-zesty/
│   │   ├── changelog
│   │   └── control
│   └── rpm-oel/
│       ├── CMakeLists.txt
│       ├── mysql-router.spec.in
│       ├── mysqlrouter.conf.in
│       ├── mysqlrouter.init
│       ├── mysqlrouter.service
│       └── mysqlrouter.tmpfiles.d
├── src/
│   ├── CMakeLists.txt
│   ├── harness/
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── CPPLINT.cfg
│   │   ├── Doxyfile.in
│   │   ├── README.txt
│   │   ├── data/
│   │   │   └── main.conf
│   │   ├── include/
│   │   │   ├── common.h
│   │   │   ├── dim.h
│   │   │   ├── harness_assert.h
│   │   │   ├── hostname_validator.h
│   │   │   ├── keyring/
│   │   │   │   ├── keyring.h
│   │   │   │   ├── keyring_file.h
│   │   │   │   ├── keyring_manager.h
│   │   │   │   └── keyring_memory.h
│   │   │   ├── mysql/
│   │   │   │   └── harness/
│   │   │   │       ├── arg_handler.h
│   │   │   │       ├── compiler_attributes.h
│   │   │   │       ├── config_parser.h
│   │   │   │       ├── filesystem.h
│   │   │   │       ├── loader.h
│   │   │   │       ├── loader_config.h
│   │   │   │       ├── logging/
│   │   │   │       │   ├── handler.h
│   │   │   │       │   ├── logger.h
│   │   │   │       │   ├── logging.h
│   │   │   │       │   └── registry.h
│   │   │   │       ├── networking/
│   │   │   │       │   ├── ip_address.h
│   │   │   │       │   ├── ipv4_address.h
│   │   │   │       │   ├── ipv6_address.h
│   │   │   │       │   └── resolver.h
│   │   │   │       └── queue.h
│   │   │   ├── mysql_router_thread.h
│   │   │   ├── process_launcher.h
│   │   │   ├── random_generator.h
│   │   │   ├── socket_operations.h
│   │   │   ├── tcp_address.h
│   │   │   └── unique_ptr.h
│   │   ├── internal/
│   │   │   ├── README.md
│   │   │   ├── checks/
│   │   │   │   └── build_all.py
│   │   │   ├── exclude-from-release.txt
│   │   │   └── hooks/
│   │   │       ├── pre-commit
│   │   │       ├── pre-receive
│   │   │       └── update
│   │   ├── plugin.h.in
│   │   ├── shared/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── include/
│   │   │   │   └── test/
│   │   │   │       └── helpers.h
│   │   │   └── src/
│   │   │       └── test_helpers.cc
│   │   ├── src/
│   │   │   ├── arg_handler.cc
│   │   │   ├── common.cc
│   │   │   ├── config_parser.cc
│   │   │   ├── designator.cc
│   │   │   ├── designator.h
│   │   │   ├── dim.cc
│   │   │   ├── exception.h
│   │   │   ├── filesystem-posix.cc
│   │   │   ├── filesystem-windows.cc
│   │   │   ├── filesystem.cc
│   │   │   ├── hostname_validator.cc
│   │   │   ├── keyring/
│   │   │   │   ├── keyring_file.cc
│   │   │   │   ├── keyring_manager.cc
│   │   │   │   └── keyring_memory.cc
│   │   │   ├── loader-posix.cc
│   │   │   ├── loader-windows.cc
│   │   │   ├── loader.cc
│   │   │   ├── loader_config.cc
│   │   │   ├── logging/
│   │   │   │   ├── handler.cc
│   │   │   │   ├── logger.cc
│   │   │   │   ├── logging.cc
│   │   │   │   └── registry.cc
│   │   │   ├── mysql_router_thread.cc
│   │   │   ├── networking/
│   │   │   │   ├── ip_address.cc
│   │   │   │   ├── ipv4_address.cc
│   │   │   │   ├── ipv6_address.cc
│   │   │   │   └── resolver.cc
│   │   │   ├── process_launcher.cc
│   │   │   ├── random_generator.cc
│   │   │   ├── socket_operations.cc
│   │   │   ├── tcp_address.cc
│   │   │   ├── utilities-posix.cc
│   │   │   ├── utilities-windows.cc
│   │   │   ├── utilities.cc
│   │   │   └── utilities.h
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── data/
│   │       │   ├── logger.cfg
│   │       │   ├── logger.d/
│   │       │   │   ├── default.cfg
│   │       │   │   ├── magic.cfg
│   │       │   │   └── one.cfg
│   │       │   ├── magic-alt.cfg
│   │       │   ├── tests-bad-1.cfg
│   │       │   ├── tests-bad-2.cfg
│   │       │   ├── tests-bad-3.cfg
│   │       │   ├── tests-good-1.cfg.in
│   │       │   ├── tests-good-2.cfg.in
│   │       │   └── tests-start-1.cfg.in
│   │       ├── include/
│   │       │   ├── lifecycle.h
│   │       │   └── magic.h
│   │       ├── plugins/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── bad_one.cc
│   │       │   ├── bad_two.cc
│   │       │   ├── example.cc
│   │       │   ├── lifecycle.cc
│   │       │   ├── lifecycle2.cc
│   │       │   ├── lifecycle3.cc
│   │       │   └── magic.cc
│   │       ├── test_bug22104451.cc
│   │       ├── test_common.cc
│   │       ├── test_config.cc
│   │       ├── test_designator.cc
│   │       ├── test_dim_and_unique_ptr.cc
│   │       ├── test_filesystem.cc
│   │       ├── test_hostname_validator.cc
│   │       ├── test_ip_address.cc
│   │       ├── test_iterator.cc
│   │       ├── test_keyring.cc
│   │       ├── test_keyring_manager.cc
│   │       ├── test_loader.cc
│   │       ├── test_loader_lifecycle.cc
│   │       ├── test_logging.cc
│   │       ├── test_mysql_router_thread.cc
│   │       ├── test_queue.cc
│   │       ├── test_random_generator.cc
│   │       ├── test_resolver.cc
│   │       └── test_utilities.cc
│   ├── http/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       ├── http_client.h
│   │   │       ├── http_client_export.h
│   │   │       ├── http_common.h
│   │   │       ├── http_common_export.h
│   │   │       ├── http_server_component.h
│   │   │       ├── http_server_export.h
│   │   │       └── rest_client.h
│   │   ├── src/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── http_client.cc
│   │   │   ├── http_common.cc
│   │   │   ├── http_request_impl.h
│   │   │   ├── http_server_component.cc
│   │   │   ├── http_server_plugin.cc
│   │   │   ├── http_server_plugin.h
│   │   │   ├── http_time.cc
│   │   │   ├── posix_re.h
│   │   │   ├── rest_cli.cc
│   │   │   ├── rest_client.cc
│   │   │   └── static_files.cc
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── test_posix_re.cc
│   │       └── test_time.cc
│   ├── keepalive/
│   │   ├── CMakeLists.txt
│   │   ├── src/
│   │   │   └── keepalive.cc
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── data/
│   │       │   └── keepalive.cfg.in
│   │       └── test_plugin_keepalive.cc
│   ├── metadata_cache/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       └── metadata_cache.h
│   │   ├── src/
│   │   │   ├── cache_api.cc
│   │   │   ├── cluster_metadata.cc
│   │   │   ├── cluster_metadata.h
│   │   │   ├── group_replication_metadata.cc
│   │   │   ├── group_replication_metadata.h
│   │   │   ├── metadata.h
│   │   │   ├── metadata_cache.cc
│   │   │   ├── metadata_cache.h
│   │   │   ├── metadata_cache_plugin.cc
│   │   │   ├── metadata_factory.cc
│   │   │   ├── metadata_factory.h
│   │   │   ├── plugin_config.cc
│   │   │   └── plugin_config.h
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── helper/
│   │       │   ├── mock_metadata.cc
│   │       │   ├── mock_metadata.h
│   │       │   └── mock_metadata_factory.cc
│   │       ├── test_cache_plugin.cc
│   │       ├── test_failover.cc
│   │       ├── test_metadata.cc
│   │       ├── test_metadata_cache.cc
│   │       └── test_plugin_config.cc
│   ├── mock_server/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       ├── mock_server_component.h
│   │   │       ├── mock_server_export.h
│   │   │       └── mock_server_global_scope.h
│   │   └── src/
│   │       ├── CMakeLists.txt
│   │       ├── duk_module_shim.c
│   │       ├── duk_module_shim.h
│   │       ├── duk_node_fs.c
│   │       ├── duk_node_fs.h
│   │       ├── duktape_statement_reader.cc
│   │       ├── duktape_statement_reader.h
│   │       ├── json_schema_embedder.cc
│   │       ├── json_statement_reader.cc
│   │       ├── json_statement_reader.h
│   │       ├── main.cc
│   │       ├── mock_server_component.cc
│   │       ├── mock_server_plugin.cc
│   │       ├── mock_server_plugin.h
│   │       ├── mysql_protocol_common.h
│   │       ├── mysql_protocol_decoder.cc
│   │       ├── mysql_protocol_decoder.h
│   │       ├── mysql_protocol_encoder.cc
│   │       ├── mysql_protocol_encoder.h
│   │       ├── mysql_protocol_utils.cc
│   │       ├── mysql_protocol_utils.h
│   │       ├── mysql_server_mock.cc
│   │       ├── mysql_server_mock.h
│   │       ├── mysql_server_mock.md
│   │       ├── mysql_server_mock_schema.h
│   │       ├── mysql_server_mock_schema.js
│   │       ├── rest_mock_server.cc
│   │       └── statement_reader.h
│   ├── mysql_protocol/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       ├── mysql_protocol/
│   │   │       │   ├── base_packet.h
│   │   │       │   ├── constants.h
│   │   │       │   ├── error_packet.h
│   │   │       │   └── handshake_packet.h
│   │   │       └── mysql_protocol.h
│   │   ├── src/
│   │   │   ├── base_packet.cc
│   │   │   ├── error_packet.cc
│   │   │   └── handshake_packet.cc
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── test_base_packet.cc
│   │       ├── test_constants.cc
│   │       ├── test_error_packet.cc
│   │       └── test_handshake_packet.cc
│   ├── plugin_info/
│   │   ├── CMakeLists.txt
│   │   ├── src/
│   │   │   ├── library_file.cc
│   │   │   ├── library_file.h
│   │   │   ├── main.cc
│   │   │   ├── plugin.cc
│   │   │   ├── plugin.h
│   │   │   ├── plugin_info_app.cc
│   │   │   └── plugin_info_app.h
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       └── test_plugin_info_app.cc
│   ├── router/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       ├── datatypes.h
│   │   │       ├── keyring_info.h
│   │   │       ├── log_filter.h
│   │   │       ├── my_aes.h
│   │   │       ├── my_aes_impl.h
│   │   │       ├── mysql_session.h
│   │   │       ├── plugin_config.h
│   │   │       ├── sha1.h
│   │   │       ├── uri.h
│   │   │       ├── utils.h
│   │   │       ├── utils_sqlstring.h
│   │   │       └── windows/
│   │   │           └── password_vault.h
│   │   ├── src/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── cluster_metadata.cc
│   │   │   ├── cluster_metadata.h
│   │   │   ├── common/
│   │   │   │   ├── log_filter.cc
│   │   │   │   ├── my_aes.cc
│   │   │   │   ├── my_aes_openssl.cc
│   │   │   │   ├── my_aes_yassl.cc
│   │   │   │   ├── my_sha1.cc
│   │   │   │   ├── mysql_session.cc
│   │   │   │   └── utils_sqlstring.cc
│   │   │   ├── config_files.cc
│   │   │   ├── config_files.h
│   │   │   ├── config_generator.cc
│   │   │   ├── config_generator.h
│   │   │   ├── keyring_info.cc
│   │   │   ├── main.cc
│   │   │   ├── plugin_config.cc
│   │   │   ├── router_app.cc
│   │   │   ├── router_app.h
│   │   │   ├── uri.cc
│   │   │   ├── utils.cc
│   │   │   └── windows/
│   │   │       ├── main-windows.cc
│   │   │       ├── main-windows.h
│   │   │       ├── nt_servc.cc
│   │   │       ├── nt_servc.h
│   │   │       └── password_vault.cc
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── config_a.conf
│   │       ├── config_b.conf
│   │       ├── config_c.ini
│   │       ├── issues/
│   │       │   ├── test_bug22074209.cc
│   │       │   ├── test_bug22084430.cc
│   │       │   ├── test_bug22572346.cc
│   │       │   └── test_bug24909259.cc
│   │       ├── mysqlrouter.conf.in
│   │       ├── mysqlrouter_app.cc
│   │       ├── mysqlrouter_consolelogger.conf.in
│   │       ├── mysqlrouter_extra.conf.in
│   │       ├── mysqlrouter_nologger.conf.in
│   │       ├── mysqlrouter_utils.cc
│   │       ├── parse_error.conf
│   │       ├── router_arghandler.cc
│   │       ├── test_cluster_metadata.cc
│   │       ├── test_config_files.cc
│   │       ├── test_config_generator.cc
│   │       ├── test_configuration_errors.cc
│   │       ├── test_console_output.cc
│   │       ├── test_datatypes.cc
│   │       ├── test_log_filter.cc
│   │       ├── test_metadata_check.cc
│   │       ├── test_mysql_session.cc
│   │       ├── test_plugins_config.cc
│   │       ├── test_uri.cc
│   │       └── test_utils.cc
│   ├── routing/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       └── routing.h
│   │   ├── src/
│   │   │   ├── connection.cc
│   │   │   ├── connection.h
│   │   │   ├── connection_container.cc
│   │   │   ├── connection_container.h
│   │   │   ├── context.cc
│   │   │   ├── context.h
│   │   │   ├── dest_first_available.cc
│   │   │   ├── dest_first_available.h
│   │   │   ├── dest_metadata_cache.cc
│   │   │   ├── dest_metadata_cache.h
│   │   │   ├── dest_next_available.cc
│   │   │   ├── dest_next_available.h
│   │   │   ├── dest_round_robin.cc
│   │   │   ├── dest_round_robin.h
│   │   │   ├── destination.cc
│   │   │   ├── destination.h
│   │   │   ├── mysql_routing.cc
│   │   │   ├── mysql_routing.h
│   │   │   ├── mysql_routing_common.cc
│   │   │   ├── mysql_routing_common.h
│   │   │   ├── plugin_config.cc
│   │   │   ├── plugin_config.h
│   │   │   ├── protocol/
│   │   │   │   ├── base_protocol.h
│   │   │   │   ├── classic_protocol.cc
│   │   │   │   ├── classic_protocol.h
│   │   │   │   ├── protocol.h
│   │   │   │   ├── x_protocol.cc
│   │   │   │   └── x_protocol.h
│   │   │   ├── routing.cc
│   │   │   ├── routing_plugin.cc
│   │   │   ├── utils.cc
│   │   │   └── utils.h
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── data/
│   │       │   └── 1route.conf.in
│   │       ├── issues/
│   │       │   ├── test_bug21873666.cc
│   │       │   ├── test_bug21962350.cc
│   │       │   ├── test_bug22062859.cc
│   │       │   └── test_bug22579989.cc
│   │       ├── plugin/
│   │       │   └── test_plugin.cc
│   │       ├── routing_mocks.h
│   │       ├── test_block_clients.cc
│   │       ├── test_classic_protocol.cc
│   │       ├── test_config.cc
│   │       ├── test_connection.cc
│   │       ├── test_connection_container.cc
│   │       ├── test_first_available.cc
│   │       ├── test_metadata_cache_group.cc
│   │       ├── test_next_available.cc
│   │       ├── test_round_robin.cc
│   │       ├── test_routing.cc
│   │       ├── test_setup_named_socket_service.cc
│   │       ├── test_setup_tcp_service.cc
│   │       └── test_x_protocol.cc
│   ├── syslog/
│   │   ├── CMakeLists.txt
│   │   └── src/
│   │       └── syslog.cc
│   └── x_protocol/
│       ├── CMakeLists.txt
│       ├── include/
│       │   └── mysqlrouter/
│       │       └── xprotocol.h
│       └── proto/
│           ├── mysqlx.proto
│           ├── mysqlx_connection.proto
│           ├── mysqlx_crud.proto
│           ├── mysqlx_datatypes.proto
│           ├── mysqlx_expect.proto
│           ├── mysqlx_expr.proto
│           ├── mysqlx_notice.proto
│           ├── mysqlx_resultset.proto
│           ├── mysqlx_session.proto
│           └── mysqlx_sql.proto
└── tests/
    ├── CMakeLists.txt
    ├── component/
    │   ├── CMakeLists.txt
    │   ├── data/
    │   │   ├── bootstrap.js
    │   │   ├── bootstrap_access_error_at_grant.js
    │   │   ├── bootstrap_account_host_multiple_patterns.js
    │   │   ├── bootstrap_account_host_pattern_too_long.js
    │   │   ├── bootstrap_big_data.js
    │   │   ├── bootstrap_exec_time_2_seconds.js
    │   │   ├── bootstrap_failover_at_crash.js
    │   │   ├── bootstrap_failover_at_grant.js
    │   │   ├── bootstrap_failover_reconfigure_ok.js
    │   │   ├── bootstrap_failover_reconfigure_ok_3_old_users.js
    │   │   ├── bootstrap_failover_super_read_only_1.js
    │   │   ├── bootstrap_failover_super_read_only_2.js
    │   │   ├── bootstrap_failover_super_read_only_dead_2nd_1.js
    │   │   ├── bootstrap_failover_super_read_only_delete_user.js
    │   │   ├── bootstrap_report_host.js
    │   │   ├── bootstrap_unsupported_schema_version.js
    │   │   ├── js_test_empty_file.js
    │   │   ├── js_test_nesting.js
    │   │   ├── js_test_parse_error.js
    │   │   ├── js_test_require.js
    │   │   ├── js_test_stmts_is_array.js
    │   │   ├── js_test_stmts_is_coroutine.js
    │   │   ├── js_test_stmts_is_empty.js
    │   │   ├── js_test_stmts_is_function.js
    │   │   ├── js_test_stmts_is_string.js
    │   │   ├── js_test_stmts_result_has_infinity.js
    │   │   ├── js_test_stmts_result_has_negative_int.js
    │   │   ├── js_test_stmts_result_has_repeat.js
    │   │   ├── local_modules/
    │   │   │   ├── common_statements.js
    │   │   │   ├── gr_memberships.js
    │   │   │   └── itertools.js
    │   │   ├── metadata_1_node.js
    │   │   ├── metadata_1_node_repeat.js
    │   │   ├── metadata_3_nodes_first_not_accessible.js
    │   │   ├── metadata_3_secondaries.js
    │   │   ├── metadata_3_secondaries_failed_to_update.js
    │   │   ├── metadata_3_secondaries_pass.js
    │   │   ├── metadata_3_secondaries_primary_failover.js
    │   │   ├── metadata_3_secondaries_server_removed_from_cluster.js
    │   │   ├── metadata_4_secondaries_partitioning.js
    │   │   ├── my_port.js
    │   │   ├── rest_server_mock.js
    │   │   ├── simple-client.js
    │   │   └── test_modules/
    │   │       ├── test-require-dir-with-indexjs/
    │   │       │   └── index.js
    │   │       ├── test-require-dir-with-packagejson/
    │   │       │   ├── foo.js
    │   │       │   └── package.json
    │   │       ├── test-require-direct.js
    │   │       ├── test-require-nesting-1.js
    │   │       ├── test-require-nesting-2.js
    │   │       ├── test-require-nesting-3.js
    │   │       ├── test-require-nesting-4.js
    │   │       └── test-require-nesting-5.js
    │   ├── test_bootstrap.cc
    │   ├── test_bootstrap_system_deployment.cc
    │   ├── test_component_test_framework.cc
    │   ├── test_config.cc
    │   ├── test_logging.cc
    │   ├── test_master_key_reader_writer.cc
    │   ├── test_metadata_ttl.cc
    │   ├── test_mock_server.cc
    │   ├── test_rest_mock_server.cc
    │   ├── test_routing.cc
    │   ├── test_routing_connection.cc
    │   ├── test_routing_strategy.cc
    │   └── test_user_option.cc
    ├── coverage.ignore
    ├── fuzzers/
    │   ├── CMakeLists.txt
    │   ├── README.txt
    │   ├── corpus/
    │   │   ├── fuzz_router_uri/
    │   │   │   ├── uri-1
    │   │   │   ├── uri-2
    │   │   │   └── uri-3
    │   │   └── fuzz_router_uri_tostring/
    │   │       └── uri-ipv6-zoneid
    │   ├── fuzz_router_uri.cc
    │   └── fuzz_router_uri_tostring.cc
    ├── gcoverage.sh
    ├── helpers/
    │   ├── cmd_exec-windows.cc
    │   ├── cmd_exec-windows.h
    │   ├── cmd_exec.cc
    │   ├── cmd_exec.h
    │   ├── gtest_consoleoutput.h
    │   ├── master_key_test_writer.cc
    │   ├── mysql_session_replayer.cc
    │   ├── mysql_session_replayer.h
    │   ├── router_component_test.cc
    │   ├── router_component_test.h
    │   ├── router_test_helpers.cc
    │   ├── router_test_helpers.h
    │   ├── script_generator.cc
    │   ├── script_generator.h
    │   ├── tcp_port_pool.cc
    │   └── tcp_port_pool.h
    ├── legal/
    │   ├── test_legal.cc
    │   └── test_project_name.cc
    └── tools/
        └── gtest_cxx.cc

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Object files
*.o
*.lo
*.obj

# Compiled libraries
*.so
*.dll
*.dylib
*.a
*.la
*.lib

# Executables
*.exe
*.out

# Byte code
*.pyc

# Editors & Tools
.idea/
*.sublime-*
*~

# Folders
.DS_Store
/build*
/gtest/**
/gmock/**
/harness/**
/doc/html
/doc/latex
/mysql-server

# Python
*__pycache__*
MANIFEST

# Misc.
commit.txt
*.patch
*.diff
local.cmake
packages/rpm-*/*.spec


================================================
FILE: CMakeLists.txt
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

cmake_minimum_required(VERSION 2.8.12)

include(cmake/version.cmake)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})

if(${CMAKE_VERSION} VERSION_GREATER "3.0")
  cmake_policy(SET CMP0042 NEW)
  cmake_policy(SET CMP0046 NEW)
  cmake_policy(SET CMP0048 NEW)
  if(${CMAKE_VERSION} VERSION_GREATER "3.1")
    cmake_policy(SET CMP0054 NEW)
  endif()
  project("MySQLRouter" VERSION ${PROJECT_VERSION_TEXT} LANGUAGES C CXX)
else()
  project("MySQLRouter")
endif()

SET(MySQLRouter_BINARY_STAGE_DIR ${MySQLRouter_BINARY_DIR}/stage CACHE INTERNAL "STAGE_DIR")

if(EXISTS "${CMAKE_SOURCE_DIR}/extra/rapidjson/")
  # prefer server-side rapidjson
  SET(RAPIDJSON_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extra/rapidjson/include/")
else()
  SET(RAPIDJSON_INCLUDE_DIRS "${MySQLRouter_SOURCE_DIR}/ext/rapidjson/include/")
endif()

IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
  # disable rapidjson optimisation on Solaris as the it breaks
  # shared objects that build with -fPIC
  ADD_DEFINITIONS(-DRAPIDJSON_48BITPOINTER_OPTIMIZATION=0)
ENDIF()

IF(EXISTS "${CMAKE_SOURCE_DIR}/rapid/plugin/x/protocol/mysqlx.proto")
  # use the server's protobuf files, we they exist
  SET(PROTOBUF_MYSQLX_DIR "${CMAKE_SOURCE_DIR}/rapid/plugin/x/protocol/")
ELSE()
  SET(PROTOBUF_MYSQLX_DIR "${MySQLRouter_SOURCE_DIR}/src/x_protocol/proto/")
ENDIF()

find_package(LibEvent2 2.0 MODULE REQUIRED)

include(cmake/settings.cmake)

if(WITH_UNIT_TESTS)
  set(ENABLE_TESTS 1)
endif()

# Load Internal
if(EXISTS "${PROJECT_SOURCE_DIR}/internal/")
  message(STATUS "Loading internal repository")
  add_subdirectory(internal)
endif()

# SSL
# Add bundled yassl/taocrypt or system openssl.
include(cmake/ssl.cmake)
if(NOT WITH_SSL)
  set(WITH_SSL bundled)
endif()
MYSQL_CHECK_SSL()
MESSAGE(STATUS "SSL_LIBRARIES:    ${SSL_LIBRARIES}")
MESSAGE(STATUS "SSL_DEFINES:      ${SSL_DEFINES}")
MESSAGE(STATUS "SSL_INCLUDE_DIRS: ${SSL_INCLUDE_DIRS}")

IF(UNIX)
  OPTION(WITH_VALGRIND "Valgrind instrumentation" OFF)
ENDIF()

# Required tools, libraries, etc..
include(cmake/testing.cmake)  # does not enable testing
include(cmake/platform.cmake)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/install_layout.cmake")
  include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/install_layout.cmake)
else()
  include(cmake/install_layout.cmake)  # needs ARCH_64BIT
endif()
include(cmake/configure.cmake)
include(Coverage)
# Harness before Compiler.cmake (compiler flags), after configure.cmake because of compiler flags
include(cmake/compiler.cmake)
find_package(Threads REQUIRED)
include(cmake/docs.cmake)
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/include/mysql.h")
  # if we are built as part of the server-tree, don't initiate our own packaging
  include(cmake/packaging.cmake)
endif()

find_package(MySQL 5.5 REQUIRED)
include_directories(${PROJECT_BINARY_DIR}/include)

include(cmake/compile_flags.cmake)
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/include/mysql.h")
  # if we are build as part of the server-tree, use their protobuf
  include(cmake/protobuf.cmake)
  MYSQL_CHECK_PROTOBUF()
endif()

# Enable testing
if(ENABLE_TESTS)
  enable_testing()
  add_subdirectory(tests)
endif()

# Load all modules, including plugins
add_subdirectory(src)


================================================
FILE: License.txt
================================================
Licensing Information User Manual

MySQL Router 8.0
     __________________________________________________________________

Introduction

   This License Information User Manual contains Oracle's product license
   and other licensing information, including licensing information for
   third-party software which may be included in this distribution of
   MySQL Router 8.0.

   Last updated: February 2018.

Licensing Information

   This is a release of MySQL Router 8.0, brought to you by the MySQL team
   at Oracle. This software is released under version 2 of the GNU General
   Public License (GPLv2), as set forth below, with the following
   additional permissions:

   This distribution of MySQL Router 8.0 is distributed with certain
   software (including but not limited to OpenSSL) that is licensed under
   separate terms, as designated in a particular file or component or in
   the license documentation. Without limiting your rights under the
   GPLv2, the authors of MySQL hereby grant you an additional permission
   to link the program and your derivative works with the separately
   licensed software that they have included with the program.

   Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights
   reserved.

Election of GPLv2

   For the avoidance of doubt, except that if any license choice other
   than GPL or LGPL is available it will apply instead, Oracle elects to
   use only the General Public License version 2 (GPLv2) at this time for
   any software where a choice of GPL license versions is made available
   with the language indicating that GPLv2 or any later version may be
   used, or where a choice of which version of the GPL is applied is
   otherwise unspecified.

GNU General Public License Version 2.0, June 1991

The following applies to all products licensed under the GNU General
Public License, Version 2.0: You may not use the identified files
except in compliance with the GNU General Public License, Version
2.0 (the "License.") You may obtain a copy of the License at
http://www.gnu.org/licenses/gpl-2.0.txt. A copy of the license is
also reproduced below. Unless required by applicable law or agreed
to in writing, software distributed under the License is distributed
on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific language
governing permissions and limitations under the License.

GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim
copies of this license document, but changing it is not
allowed.

                     Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software,
and (2) offer you this license which gives you legal permission to
copy, distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on,
we want its recipients to know that what they have is not the original,
so that any problems introduced by others will not reflect on the
original authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.


  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.


  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.


  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software
    interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as
a special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.


  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.


  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.


  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.


  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.


  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.


  9. The Free Software Foundation may publish revised and/or new
versions of the General Public License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Program does not specify a
version number of this License, you may choose any version ever
published by the Free Software Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the
author to ask for permission.  For software which is copyrighted by the
Free Software Foundation, write to the Free Software Foundation; we
sometimes make exceptions for this.  Our decision will be guided by the
two goals of preserving the free status of all derivatives of our free
software and of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS
WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of

    the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
    type 'show w'. This is free software, and you are welcome
    to redistribute it under certain conditions; type 'show c'
    for details.

The hypothetical commands 'show w' and 'show c' should show the
appropriate parts of the General Public License.  Of course, the
commands you use may be called something other than 'show w' and
'show c'; they could even be mouse-clicks or menu items--whatever
suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  program 'Gnomovision' (which makes passes at compilers) written
  by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library,
you may consider it more useful to permit linking proprietary
applications with the library.  If this is what you want to do, use
the GNU Lesser General Public License instead of this License.

Licenses for Third-Party Components

   The following sections contain licensing information for libraries that
   we have included with the MySQL Router 8.0 source and components used
   to test MySQL Router 8.0. We are thankful to all individuals that have
   created these.

Google C++ Mocking Framework (Google Mock)

   This Oracle Product includes or references Gmock (including gtest),
   which is licensed to Oracle under the following terms:
Copyright 2008, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of Google Inc. nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

Google Protocol Buffers

   The following software may be included in this product:
Copyright 2014, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the
following conditions are met:


    * Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

    * Neither the name of Google Inc. nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Code generated by the Protocol Buffer compiler is owned by the owner  of the
input file used when generating it.  This code is not standalone and requires
a support library to be linked with it.  This support library is itself
covered by the above license.

OpenSSL License

   You are receiving a copy of OpenSSL as part of this product in object
   code form. The terms of the Oracle license do NOT apply to OpenSSL.
   OpenSSL is licensed under a double license, of the OpenSSL License and
   the original SSLeay license, separate from the Oracle product. If you
   do not wish to install this library, you may remove it, but the Oracle
   program might not operate properly or at all without it.
  LICENSE ISSUES
  ==============

  The OpenSSL toolkit stays under a double license, i.e. both the conditions of
  the OpenSSL License and the original SSLeay license apply to the toolkit.
  See below for the actual license texts. Actually both licenses are BSD-style
  Open Source licenses. In case of any license issues related to OpenSSL
  please contact openssl-core@openssl.org.

  OpenSSL License
  ---------------

/* ====================================================================

 * Copyright (c) 1998-2017 The OpenSSL Project.  All rights reserved.
 *

 * Redistribution and use in source and binary forms, with or without

 * modification, are permitted provided that the following conditions

 * are met:
 *

 * 1. Redistributions of source code must retain the above copyright

 *    notice, this list of conditions and the following disclaimer.
 *

 * 2. Redistributions in binary form must reproduce the above copyright

 *    notice, this list of conditions and the following disclaimer in

 *    the documentation and/or other materials provided with the

 *    distribution.
 *

 * 3. All advertising materials mentioning features or use of this

 *    software must display the following acknowledgment:

 *    "This product includes software developed by the OpenSSL Project

 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 *

 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to

 *    endorse or promote products derived from this software without

 *    prior written permission. For written permission, please contact

 *    openssl-core@openssl.org.
 *

 * 5. Products derived from this software may not be called "OpenSSL"

 *    nor may "OpenSSL" appear in their names without prior written

 *    permission of the OpenSSL Project.
 *

 * 6. Redistributions of any form whatsoever must retain the following

 *    acknowledgment:

 *    "This product includes software developed by the OpenSSL Project

 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 *

 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY

 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR

 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT

 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)

 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,

 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED

 * OF THE POSSIBILITY OF SUCH DAMAGE.

 * ====================================================================
 *

 * This product includes cryptographic software written by Eric Young

 * (eay@cryptsoft.com).  This product includes software written by Tim

 * Hudson (tjh@cryptsoft.com).
 *
 */

 Original SSLeay License
 -----------------------

/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)

 * All rights reserved.
 *

 * This package is an SSL implementation written

 * by Eric Young (eay@cryptsoft.com).

 * The implementation was written so as to conform with Netscapes SSL.
 *

 * This library is free for commercial and non-commercial use as long as

 * the following conditions are aheared to.  The following conditions

 * apply to all code found in this distribution, be it the RC4, RSA,

 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation

 * included with this distribution is covered by the same copyright terms

 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 *

 * Copyright remains Eric Young's, and as such any Copyright notices in

 * the code are not to be removed.

 * If this package is used in a product, Eric Young should be given attribution

 * as the author of the parts of the library used.

 * This can be in the form of a textual message at program startup or

 * in documentation (online or textual) provided with the package.
 *

 * Redistribution and use in source and binary forms, with or without

 * modification, are permitted provided that the following conditions

 * are met:

 * 1. Redistributions of source code must retain the copyright

 *    notice, this list of conditions and the following disclaimer.

 * 2. Redistributions in binary form must reproduce the above copyright

 *    notice, this list of conditions and the following disclaimer in the

 *    documentation and/or other materials provided with the distribution.

 * 3. All advertising materials mentioning features or use of this software

 *    must display the following acknowledgement:

 *    "This product includes cryptographic software written by

 *     Eric Young (eay@cryptsoft.com)"

 *    The word 'cryptographic' can be left out if the rouines from the library

 *    being used are not cryptographic related :-).

 * 4. If you include any Windows specific code (or a derivative thereof) from

 *    the apps directory (application code) you must include an acknowledgement:

 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 *

 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND

 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE

 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS

 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)

 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT

 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY

 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF

 * SUCH DAMAGE.
 *

 * The licence and distribution terms for any publically available version or

 * derivative of this code cannot be changed.  i.e. this code cannot simply be

 * copied and put under another distribution licence

 * [including the GNU Public Licence.]
 */

RapidJSON v1.1.0

   The following software may be included in this product:
Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.  All
rights reserved.

If you have downloaded a copy of the RapidJSON binary from Tencent, please
note that the RapidJSON binary is licensed under the MIT License.
If you have downloaded a copy of the RapidJSON source code from Tencent,
please note that RapidJSON source code is licensed under the MIT License,
except for the third-party components listed below which are subject to
different license terms.  Your integration of RapidJSON into your own
projects may require compliance with the MIT License, as well as the other
licenses applicable to the third-party components included within RapidJSON.
To avoid the problematic JSON license in your own projects, it's sufficient
to exclude the bin/jsonchecker/ directory, as it's the only code under the
JSON license.
A copy of the MIT License is included in this file.

Other dependencies and licenses:

Open Source Software Licensed Under the BSD License:
--------------------------------------------------------------------

The msinttypes r29
Copyright (c) 2006-2013 Alexander Chemeris
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of  copyright holder nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Open Source Software Licensed Under the JSON License:
--------------------------------------------------------------------

json.org
Copyright (c) 2002 JSON.org
All Rights Reserved.

JSON_checker
Copyright (c) 2002 JSON.org
All Rights Reserved.


Terms of the JSON License:
---------------------------------------------------

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 shall be used for Good, not Evil.

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.


Terms of the MIT License:
--------------------------------------------------------------------

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.

Written Offer for Source Code

   For any software that you receive from Oracle in binary form which is
   licensed under an open source license that gives you the right to
   receive the source code for that binary, you can obtain a copy of the
   applicable source code by visiting
   http://www.oracle.com/goto/opensourcecode. If the source code for the
   binary was not provided to you with the binary, you can also receive a
   copy of the source code on physical media by submitting a written
   request to the address listed below or by sending an email to Oracle
   using the following link:
   http://www.oracle.com/goto/opensourcecode/request.
  Oracle America, Inc.
  Attn: Senior Vice President
  Development and Engineering Legal
  500 Oracle Parkway, 10th Floor
  Redwood Shores, CA 94065

   Your request should include:

     * The name of the binary for which you are requesting the source code

     * The name and version number of the Oracle product containing the
       binary

     * The date you received the Oracle product

     * Your name

     * Your company name (if applicable)

     * Your return mailing address and email, and

     * A telephone number in the event we need to reach you.

   We may charge you a fee to cover the cost of physical media and
   processing.

   Your request must be sent
    a. within three (3) years of the date you received the Oracle product
       that included the binary that is the subject of your request, or
    b. in the case of code licensed under the GPL v3 for as long as Oracle
       offers spare parts or customer support for that product model.


================================================
FILE: README.txt
================================================
This repository is frozen
=========================

Newer versions of MySQL Router 8.0 can be found in the MySQL Server repository:

* https://github.com/mysql/mysql-server/tree/8.0/router




MySQL Router 8.0
================

This is a release of MySQL Router.

For the avoidance of doubt, this particular copy of the software
is released under the version 2 of the GNU General Public License.
MySQL Router is brought to you by Oracle.

Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.

Documentation
-------------

For further information about MySQL or additional documentation, see:

* http://www.mysql.com
* http://dev.mysql.com/doc/mysql-router/en/

You can browse the MySQL Router Reference Manual online or download it
in any of several formats at the URL given earlier in this file.
Source distributions include a local copy of the manual in the
Docs directory.

Developer documentation can be build when Doxygen 1.8.9 or greater
has been installed:

    shell> cd build
    shell> cmake ..
    shell> make doc

You can then open the folder `doc/html/index.html` in your browser.


Coverage information
--------------------

To build so that coverage information is generated:

    cmake <path-to-source> -DENABLE_COVERAGE=1

To get coverage information, just run the program or the unit tests
(do not forget to enable the unit tests if you want to run them). Once
you have collected coverage information, you can generate an HTML
report in `<build-dir>/coverage/html` using:

    make coverage-html

There are three variables to control where the information is
collected and where the reports are written:

- `GCOV_BASE_DIR` is a cache variable with the full path to a base
  directory for the coverage information.

  It defaults to `${CMAKE_BUILD_DIR}/coverage`.

- `GCOV_INFO_FILE` is a cache varible with the full path to the info
  file for the collected coverage information.

  It defaults to `${GCOV_BASE_DIR}/coverage.info`.

- `GCOV_XML_FILE` is a cache varible with the full path to the XML
  file for the collected coverage information.

  It defaults to `${GCOV_BASE_DIR}/coverage.xml`.

- `GCOV_HTML_DIR` is a cache variable with the full path to the
  directory where the HTML coverage report will be generated.

  It defaults to `${GCOV_BASE_DIR}/html`.


License
-------

License information can be found in the License.txt file.

This distribution may include materials developed by third
parties. For license and attribution notices for these
materials, please refer to the documentation that accompanies
this distribution (see the "Licenses for Third-Party Components"
appendix) or view the online documentation at
<http://dev.mysql.com/doc/>.

GPLv2 Disclaimer
For the avoidance of doubt, except that if any license choice
other than GPL or LGPL is available it will apply instead,
Oracle elects to use only the General Public License version 2
(GPLv2) at this time for any software where a choice of GPL
license versions is made available with the language indicating
that GPLv2 or any later version may be used, or where a choice
of which version of the GPL is applied is otherwise unspecified.

Licenses for Third-Party Components
-----------------------------------

### GMock and GTest

Copyright 2008, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

### Protobuf

This license applies to all parts of Protocol Buffers except the following:

  - Atomicops support for generic gcc, located in
    src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.
    This file is copyrighted by Red Hat Inc.

  - Atomicops support for AIX/POWER, located in
    src/google/protobuf/stubs/atomicops_internals_power.h.
    This file is copyrighted by Bloomberg Finance LP.

Copyright 2014, Google Inc.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Code generated by the Protocol Buffer compiler is owned by the owner
of the input file used when generating it.  This code is not
standalone and requires a support library to be linked with it.  This
support library is itself covered by the above license.

### RapidJSON

Copyright (C) 2011 Milo Yip

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.


================================================
FILE: cmake/Coverage.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

option(ENABLE_COVERAGE "Enable code coverage support")

set(GCOV_BASE_DIR ${PROJECT_BINARY_DIR}/coverage CACHE PATH
  "GCov coverage base directory")
set(GCOV_HTML_DIR ${GCOV_BASE_DIR}/html CACHE PATH
  "GCov HTML report output directory")
set(GCOV_INFO_FILE ${GCOV_BASE_DIR}/coverage.info CACHE FILEPATH
  "GCov information file name")
set(GCOV_XML_FILE ${GCOV_BASE_DIR}/coverage.xml CACHE FILEPATH
  "GCov XML report file name")

set(LCOV_FLAGS -b ${PROJECT_BINARY_DIR} -d ${PROJECT_SOURCE_DIR} -q)
set(GCOVR_FLAGS -r ${PROJECT_SOURCE_DIR})

include(TextUtils)

if(ENABLE_COVERAGE)
  if(CMAKE_COMPILER_IS_GNUCXX)
    find_program(GCOV gcov)
    find_program(LCOV lcov)
    find_program(GENHTML genhtml)
    if(NOT (LCOV AND GCOV AND GENHTML))
      set(_programs)
      if(NOT LCOV)
        list(APPEND _programs "'lcov'")
      endif()
      if(NOT GCOV)
        list(APPEND _programs "'gcov'")
      endif()
      if(NOT GENHTML)
        list(APPEND _programs "'genhtml'")
      endif()
      oxford_comma(_text ${_programs})
      message(FATAL_ERROR "Could not find ${_text}, please install.")
    endif()
    add_definitions(-fprofile-arcs -ftest-coverage)
    link_libraries(gcov)

    message(STATUS "Building with coverage information")
    message(STATUS "Target coverage-clear added to clear coverage information")
    message(STATUS "Target coverage-html added to generate HTML report")
    add_custom_target(coverage-clear
      COMMAND ${LCOV} ${LCOV_FLAGS} -z
      COMMENT "Clearing coverage information")
    add_custom_target(coverage-info
      COMMAND ${CMAKE_COMMAND} -E make_directory ${GCOV_BASE_DIR}
      COMMAND ${LCOV} ${LCOV_FLAGS} -o ${GCOV_INFO_FILE} -c
      COMMAND ${LCOV} ${LCOV_FLAGS} -o ${GCOV_INFO_FILE} -r ${GCOV_INFO_FILE}
          '/usr/include/*' 'ext/*' '*/tests/*' '*/generated/*'
      COMMENT "Generating coverage info file ${GCOV_INFO_FILE}")
    add_custom_target(coverage-html
      DEPENDS coverage-info
      COMMAND ${CMAKE_COMMAND} -E make_directory ${GCOV_HTML_DIR}
      COMMAND ${GENHTML} -o ${GCOV_HTML_DIR} ${GCOV_INFO_FILE}
      COMMENT "Generating HTML report on coverage in ${GCOV_HTML_DIR}")

    find_program(GCOVR gcovr)
    if(GCOVR)
      add_custom_target(coverage-xml
        COMMAND ${CMAKE_COMMAND} -E make_directory ${GCOV_BASE_DIR}
        COMMAND ${GCOVR} ${GCOVR_FLAGS} -o ${GCOV_XML_FILE} --xml
            -e '/usr/include/.*' -e '.*/tests/.*' -e 'ext/.*' -e '.*/generated/.*'
            ${PROJECT_BINARY_DIR})
       message(STATUS "Target coverage-xml added to generate XML report")
    else()
      message(STATUS "Target coverage-xml not built - gcovr not found")
    endif()
  else()
    message(FATAL_ERROR "Coverage not supported for ${CMAKE_CXX_COMPILER}")
  endif()
endif()


================================================
FILE: cmake/FindGMock.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# Find the MySQL Client Libraries and related development files
#
#   GMOCK_FOUND           - TRUE if GMock was found
#   GMOCK_INCLUDE_DIRS    - path which contains gmock.h
#   GMOCK_LIBRARIES       - libgmock
#   GMOCK_BOTH_LIBRARIES  - both libgmock and libgmock-main
#   GMOCK_MAIN_LIBRARIES  - libgmock-main

set(GMOCK_FOUND FALSE)

# Can not use IS_ABSOLUTE as paths with ~ (home directory) are not starting with
get_filename_component(GMOCK_ROOT ${GMOCK_ROOT} ABSOLUTE)

find_library(gmock_lib NAMES gmock PATHS ${GMOCK_ROOT})
find_path(gmock_inc_dir NAMES gmock/gmock.h PATHS ${GMOCK_ROOT}/include)
# File containing version
find_path(gmock_configure NAMES configure PATHS ${GMOCK_ROOT})

if(gmock_lib AND gmock_inc_dir AND gmock_configure)

  # Not the greatest place for getting the version, but best we got
  file(STRINGS "${gmock_configure}/configure"
    version_line
    REGEX "^PACKAGE_VERSION='.*'"
  )
  string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" version_str ${version_line})
  string(REPLACE "." ";" version_list ${version_str})
  list(GET version_list 0 GMOCK_VERSION_MAJOR)
  list(GET version_list 1 GMOCK_VERSION_MINOR)
  list(GET version_list 2 GMOCK_VERSION_PATCH)
  set(GMOCK_VERSION "${GMOCK_VERSION_MAJOR}.${GMOCK_VERSION_MINOR}.${GMOCK_VERSION_PATCH}")

  if(GMock_FIND_VERSION)
    if(GMock_FIND_VERSION_EXACT AND (NOT GMOCK_VERSION VERSION_EQUAL GMock_FIND_VERSION))
        message(FATAL_ERROR "Exact GMock v${GMock_FIND_VERSION} is required; found v${GMOCK_VERSION}")
    elseif(GMOCK_VERSION VERSION_LESS GMock_FIND_VERSION)
      message(FATAL_ERROR "GMock v${GMock_FIND_VERSION} or later is required; found v${GMOCK_VERSION}")
    endif()
  endif()

  set(GMOCK_FOUND TRUE)
  set(GMOCK_INCLUDE_DIRS ${gmock_inc_dir})
  set(GMOCK_LIBRARIES ${gmock_lib})
  find_library(GMOCK_MAIN_LIBRARIES NAMES gmock_main HINTS ${ENV_GMOCK_ROOT} ${GMOCK_ROOT})
  set(GMOCK_BOTH_LIBRARIES ${GMOCK_MAIN_LIBRARIES} ${GMOCK_LIBRARIES})
  message(STATUS "Found GMock: ${gmock_lib}")
endif()

if(GMock_FIND_REQUIRED AND NOT GMOCK_FOUND)
  message(FATAL_ERROR "Google C++ Mocking Framework not found under '${GMOCK_ROOT}'")
endif()


================================================
FILE: cmake/FindLibEvent2.cmake
================================================
# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

IF(NOT WITH_LIBEVENT)
  SET(WITH_LIBEVENT system)
ENDIF()

IF(WITH_LIBEVENT STREQUAL "system" OR WITH_LIBEVENT STREQUAL "yes")
  IF(NOT WIN32)
    SET(LIBEVENT2_INCLUDE_PATH /usr/local/include /opt/local/include)
    SET(LIBEVENT2_LIB_PATHS /usr/local/lib /opt/local/lib)
  ENDIF()

  # use default paths
  SET(HOW_TO_FIND)
ELSEIF(WITH_LIBEVENT STREQUAL "bundled")
  MESSAGE(FATAL_ERROR "bundled libevent isn't support")
ELSE()
  # make the users path for libevent absolute
  GET_FILENAME_COMPONENT(LIBEVENT_ABS_DIR "${WITH_LIBEVENT}" ABSOLUTE)
  SET(LIBEVENT2_INCLUDE_PATH ${LIBEVENT_ABS_DIR}/include)
  SET(LIBEVENT2_LIB_PATHS ${LIBEVENT_ABS_DIR}/lib)

  # if path specified, use that path only
  SET(HOW_TO_FIND NO_DEFAULT_PATH)
ENDIF()

FIND_PATH(LIBEVENT2_INCLUDE_DIR event2/event.h PATHS ${LIBEVENT2_INCLUDE_PATH} ${HOW_TO_FIND})
IF(WIN32)
  ## libevent-2.0.22 on windows is only 'event.lib' and 'event.dll'
  FIND_LIBRARY(LIBEVENT2_CORE NAMES event PATHS ${LIBEVENT2_LIB_PATHS} ${HOW_TO_FIND})
  SET(LIBEVENT2_EXTRA)
ELSE()
  FIND_LIBRARY(LIBEVENT2_CORE NAMES event_core PATHS ${LIBEVENT2_LIB_PATHS} ${HOW_TO_FIND})
  FIND_LIBRARY(LIBEVENT2_EXTRA NAMES event_extra PATHS ${LIBEVENT2_LIB_PATHS} ${HOW_TO_FIND})
ENDIF()

IF (LIBEVENT2_INCLUDE_DIR AND LIBEVENT2_CORE)
  SET(LibEvent2_FOUND TRUE)
ELSE()
  SET(LibEvent2_FOUND FALSE)
ENDIF()

IF(LibEvent2_FIND_VERSION)
  IF(LibEvent2_FIND_VERSION_EXACT)
    SET(LIBEVENT2_VERSION_REQUEST_STR "requested == ${LibEvent2_FIND_VERSION}")
  ELSE()
    SET(LIBEVENT2_VERSION_REQUEST_STR "requested >= ${LibEvent2_FIND_VERSION}")
  ENDIF()
ELSE()
  SET(LIBEVENT2_VERSION_REQUEST_STR "requested any")
ENDIF()

IF (LibEvent2_FOUND)
  # extract version number from event-config.h
  #
  # libevent-2.0 has _EVENT_VERSION
  # libevent-2.1 has EVENT__VERSION
  FILE(WRITE ${PROJECT_BINARY_DIR}/check-libevent-header-version.c
    "#include <event2/event.h>
    #include <stdio.h>
    int main() {
    puts(LIBEVENT_VERSION);
    return 0;
    };
    ")
  TRY_RUN(LIBEVENT_VERSION_RUN_RES LIBEVENT_VERSION_COMPILE_RES
    ${PROJECT_BINARY_DIR}
    ${PROJECT_BINARY_DIR}/check-libevent-header-version.c
    CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${LIBEVENT2_INCLUDE_DIR}"
    COMPILE_OUTPUT_VARIABLE compile_output
    RUN_OUTPUT_VARIABLE version_line
    )

  IF(NOT version_line)
    ## debug output in case of compile/run failures
    MESSAGE(STATUS "compile-result: ${LIBEVENT_VERSION_COMPILE_RES}")
    MESSAGE(STATUS "compile-output: ${compile_output}")
    MESSAGE(STATUS "run-result: ${LIBEVENT_VERSION_RUN_RES}")
    MESSAGE(STATUS "run-output: ${version_line}")
    MESSAGE(FATAL_ERROR "Could NOT find version-line in ${LIBEVENT2_INCLUDE_DIR}/event2/event-config.h")
  ENDIF()

  STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" version_str ${version_line})
  STRING(REPLACE "." ";" version_list ${version_str})
  LIST(GET version_list 0 LIBEVENT2_VERSION_MAJOR)
  LIST(GET version_list 1 LIBEVENT2_VERSION_MINOR)
  LIST(GET version_list 2 LIBEVENT2_VERSION_PATCH)
  SET(LIBEVENT2_VERSION "${LIBEVENT2_VERSION_MAJOR}.${LIBEVENT2_VERSION_MINOR}.${LIBEVENT2_VERSION_PATCH}")

  IF(LibEvent2_FIND_VERSION)
    IF(LibEvent2_FIND_VERSION_EXACT)
      IF(NOT LIBEVENT2_VERSION VERSION_EQUAL "${LibEvent2_FIND_VERSION}")
        MESSAGE(FATAL_ERROR "Found libevent 2.x: ${LIBEVENT2_CORE}, version=${LIBEVENT2_VERSION}, but ${LIBEVENT2_VERSION_REQUEST_STR}")
      ENDIF()
    ELSE()
      IF(LIBEVENT2_VERSION VERSION_LESS "${LibEvent2_FIND_VERSION}")
        MESSAGE(FATAL_ERROR "Found libevent 2.x: ${LIBEVENT2_CORE}, version=${LIBEVENT2_VERSION}, but ${LIBEVENT2_VERSION_REQUEST_STR}")
      ENDIF()
    ENDIF()
  ENDIF()

  # we want 2.x and higher

  IF(NOT LibEvent2_FIND_QUIETLY)
    MESSAGE(STATUS "Found libevent 2.x: ${LIBEVENT2_CORE}, version=${LIBEVENT2_VERSION} (${LIBEVENT2_VERSION_REQUEST_STR})")
  ENDIF()
ELSE()
  IF(LibEvent2_FIND_REQUIRED)
    MESSAGE(FATAL_ERROR "Could NOT find libevent 2.x libs in ${LIBEVENT2_LIB_PATHS}, headers in ${LIBEVENT2_INCLUDE_PATH}. (${LIBEVENT2_VERSION_REQUEST_STR})")
  ENDIF()
ENDIF()

# don't expose them in the cmake UI
MARK_AS_ADVANCED(
  LIBEVENT2_INCLUDE_DIR
  LIBEVENT2_CORE
  LIBEVENT2_EXTRA
  LIBEVENT2_VERSION
)


================================================
FILE: cmake/FindMySQL.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# Find the MySQL Client Libraries and related development files
#
#   MySQL_FOUND           - TRUE if MySQL was found
#   MySQL_INCLUDE_DIRS    - path which contains mysql.h
#   MySQL_LIBRARIES       - libraries provided by the MySQL installation
#   MySQL_VERSION         - version of the MySQL Client Libraries

# In Windows we are linking against the .dll
if(WIN32)
  set(MySQL_CLIENT_LIBRARY libmysql)
else()
  set(MySQL_CLIENT_LIBRARY mysqlclient)
endif()

if(WIN32)
  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(PROGRAMFILES_VAR "PROGRAMW6432")
  else()
    set(PROGRAMFILES_VAR "PROGRAMFILES")
  endif()
  set(WITH_MYSQL "$ENV{${PROGRAMFILES_VAR}}/MySQL/MySQL Server*/" CACHE PATH "Installation path of MySQL Client Libraries")
  if(MYSQL_BUILD)
    STRING(TOLOWER ${MYSQL_BUILD} MYSQL_BUILD)
    set(MySQL_LIBRARY_PATHS
      ${WITH_MYSQL}/lib
      "$ENV{${PROGRAMFILES_VAR}}/MySQL/MySQL Server*/lib"
    )
  else()
    set(MySQL_LIBRARY_PATHS
      ${WITH_MYSQL}/lib
      ${WITH_MYSQL}/lib/debug
      "$ENV{${PROGRAMFILES_VAR}}/MySQL/MySQL Server*/lib"
    )
  endif()

  set(MySQL_INCLUDE_PATHS
    ${WITH_MYSQL}/include
    "$ENV{${PROGRAMFILES_VAR}}/MySQL/MySQL Server*/include"
  )
else()
  set(WITH_MYSQL "/usr/local/mysql" CACHE PATH "Installation path of MySQL Client Libraries")
  set(MySQL_LIBRARY_PATHS
    ${CMAKE_BINARY_DIR}/../mysql-server/lib
    ${WITH_MYSQL}/lib
    /usr/local/mysql/lib
    /usr/local/lib
    /usr/lib/x86_64-linux-gnu
    /usr/lib/i386-linux-gnu
    /usr/lib64
    /usr/lib
  )
  set(MySQL_INCLUDE_PATHS
    ${CMAKE_BINARY_DIR}/../mysql-server/include
    ${WITH_MYSQL}/include
    /usr/local/mysql/include
    /usr/local/include
    /usr/include
  )
endif()

# test if we are located in the mysql-server-tree

IF(EXISTS "${CMAKE_SOURCE_DIR}/include/mysql.h")
  # bundled build
  SET(MySQL_CLIENT_LIB libmysql)
  SET(MySQL_VERSION_HEADER ${CMAKE_BINARY_DIR}/include/mysql_version.h)
  SET(MySQL_INCLUDES ${CMAKE_SOURCE_DIR}/include)
  LIST(APPEND MySQL_INCLUDES ${CMAKE_SOURCE_DIR}/libbinlogevents/export)
  LIST(APPEND MySQL_INCLUDES ${CMAKE_BINARY_DIR}/include)
ELSE()
  # external mysql-server install
  find_path(MySQL_INCLUDES mysql.h PATHS ${MySQL_INCLUDE_PATHS}
            PATH_SUFFIXES mysql NO_DEFAULT_PATH)
  if(WITH_STATIC AND NOT WIN32)
    find_library(MySQL_CLIENT_LIB NAMES lib${MySQL_CLIENT_LIBRARY}.a
                 PATHS ${MySQL_LIBRARY_PATHS} PATH_SUFFIXES mysql
                 NO_DEFAULT_PATH)
  else()
    find_library(MySQL_CLIENT_LIB NAMES ${MySQL_CLIENT_LIBRARY}
                 PATHS ${MySQL_LIBRARY_PATHS} PATH_SUFFIXES mysql
                 NO_DEFAULT_PATH)
    if(NOT WIN32)
      find_library(LIBDL NAMES dl)
    endif()
  endif()
  SET(MySQL_VERSION_HEADER ${MySQL_INCLUDES}/mysql_version.h)
endif()

if(MySQL_INCLUDES AND MySQL_CLIENT_LIB)
  set(MySQL_FOUND TRUE)
  set(MySQL_INCLUDE_DIRS ${MySQL_INCLUDES})
  if(LIBDL)
    set(MySQL_LIBRARIES ${MySQL_CLIENT_LIB} ${LIBDL})
  else()
    set(MySQL_LIBRARIES ${MySQL_CLIENT_LIB})
  endif()
  file(STRINGS "${MySQL_VERSION_HEADER}"
    version_line
    REGEX "^#define[\t ]+MYSQL_SERVER_VERSION.*"
  )
  string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" version_str ${version_line})
  string(REPLACE "." ";" version_list ${version_str})
  list(GET version_list 0 MySQL_VERSION_MAJOR)
  list(GET version_list 1 MySQL_VERSION_MINOR)
  list(GET version_list 2 MySQL_VERSION_PATCH)
  set(MySQL_VERSION "${MySQL_VERSION_MAJOR}.${MySQL_VERSION_MINOR}.${MySQL_VERSION_PATCH}")

  if(MySQL_FIND_VERSION)
    if(MySQL_FIND_VERSION_EXACT AND (NOT MySQL_VERSION VERSION_EQUAL MySQL_FIND_VERSION))
      message(FATAL_ERROR "Exact MySQL v${MySQL_FIND_VERSION} is required; found v${MySQL_VERSION}")
    elseif(MySQL_VERSION VERSION_LESS MySQL_FIND_VERSION)
      message(FATAL_ERROR "MySQL v${MySQL_FIND_VERSION} or later is required; found v${MySQL_VERSION}")
    endif()
  endif()

else()
  set(MySQL_FOUND FALSE)
endif()

if(MySQL_FOUND)
  message(STATUS "Found MySQL Libraries ${MySQL_VERSION}; using ${MySQL_LIBRARIES}")
else()
  if(MySQL_FIND_REQUIRED)
    message(FATAL_ERROR "Could not find MySQL libraries; used ${MySQL_LIBRARY_PATHS}")
  endif()
endif()

mark_as_advanced(MySQL_LIBRARY MySQL_INCLUDE_DIRS)


================================================
FILE: cmake/HarnessTesting.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

if(NOT CMAKE_CFG_INTDIR STREQUAL ".")
  function(CONFIGURE_HARNESS_TEST_FILE SOURCE DESTINATION)
    set(HARNESS_PLUGIN_OUTPUT_DIRECTORY_orig ${HARNESS_PLUGIN_OUTPUT_DIRECTORY})
    set(OUT_DIR ${PROJECT_BINARY_DIR}/tests/harness/${config_})
    foreach(config_ ${CMAKE_CONFIGURATION_TYPES})
      string(TOUPPER ${config_} config__)
      set(HARNESS_PLUGIN_OUTPUT_DIRECTORY ${HARNESS_PLUGIN_OUTPUT_DIRECTORY_${config__}})
      configure_file(${SOURCE} ${OUT_DIR}/${config_}/${DESTINATION})
    endforeach()
    set(HARNESS_PLUGIN_OUTPUT_DIRECTORY ${HARNESS_PLUGIN_OUTPUT_DIRECTORY_orig})
  endfunction()

  function(CREATE_HARNESS_TEST_DIRECTORY_POST_BUILD TARGET DIRECTORY_NAME)
    set(OUT_DIR ${PROJECT_BINARY_DIR}/tests/harness/)
    foreach(config_ ${CMAKE_CONFIGURATION_TYPES})
      add_custom_command(TARGET ${TARGET} POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E make_directory ${OUT_DIR}/${config_}/var/log/${DIRECTORY_NAME})
    endforeach()
  endfunction()
else()
  function(CONFIGURE_HARNESS_TEST_FILE SOURCE DESTINATION)
    set(OUT_DIR "${PROJECT_BINARY_DIR}/tests/harness")
    configure_file(${SOURCE} "${OUT_DIR}/${DESTINATION}")
  endfunction()

  function(CREATE_HARNESS_TEST_DIRECTORY_POST_BUILD TARGET DIRECTORY_NAME)
    set(OUT_DIR "${PROJECT_BINARY_DIR}/tests/harness")
    add_custom_command(TARGET ${TARGET} POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E make_directory "${OUT_DIR}/var/log/${DIRECTORY_NAME}")
  endfunction()
endif()


================================================
FILE: cmake/Plugin.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# add_harness_plugin - Add a new plugin target and set install
#                      location
#
# add_harness_plugin(name [NO_INSTALL]
#                    LOG_DOMAIN domain
#                    SOURCES file1 ...
#                    INTERFACE directory
#                    DESTINATION_SUFFIX string
#                    REQUIRES plugin ...)
#
# The add_harness_plugin command will set up a new plugin target and
# also set the install location of the target correctly.
#
# Plugins that are normally put under the "lib" directory of the build
# root, but see the caveat in the next paragraph.
#
# If NO_INSTALL is provided, it will not be installed, which is useful
# if the plugin is only for testing purposes. These plugins are also
# left in their default location and not moved to the "lib"
# directory. If you want to move the plugin to some specific
# directory, you have to set the target property
# LIBRARY_OUTPUT_DIRECTORY yourself.
#
# If LOG_DOMAIN is given, it will be used as the log domain for the
# plugin. If no LOG_DOMAIN is given, the log domain will be the name
# of the plugin.
#
# If DESTINATION_SUFFIX is provided, it will be appended to the
# destination for install commands. DESTINATION_SUFFIX is optional and
# default to ${HARNESS_NAME}.
#
# Files provided after the SOURCES keyword are the sources to build
# the plugin from, while the files in the directory after INTERFACE
# will be installed alongside the header files for the harness.
#
# For plugins, it is necessary to set the RPATH so that the plugin can
# find other plugins when being loaded. This, unfortunately, means
# that the plugin path need to be set at compile time and cannot be
# changed after that.

function(add_harness_plugin NAME)
  set(_options NO_INSTALL)
  set(_single_value LOG_DOMAIN INTERFACE DESTINATION_SUFFIX OUTPUT_NAME)
  set(_multi_value SOURCES REQUIRES)
  cmake_parse_arguments(_option
    "${_options}" "${_single_value}" "${_multi_value}" ${ARGN})

  if(_option_UNPARSED_ARGUMENTS)
    message(AUTHOR_WARNING
      "Unrecognized arguments: ${_option_UNPARSED_ARGUMENTS}")
  endif()

  # Set default values
  if(NOT _option_DESTINATION_SUFFIX)
    set(_option_DESTINATION_SUFFIX ${HARNESS_NAME})
  endif()

  # Set the log domain to the name of the plugin unless an explicit
  # log domain was given.
  if(NOT _option_LOG_DOMAIN)
    set(_option_LOG_DOMAIN "\"${NAME}\"")
  endif()

  # Add the library and ensure that the name is good for the plugin
  # system (no "lib" before). We are using SHARED libraries since we
  # intend to link against it, which is something that MODULE does not
  # allow. On OSX, this means that the suffix for the library becomes
  # .dylib, which we do not want, so we reset it here.
  add_library(${NAME} SHARED ${_option_SOURCES})
  if(_option_OUTPUT_NAME)
    set_target_properties(${NAME}
      PROPERTIES OUTPUT_NAME ${_option_OUTPUT_NAME})
  endif()
  target_compile_definitions(${NAME} PRIVATE
    MYSQL_ROUTER_LOG_DOMAIN=${_option_LOG_DOMAIN})
  if(NOT WIN32)
    set_target_properties(${NAME} PROPERTIES
      PREFIX ""
      SUFFIX ".so")
  endif()

  # Declare the interface directory for this plugin, if present. It
  # will be used both when compiling the plugin as well as as for any
  # dependent targets.
  if(_option_INTERFACE)
    target_include_directories(${NAME}
      PUBLIC ${_option_INTERFACE})
    execute_process(
      COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/${_option_INTERFACE} ${MySQLRouter_BINARY_DIR}/${INSTALL_INCLUDE_DIR})
  endif()

  # Add a dependencies on interfaces for other plugins this plugin
  # requires.
  target_link_libraries(${NAME}
    PUBLIC harness-library
    ${_option_REQUIRES})
  # Need to be able to link plugins with each other
  if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
    set_target_properties(${NAME} PROPERTIES
        LINK_FLAGS "-undefined dynamic_lookup")
  endif()

  # set library output (and runtime) directories
  if(NOT CMAKE_CFG_INTDIR STREQUAL ".")
    foreach(config ${CMAKE_CONFIGURATION_TYPES})
      string(TOUPPER ${config} config)
      set_target_properties(${NAME} PROPERTIES
        # [SEARCH TAGS] RUNTIME_OUTPUT_DIRECTORY, LIBRARY_OUTPUT_DIRECTORY
        RUNTIME_OUTPUT_DIRECTORY_${config} ${HARNESS_PLUGIN_OUTPUT_DIRECTORY_${config}}
        LIBRARY_OUTPUT_DIRECTORY_${config} ${HARNESS_PLUGIN_OUTPUT_DIRECTORY_${config}})
    endforeach()
  else()
    set_target_properties(${NAME} PROPERTIES
      LIBRARY_OUTPUT_DIRECTORY ${HARNESS_PLUGIN_OUTPUT_DIRECTORY}
      RUNTIME_OUTPUT_DIRECTORY ${HARNESS_PLUGIN_OUTPUT_DIRECTORY}
      )
  endif()

  # Add install rules to install the interface header files and the
  # plugin correctly.
  if(NOT _option_NO_INSTALL AND HARNESS_INSTALL_PLUGINS)
    if(WIN32)
      install(TARGETS ${NAME}
        RUNTIME DESTINATION ${HARNESS_INSTALL_LIBRARY_DIR})
      install(FILES $<TARGET_PDB_FILE:${NAME}>
            DESTINATION ${HARNESS_INSTALL_LIBRARY_DIR})
    else()
      install(TARGETS ${NAME}
        LIBRARY DESTINATION ${HARNESS_INSTALL_LIBRARY_DIR}/${_option_DESTINATION_SUFFIX})
    endif()
    if(_option_INTERFACE)
      file(GLOB interface_files ${_option_INTERFACE}/*.h)
      install(FILES ${interface_files}
        DESTINATION ${HARNESS_INSTALL_INCLUDE_PREFIX}/${_option_DESTINATION_SUFFIX})
    endif()
  endif()
endfunction(add_harness_plugin)


================================================
FILE: cmake/TextUtils.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

function(oxford_comma _var)
  if(ARGC EQUAL 2)
    set(${_var} "${ARGV1}" PARENT_SCOPE)
  elseif(ARGC EQUAL 3)
    set(${_var} "${ARGV1} and ${ARGV2}" PARENT_SCOPE)
  else()
    set(_count 3)
    set(_glue)
    set(_result)
    foreach(_arg ${ARGN})
      set(_result "${_result}${_glue}${_arg}")
      if(_count LESS ARGC)
        set(_glue ", ")
      else()
        set(_glue ", and ")
      endif()
      math(EXPR _count "${_count}+1")
    endforeach()
    set(${_var} "${_result}" PARENT_SCOPE)
  endif()
endfunction()


================================================
FILE: cmake/cmake_parse_arguments.cmake
================================================

# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
# 
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# Handy macro to parse macro arguments
MACRO(MYSQL_PARSE_ARGUMENTS prefix arg_names option_names)
  SET(DEFAULT_ARGS)
  FOREACH(arg_name ${arg_names})    
    SET(${prefix}_${arg_name})
  ENDFOREACH(arg_name)
  FOREACH(option ${option_names})
    SET(${prefix}_${option} FALSE)
  ENDFOREACH(option)

  SET(current_arg_name DEFAULT_ARGS)
  SET(current_arg_list)
  FOREACH(arg ${ARGN})    
    SET(larg_names ${arg_names})    
    LIST(FIND larg_names "${arg}" is_arg_name)
    IF (is_arg_name GREATER -1)
      SET(${prefix}_${current_arg_name} ${current_arg_list})
      SET(current_arg_name ${arg})
      SET(current_arg_list)
    ELSE (is_arg_name GREATER -1)
      SET(loption_names ${option_names})    
      LIST(FIND loption_names "${arg}" is_option)            
      IF (is_option GREATER -1)
      SET(${prefix}_${arg} TRUE)
      ELSE (is_option GREATER -1)
      SET(current_arg_list ${current_arg_list} ${arg})
      ENDIF (is_option GREATER -1)
    ENDIF (is_arg_name GREATER -1)
  ENDFOREACH(arg)
  SET(${prefix}_${current_arg_name} ${current_arg_list})
ENDMACRO()

================================================
FILE: cmake/compile_flags.cmake
================================================
# Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA


## ADD_COMPILE_FLAGS(<source files> COMPILE_FLAGS <flags>)
MACRO(ADD_COMPILE_FLAGS)
  SET(FILES "")
  SET(FLAGS "")
  SET(COMPILE_FLAGS_SEEN)
  FOREACH(ARG ${ARGV})
    IF(ARG STREQUAL "COMPILE_FLAGS")
      SET(COMPILE_FLAGS_SEEN 1)
    ELSEIF(COMPILE_FLAGS_SEEN)
      LIST(APPEND FLAGS ${ARG})
    ELSE()
      LIST(APPEND FILES ${ARG})
    ENDIF()
  ENDFOREACH()
  FOREACH(FILE ${FILES})
    FOREACH(FLAG ${FLAGS})
      GET_SOURCE_FILE_PROPERTY(PROP ${FILE} COMPILE_FLAGS)
      IF(NOT PROP)
        SET(PROP ${FLAG})
      ELSE()
        SET(PROP "${PROP} ${FLAG}")
      ENDIF()
      SET_SOURCE_FILES_PROPERTIES(
        ${FILE} PROPERTIES COMPILE_FLAGS "${PROP}"
        )
    ENDFOREACH()
  ENDFOREACH()
ENDMACRO()


================================================
FILE: cmake/compiler.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

include(CheckCXXCompilerFlag)

# Check for C++11 support
function(CHECK_CXX11)
  check_cxx_compiler_flag("-std=c++11" support_11)

  if(support_11)
    set(CXX11_FLAG "-std=c++11" PARENT_SCOPE)
  else()
    message(FATAL_ERROR "Compiler ${CMAKE_CXX_COMPILER} does not support C++11 standard")
  endif()
  set(CMAKE_CXX_FLAGS ${CXX11_FLAG} PARENT_SCOPE)
endfunction()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  check_cxx11()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Wconversion -Wshadow")

  check_cxx_compiler_flag("-Wpedantic" COMPILER_HAS_WARNING_PEDANTIC)
  if(COMPILER_HAS_WARNING_PEDANTIC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9)
    # gcc 4.8 doesn't support -Wpedantic -Wno-pedantic to selectively disable
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=pedantic")
  endif()
  # bring the options in sync with the server's

  # GCC has this options, clang doesn't
  check_cxx_compiler_flag("-Wformat-security" COMPILER_HAS_WARNING_FORMAT_SECURITY)
  if(COMPILER_HAS_WARNING_FORMAT_SECURITY)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat-security")
  endif()

  check_cxx_compiler_flag("-Wnon-virtual-dtor" COMPILER_HAS_WARNING_NON_VIRTUAL_DTOR)
  if(COMPILER_HAS_WARNING_NON_VIRTUAL_DTOR)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor")
  endif()

  # GCC/clang have this option
  # clang doesn't have its sibling: -Wsuggest-attribute=format
  check_cxx_compiler_flag("-Wmissing-format-attribute" COMPILER_HAS_WARNING_MISSING_FORMAT_ATTRIBUTE)
  if(COMPILER_HAS_WARNING_MISSING_FORMAT_ATTRIBUTE)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-format-attribute")
  endif()

  # GCC/clang have this option
  #
  # FIXME: as long as protobuf-3.0.0 and gmock 1.7.0 are used, we need to disable -Wundef as it is
  # triggered all over the place in the headers. It should actually be enabled.
  check_cxx_compiler_flag("-Wundef" COMPILER_HAS_WARNING_UNDEF)
  if(COMPILER_HAS_WARNING_UNDEF)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-undef -Wno-conversion")
  endif()

  # GCC/clang have this option
  check_cxx_compiler_flag("-Wvla" COMPILER_HAS_WARNING_VLA)
  if(COMPILER_HAS_WARNING_VLA)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wvla")
  endif()

  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAG}")

elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
  # Overview of MSVC versions: http://www.cmake.org/cmake/help/v3.3/variable/MSVC_VERSION.html
  if("${MSVC_VERSION}" VERSION_LESS 1800)
    message(FATAL_ERROR "Need at least ${CMAKE_CXX_COMPILER} 12.0")
  endif()
  # /TP is needed so .cc files are recognoized as C++ source files by MSVC
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /TP")
  add_definitions(-DWIN32_LEAN_AND_MEAN)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.13.0)
    message(FATAL_ERROR "Compiler ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_VERSION} is too old; need at least SunPro 5.13.0 (aka Oracle Developer Studio 12.4)")
  endif()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
else()
  message(FATAL_ERROR "Compiler ${CMAKE_CXX_COMPILER} is not supported")
endif()



================================================
FILE: cmake/configure.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

include(GNUInstallDirs)

# installed executable location (used in config.h)
if(IS_ABSOLUTE "${INSTALL_BINDIR}")
  set(ROUTER_BINDIR ${INSTALL_BINDIR})
else()
  set(ROUTER_BINDIR ${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR})
endif()

# Configuration folder (config_folder configuration option)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  set(_configdir "ENV{APPDATA}")
else()
  if(IS_ABSOLUTE ${INSTALL_CONFIGDIR})
    set(_configdir ${INSTALL_CONFIGDIR})
  elseif(INSTALL_CONFIGDIR STREQUAL ".")
    # Current working directory
    set(_configdir ${INSTALL_CONFIGDIR})
  else()
    set(_configdir ${CMAKE_INSTALL_PREFIX}/${INSTALL_CONFIGDIR})
  endif()
endif()
set(ROUTER_CONFIGDIR ${_configdir} CACHE STRING "Location of configuration file(s) (config_folder)")
unset(_configdir)

# Logging folder (logging_folder configuration option)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  set(_logdir "ENV{APPDATA}\\\\log")
else()
  # logging folder can be set to empty to log to console
  if(IS_ABSOLUTE "${INSTALL_LOGDIR}")
    set(_logdir ${INSTALL_LOGDIR})
  elseif(NOT INSTALL_LOGDIR)
    set(_logdir "/var/log/mysqlrouter/")
  else()
    set(_logdir ${CMAKE_INSTALL_PREFIX}/${INSTALL_LOGDIR})
  endif()
endif()
set(ROUTER_LOGDIR ${_logdir} CACHE STRING "Location of log files; empty is console (logging_folder)")
unset(_logdir)

# Runtime folder (runtime_folder configuration option)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  set(_runtimedir "ENV{APPDATA}")
else()
  if(IS_ABSOLUTE "${INSTALL_RUNTIMEDIR}")
    set(_runtimedir ${INSTALL_RUNTIMEDIR})
  elseif(NOT INSTALL_RUNTIMEDIR)
    set(_logdir "/var/run/mysqlrouter/")
  else()
    set(_runtimedir ${CMAKE_INSTALL_PREFIX}/${INSTALL_RUNTIMEDIR})
  endif()
endif()
set(ROUTER_RUNTIMEDIR ${_runtimedir} CACHE STRING "Location runtime files such as PID file (runtime_folder)")
unset(_runtimedir)

# Plugin folder (plugin_folder configuration option)
if(IS_ABSOLUTE "${INSTALL_PLUGINDIR}")
  set(_plugindir ${INSTALL_PLUGINDIR})
else()
  set(_plugindir ${CMAKE_INSTALL_PREFIX}/${INSTALL_PLUGINDIR})
endif()
set(ROUTER_PLUGINDIR ${_plugindir} CACHE STRING "Location MySQL Router plugins (plugin_folder)")
unset(_plugindir)

# Data folder (data_folder configuration option)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  set(_datadir "ENV{APPDATA}\\\\data")
else()
  if(IS_ABSOLUTE "${INSTALL_DATADIR}")
    set(_datadir ${INSTALL_DATADIR})
  elseif(NOT INSTALL_DATADIR)
    set(_datadir "/var/lib/mysqlrouter/")
  else()
    set(_datadir "${CMAKE_INSTALL_PREFIX}/${INSTALL_DATADIR}")
  endif()
endif()
set(ROUTER_DATADIR ${_datadir} CACHE STRING "Location of data files such as keyring file")
unset(_datadir)


# Generate the copyright string
function(SET_COPYRIGHT TARGET)
  string(TIMESTAMP curr_year "%Y" UTC)
  set(start_year "2015")
  set(years "${start_year},")
  if(NOT curr_year STREQUAL ${start_year})
    set(years "${start_year}, ${curr_year},")
  endif()
  set(${TARGET} "Copyright (c) ${years} Oracle and/or its affiliates. All rights reserved." PARENT_SCOPE)
endfunction()

set_copyright(ORACLE_COPYRIGHT)

if(INSTALL_LAYOUT STREQUAL "STANDALONE")
  set(ROUTER_PLUGINDIR "{origin}/../${INSTALL_PLUGINDIR_STANDALONE}")
  set(ROUTER_CONFIGDIR "{origin}/../${INSTALL_CONFIGDIR_STANDALONE}")
  set(ROUTER_RUNTIMEDIR "{origin}/../${INSTALL_RUNTIMEDIR_STANDALONE}")
  set(ROUTER_LOGDIR "{origin}/../${INSTALL_LOGDIR_STANDALONE}")
  set(ROUTER_DATADIR "{origin}/../${INSTALL_DATADIR_STANDALONE}")
endif()

# Default configuration file locations (similar to MySQL Server)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  set(CONFIG_FILE_LOCATIONS
      "${ROUTER_CONFIGDIR}/${MYSQL_ROUTER_INI}"
      "ENV{APPDATA}/${MYSQL_ROUTER_INI}"
      )
else()
  set(CONFIG_FILE_LOCATIONS
      "${ROUTER_CONFIGDIR}/${MYSQL_ROUTER_INI}"
      "ENV{HOME}/.${MYSQL_ROUTER_INI}"
      )
endif()
set(CONFIG_FILES ${CONFIG_FILE_LOCATIONS})

# Platform/Compiler checks
INCLUDE(TestBigEndian)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)

INCLUDE(CheckTypeSize)
CHECK_TYPE_SIZE("void *"    SIZEOF_VOIDP)
CHECK_TYPE_SIZE("char *"    SIZEOF_CHARP)
CHECK_TYPE_SIZE("long"      SIZEOF_LONG)
CHECK_TYPE_SIZE("short"     SIZEOF_SHORT)
CHECK_TYPE_SIZE("int"       SIZEOF_INT)
CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
CHECK_TYPE_SIZE("off_t"     SIZEOF_OFF_T)
CHECK_TYPE_SIZE("time_t"    SIZEOF_TIME_T)

# Platform/Compiler checks
INCLUDE(TestBigEndian)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)

# Compiler specific features
INCLUDE(CheckCSourceCompiles)
CHECK_C_SOURCE_COMPILES("
void test(const char *format, ...) __attribute__((format(printf, 1, 2)));
int main() {
  return 0;
}" HAVE_ATTRIBUTE_FORMAT)

MACRO(DIRNAME IN OUT)
  GET_FILENAME_COMPONENT(${OUT} ${IN} PATH)
ENDMACRO()

MACRO(FIND_REAL_LIBRARY SOFTLINK_NAME REALNAME)
  # We re-distribute libstdc++.so which is symlink.
  # There is no 'readlink' on solaris, so we use perl to follow the link:
  SET(PERLSCRIPT
    "my $link= $ARGV[0]; use Cwd qw(abs_path); my $file = abs_path($link); print $file;")
  EXECUTE_PROCESS(
    COMMAND perl -e "${PERLSCRIPT}" ${SOFTLINK_NAME}
    RESULT_VARIABLE result
    OUTPUT_VARIABLE real_library
    )
  SET(REALNAME ${real_library})
ENDMACRO()

MACRO(EXTEND_CXX_LINK_FLAGS LIBRARY_PATH)
  # Using the $ORIGIN token with the -R option to locate the libraries
  # on a path relative to the executable:
  SET(CMAKE_CXX_LINK_FLAGS
    "${CMAKE_CXX_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
  MESSAGE(STATUS "CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS}")
ENDMACRO()

MACRO(EXTEND_C_LINK_FLAGS LIBRARY_PATH)
  SET(CMAKE_C_LINK_FLAGS
    "${CMAKE_C_LINK_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
  MESSAGE(STATUS "CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS}")
  SET(CMAKE_SHARED_LIBRARY_C_FLAGS
    "${CMAKE_SHARED_LIBRARY_C_FLAGS} -R'\$ORIGIN/../lib' -R${LIBRARY_PATH}")
ENDMACRO()

IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_COMPILER_IS_GNUCC)
  DIRNAME(${CMAKE_CXX_COMPILER} CXX_PATH)
  SET(LIB_SUFFIX "lib")
  IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "sparc")
    SET(LIB_SUFFIX "lib/sparcv9")
  ENDIF()
  IF(SIZEOF_VOIDP EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "i386")
    SET(LIB_SUFFIX "lib/amd64")
  ENDIF()
  FIND_LIBRARY(GPP_LIBRARY_NAME
    NAMES "stdc++"
    PATHS ${CXX_PATH}/../${LIB_SUFFIX}
    NO_DEFAULT_PATH
  )
  MESSAGE(STATUS "GPP_LIBRARY_NAME ${GPP_LIBRARY_NAME}")
  IF(GPP_LIBRARY_NAME)
    DIRNAME(${GPP_LIBRARY_NAME} GPP_LIBRARY_PATH)
    FIND_REAL_LIBRARY(${GPP_LIBRARY_NAME} real_library)
    MESSAGE(STATUS "INSTALL ${GPP_LIBRARY_NAME} ${real_library}")
    INSTALL(FILES ${GPP_LIBRARY_NAME} ${real_library}
            DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries)
    EXTEND_CXX_LINK_FLAGS(${GPP_LIBRARY_PATH})
    EXECUTE_PROCESS(
      COMMAND sh -c "elfdump ${real_library} | grep SONAME"
      RESULT_VARIABLE result
      OUTPUT_VARIABLE sonameline
    )
    IF(NOT result)
      STRING(REGEX MATCH "libstdc.*[^\n]" soname ${sonameline})
      MESSAGE(STATUS "INSTALL ${GPP_LIBRARY_PATH}/${soname}")
      INSTALL(FILES "${GPP_LIBRARY_PATH}/${soname}"
              DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries)
    ENDIF()
  ENDIF()
  FIND_LIBRARY(GCC_LIBRARY_NAME
    NAMES "gcc_s"
    PATHS ${CXX_PATH}/../${LIB_SUFFIX}
    NO_DEFAULT_PATH
  )
  IF(GCC_LIBRARY_NAME)
    DIRNAME(${GCC_LIBRARY_NAME} GCC_LIBRARY_PATH)
    FIND_REAL_LIBRARY(${GCC_LIBRARY_NAME} real_library)
    MESSAGE(STATUS "INSTALL ${GCC_LIBRARY_NAME} ${real_library}")
    INSTALL(FILES ${GCC_LIBRARY_NAME} ${real_library}
            DESTINATION ${INSTALL_LIBDIR} COMPONENT SharedLibraries)
    EXTEND_C_LINK_FLAGS(${GCC_LIBRARY_PATH})
  ENDIF()
ENDIF()

# check if platform supports prlimit()
include(CMakePushCheckState)
cmake_push_check_state()
cmake_reset_check_state()
include(CheckSymbolExists)
set(CMAKE_REQUIRED_FLAGS -D_GNU_SOURCE)
check_symbol_exists(prlimit sys/resource.h HAVE_PRLIMIT)
cmake_pop_check_state()

configure_file(config.h.in router_config.h @ONLY)
include_directories(${PROJECT_BINARY_DIR})


================================================
FILE: cmake/docs.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

find_package(Doxygen)

if (DOXYGEN_FOUND)
  file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/doc)

  configure_file(doc/doxygen.cfg.in ${PROJECT_BINARY_DIR}/doc/doxygen.cfg @ONLY)

  foreach(f router_footer.html router_header.html router_doxygen.css)
    file(COPY ${PROJECT_SOURCE_DIR}/doc/${f} DESTINATION ${PROJECT_BINARY_DIR}/doc)
  endforeach()

  add_custom_target(doc ${DOXYGEN_EXECUTABLE} doc/doxygen.cfg
    COMMAND pwd
    WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
    COMMENT "Generate MySQL Router developer documentation"
    VERBATIM)
endif()


================================================
FILE: cmake/gmocktest.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# CMake module handling Google C++ Mocking & Testing Framework dependency

# We do not add "REQUIRED" here so we can handle missing GTest
# showing a better error message
find_package(GMock 1.7.0)
set(GTEST_ROOT "${GMOCK_ROOT}/gtest")
find_package(GTest)

if(NOT GTEST_FOUND OR NOT GMOCK_FOUND)
  message(STATUS "")
  message(STATUS "GMock/GTest were not found in following folder")
  message(STATUS "  ${GMOCK_ROOT}")
  message(STATUS "")
  message(STATUS "Please make sure that GMock was compiled in the above")
  message(STATUS "mentioned folder as follows:")
  message(STATUS "  shell> cd ${GMOCK_ROOT}")
  message(STATUS "  shell> cmake .")
  message(STATUS "  shell> make")
  message(STATUS "Or set the CMake variable GMOCK_ROOT pointing")
  message(STATUS "to the installation of GMock (which also includes GTest).")
  message(STATUS "")
  message(STATUS "GMock can be downloaded using following URL:")
  message(STATUS "   ${GMOCK_DOWNLOAD_URL}")
  message(STATUS "")

  message(FATAL_ERROR "Please fix GMock and GTest installation (see above message)")
endif()


================================================
FILE: cmake/install_layout.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# Originally part of MySQL Server and Adapted for MySQL Router.

# The purpose of this file is to set the default installation layout.
#
# The current choices of installation layout are:
#
#  STANDALONE
#    Build with prefix=/usr/local/mysql, create tarball with install prefix="."
#    and relative links.  Windows zip uses the same tarball layout but without
#    the build prefix.
#
#  RPM, SLES
#    Build as per default RPM layout, with prefix=/usr
#    Note: The layout for ULN RPMs differs, see the "RPM" section.
#
#  DEB
#    Build as per default Debian layout, with prefix=/usr
#    Note: previous layout is now named DEBSRV4
#
#  DEBSRV4
#    Build as per STANDALONE, prefix=/opt/mysql/mysql-router-$major.$minor
#
#  SVR4
#    Solaris package layout suitable for pkg* tools, prefix=/opt/mysql/mysql-router
#
#  FREEBSD, GLIBC, OSX, TARGZ
#    Build with prefix=/usr/local/mysql, create tarball with install prefix="."
#    and relative links.
#
#  WIN
#     Windows zip : same as tarball layout but without the build prefix
#
# To force a directory layout, use -DINSTALL_LAYOUT=<layout>.
#
# The default is STANDALONE.
#
# Note : At present, RPM and SLES layouts are similar. This is also true
#        for layouts like FREEBSD, GLIBC, OSX, TARGZ. However, they provide
#        opportunity to fine-tune deployment for each platform without
#        affecting all other types of deployment.
#
# There is the possibility to further fine-tune installation directories.
# Several variables can be overwritten:
#
# - INSTALL_BINDIR          (directory with client executables and scripts)
# - INSTALL_SBINDIR         (directory with mysqld)
# - INSTALL_SCRIPTDIR       (several scripts, rarely used)
#
# - INSTALL_LIBDIR          (directory with client end embedded libraries)
# - INSTALL_PLUGINDIR       (directory for plugins)
#
# - INSTALL_INCLUDEDIR      (directory for MySQL headers)
#
# - INSTALL_DOCDIR          (documentation)
# - INSTALL_DOCREADMEDIR    (readme and similar)
# - INSTALL_MANDIR          (man pages)
# - INSTALL_INFODIR         (info pages)
#
# - INSTALL_SHAREDIR        (location of aclocal/mysql.m4)
# - INSTALL_MYSQLSHAREDIR   (MySQL character sets and localized error messages)
# - INSTALL_MYSQLTESTDIR    (mysqlrouter-test)
# - INSTALL_SQLBENCHDIR     (sql-bench)
# - INSTALL_SUPPORTFILESDIR (various extra support files)
#
# - INSTALL_MYSQLDATADIR    (data directory)
# - INSTALL_SECURE_FILE_PRIVDIR (--secure-file-priv directory)
#
# When changing this page,  _please_ do not forget to update public Wiki
# http://forge.mysql.com/wiki/CMake#Fine-tuning_installation_paths

IF(NOT INSTALL_LAYOUT)
  IF(WIN32)
	SET(DEFAULT_INSTALL_LAYOUT "WIN")
  ELSE()
	SET(DEFAULT_INSTALL_LAYOUT "DEFAULT")
  ENDIF()
ENDIF()

if(NOT CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  SET(DEFAULT_INSTALL_LAYOUT "STANDALONE")
endif()

SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}"
CACHE STRING "Installation directory layout. Options are: TARGZ (as in tar.gz installer), WIN (as in zip installer), STANDALONE, RPM, DEB, DEBSRV4, SVR4, FREEBSD, GLIBC, OSX, SLES")

message(STATUS "Installation layout set to ${DEFAULT_INSTALL_LAYOUT}")

IF(UNIX)
  IF(INSTALL_LAYOUT STREQUAL "RPM" OR
     INSTALL_LAYOUT STREQUAL "SLES" OR
     INSTALL_LAYOUT STREQUAL "DEB")
    SET(default_prefix "/usr")
  ELSEIF(INSTALL_LAYOUT STREQUAL "DEBSVR4")
    SET(default_prefix "/opt/mysql/router-${PROJECT_VERSION}")
    # This is required to avoid "cpack -GDEB" default of prefix=/usr
    SET(CPACK_SET_DESTDIR ON)
  ELSEIF(INSTALL_LAYOUT STREQUAL "SVR4")
    SET(default_prefix "/opt/mysql/router")
  ELSE()
    SET(default_prefix "/usr/local")
  ENDIF()
  IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    SET(CMAKE_INSTALL_PREFIX ${default_prefix}
      CACHE PATH "install prefix" FORCE)
  ENDIF()
  SET(VALID_INSTALL_LAYOUTS
      "RPM" "DEB" "DEBSVR4" "SVR4" "FREEBSD" "GLIBC" "OSX" "TARGZ" "SLES" "STANDALONE" "DEFAULT")
  LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind)
  IF(ind EQUAL -1)
    MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}."
    " Choose between ${VALID_INSTALL_LAYOUTS}" )
  ENDIF()
ENDIF()

IF(WIN32)
  SET(VALID_INSTALL_LAYOUTS "TARGZ" "STANDALONE" "WIN")
  LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind)
  IF(ind EQUAL -1)
    MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}."
    " Choose between ${VALID_INSTALL_LAYOUTS}" )
  ENDIF()
ENDIF()

#
# DEFAULT_SECURE_FILE_PRIV_DIR
#
IF(INSTALL_LAYOUT STREQUAL "STANDALONE" OR INSTALL_LAYOUT STREQUAL "DEFAULT" OR
   INSTALL_LAYOUT STREQUAL "WIN")
  SET(secure_file_priv_path "")
ELSEIF(INSTALL_LAYOUT STREQUAL "RPM" OR
       INSTALL_LAYOUT STREQUAL "SLES" OR
       INSTALL_LAYOUT STREQUAL "SVR4" OR
       INSTALL_LAYOUT STREQUAL "DEB" OR
       INSTALL_LAYOUT STREQUAL "DEBSVR4")
  SET(secure_file_priv_path "/var/lib/mysqlrouter-files")
ELSE()
  SET(secure_file_priv_path "${default_prefix}/mysqlrouter-files")
ENDIF()

#
# STANDALONE layout
#
SET(INSTALL_BINDIR_STANDALONE           "bin")
SET(INSTALL_SBINDIR_STANDALONE          "bin")
SET(INSTALL_SCRIPTDIR_STANDALONE        "scripts")
SET(INSTALL_LOGDIR_STANDALONE           "")
SET(INSTALL_CONFIGDIR_STANDALONE        ".")
SET(INSTALL_RUNTIMEDIR_STANDALONE       "run")
SET(INSTALL_DATADIR_STANDALONE          "data")
#
SET(INSTALL_LIBDIR_STANDALONE           "lib")
if(WIN32)
  SET(INSTALL_PLUGINDIR_STANDALONE        "lib")
else()
  SET(INSTALL_PLUGINDIR_STANDALONE        "lib/mysqlrouter")
endif()
#
SET(INSTALL_INCLUDEDIR_STANDALONE       "include")
#
SET(INSTALL_DOCDIR_STANDALONE           "share/doc/mysqlrouter")
SET(INSTALL_DOCREADMEDIR_STANDALONE     ".")
SET(INSTALL_MANDIR_STANDALONE           "man")
SET(INSTALL_INFODIR_STANDALONE          "share/doc/mysqlrouter")
#
SET(INSTALL_SHAREDIR_STANDALONE         "share")
SET(INSTALL_MYSQLSHAREDIR_STANDALONE    "share")
SET(INSTALL_MYSQLTESTDIR_STANDALONE     "share/mysqlrouter/test")
SET(INSTALL_SQLBENCHDIR_STANDALONE      ".")
SET(INSTALL_SUPPORTFILESDIR_STANDALONE  "share/mysqlrouter/support-files")
#
SET(INSTALL_MYSQLDATADIR_STANDALONE     "data")
SET(INSTALL_PLUGINTESTDIR_STANDALONE    ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_STANDALONE ${secure_file_priv_path})

#
# DEFAULT layout
#
SET(INSTALL_BINDIR_DEFAULT           "bin")
SET(INSTALL_SBINDIR_DEFAULT          "bin")
SET(INSTALL_SCRIPTDIR_DEFAULT        "scripts")
SET(INSTALL_LOGDIR_DEFAULT           "/var/local/mysqlrouter/log")
SET(INSTALL_CONFIGDIR_DEFAULT        "etc/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_DEFAULT       "/var/local/mysqlrouter/run")
SET(INSTALL_DATADIR_DEFAULT          "/var/local/mysqlrouter/data")
#
SET(INSTALL_LIBDIR_DEFAULT           "lib")
SET(INSTALL_PLUGINDIR_DEFAULT        "lib/mysqlrouter")
#
SET(INSTALL_INCLUDEDIR_DEFAULT       "include")
#
SET(INSTALL_DOCDIR_DEFAULT           "share/doc/mysqlrouter")
SET(INSTALL_DOCREADMEDIR_DEFAULT     ".")
SET(INSTALL_MANDIR_DEFAULT           "man")
SET(INSTALL_INFODIR_DEFAULT          "share/doc/mysqlrouter")
#
SET(INSTALL_SHAREDIR_DEFAULT         "share")
SET(INSTALL_MYSQLSHAREDIR_DEFAULT    "share")
SET(INSTALL_MYSQLTESTDIR_DEFAULT     "share/mysqlrouter/test")
SET(INSTALL_SQLBENCHDIR_DEFAULT      ".")
SET(INSTALL_SUPPORTFILESDIR_DEFAULT  "share/mysqlrouter/support-files")
#
SET(INSTALL_MYSQLDATADIR_DEFAULT     "data")
SET(INSTALL_PLUGINTESTDIR_DEFAULT    ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_DEFAULT ${secure_file_priv_path})

#
# WIN layout
#
SET(INSTALL_BINDIR_WIN           "bin")
SET(INSTALL_SBINDIR_WIN          "bin")
SET(INSTALL_SCRIPTDIR_WIN        "scripts")
SET(INSTALL_LOGDIR_WIN           "log/mysqlrouter")
SET(INSTALL_CONFIGDIR_WIN        ".")
SET(INSTALL_RUNTIMEDIR_WIN       ".")
SET(INSTALL_DATADIR_WIN          ".")
#
SET(INSTALL_LIBDIR_WIN           "lib")
SET(INSTALL_PLUGINDIR_WIN        "lib")
#
SET(INSTALL_INCLUDEDIR_WIN       "include")
#
SET(INSTALL_DOCDIR_WIN           "docs")
SET(INSTALL_DOCREADMEDIR_WIN     ".")
SET(INSTALL_MANDIR_WIN           "man")
SET(INSTALL_INFODIR_WIN          "docs")
#
SET(INSTALL_SHAREDIR_WIN         "share")
SET(INSTALL_MYSQLSHAREDIR_WIN    "share")
SET(INSTALL_MYSQLTESTDIR_WIN     "mysqlrouter-test")
SET(INSTALL_SQLBENCHDIR_WIN      ".")
SET(INSTALL_SUPPORTFILESDIR_WIN  "support-files")
#
SET(INSTALL_MYSQLDATADIR_WIN     "data")
SET(INSTALL_PLUGINTESTDIR_WIN    ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_WIN ${secure_file_priv_path})

#
# FREEBSD layout
#
SET(INSTALL_BINDIR_FREEBSD           "bin")
SET(INSTALL_SBINDIR_FREEBSD          "bin")
SET(INSTALL_SCRIPTDIR_FREEBSD        "scripts")
SET(INSTALL_LOGDIR_FREEBSD           "/var/log/mysqlrouter")
SET(INSTALL_CONFIGDIR_FREEBSD        "/etc/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_FREEBSD       "/var/run/mysqlrouter")
SET(INSTALL_DATADIR_FREEBSD          "/var/lib/mysqlrouter")
#
SET(INSTALL_LIBDIR_FREEBSD           "lib")
SET(INSTALL_PLUGINDIR_FREEBSD        "lib/mysqlrouter")
#
SET(INSTALL_INCLUDEDIR_FREEBSD       "include")
#
SET(INSTALL_DOCDIR_FREEBSD           "docs")
SET(INSTALL_DOCREADMEDIR_FREEBSD     ".")
SET(INSTALL_MANDIR_FREEBSD           "man")
SET(INSTALL_INFODIR_FREEBSD          "docs")
#
SET(INSTALL_SHAREDIR_FREEBSD         "share")
SET(INSTALL_MYSQLSHAREDIR_FREEBSD    "share")
SET(INSTALL_MYSQLTESTDIR_FREEBSD     "mysqlrouter-test")
SET(INSTALL_SQLBENCHDIR_FREEBSD      ".")
SET(INSTALL_SUPPORTFILESDIR_FREEBSD  "support-files")
#
SET(INSTALL_MYSQLDATADIR_FREEBSD     "data")
SET(INSTALL_PLUGINTESTDIR_FREEBSD    ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_FREEBSD ${secure_file_priv_path})

#
# GLIBC layout
#
SET(INSTALL_BINDIR_GLIBC           "bin")
SET(INSTALL_SBINDIR_GLIBC          "bin")
SET(INSTALL_SCRIPTDIR_GLIBC        "scripts")
SET(INSTALL_LOGDIR_GLIBC           "/var/log/mysqlrouter")
SET(INSTALL_CONFIGDIR_GLIBC        "/etc/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_GLIBC       "/var/run/mysqlrouter")
SET(INSTALL_DATADIR_GLIBC          "/var/lib/mysqlrouter")
#
SET(INSTALL_LIBDIR_GLIBC           "lib")
SET(INSTALL_PLUGINDIR_GLIBC        "lib/mysqlrouter")
#
SET(INSTALL_INCLUDEDIR_GLIBC       "include")
#
SET(INSTALL_DOCDIR_GLIBC           "docs")
SET(INSTALL_DOCREADMEDIR_GLIBC     ".")
SET(INSTALL_MANDIR_GLIBC           "man")
SET(INSTALL_INFODIR_GLIBC          "docs")
#
SET(INSTALL_SHAREDIR_GLIBC         "share")
SET(INSTALL_MYSQLSHAREDIR_GLIBC    "share")
SET(INSTALL_MYSQLTESTDIR_GLIBC     "mysqlrouter-test")
SET(INSTALL_SQLBENCHDIR_GLIBC      ".")
SET(INSTALL_SUPPORTFILESDIR_GLIBC  "support-files")
#
SET(INSTALL_MYSQLDATADIR_GLIBC     "data")
SET(INSTALL_PLUGINTESTDIR_GLIBC    ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_GLIBC ${secure_file_priv_path})

#
# OSX layout
#
SET(INSTALL_BINDIR_OSX           "bin")
SET(INSTALL_SBINDIR_OSX          "bin")
SET(INSTALL_SCRIPTDIR_OSX        "scripts")
SET(INSTALL_LOGDIR_OSX           "/var/log/mysqlrouter")
SET(INSTALL_CONFIGDIR_OSX        "/etc/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_OSX       "/var/run/mysqlrouter")
SET(INSTALL_DATADIR_OSX          "/var/lib/mysqlrouter")

#
SET(INSTALL_LIBDIR_OSX           "lib")
SET(INSTALL_PLUGINDIR_OSX        "lib/mysqlrouter")
#
SET(INSTALL_INCLUDEDIR_OSX       "include")
#
SET(INSTALL_DOCDIR_OSX           "docs")
SET(INSTALL_DOCREADMEDIR_OSX     ".")
SET(INSTALL_MANDIR_OSX           "man")
SET(INSTALL_INFODIR_OSX          "docs")
#
SET(INSTALL_SHAREDIR_OSX         "share")
SET(INSTALL_MYSQLSHAREDIR_OSX    "share")
SET(INSTALL_MYSQLTESTDIR_OSX     "mysqlrouter-test")
SET(INSTALL_SQLBENCHDIR_OSX      ".")
SET(INSTALL_SUPPORTFILESDIR_OSX  "support-files")
#
SET(INSTALL_MYSQLDATADIR_OSX     "data")
SET(INSTALL_PLUGINTESTDIR_OSX    ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_OSX ${secure_file_priv_path})

#
# TARGZ layout
#
SET(INSTALL_BINDIR_TARGZ           "bin")
SET(INSTALL_SBINDIR_TARGZ          "bin")
SET(INSTALL_SCRIPTDIR_TARGZ        "scripts")
SET(INSTALL_LOGDIR_TARGZ           "")
SET(INSTALL_CONFIGDIR_TARGZ        "/etc/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_TARGZ       "/var/run/mysqlrouter")
SET(INSTALL_DATADIR_TARGZ          "/var/lib/mysqlrouter")
#
SET(INSTALL_LIBDIR_TARGZ           "lib")
SET(INSTALL_PLUGINDIR_TARGZ        "lib/mysqlrouter")
#
SET(INSTALL_INCLUDEDIR_TARGZ       "include")
#
SET(INSTALL_DOCDIR_TARGZ           "docs")
SET(INSTALL_DOCREADMEDIR_TARGZ     ".")
SET(INSTALL_MANDIR_TARGZ           "man")
SET(INSTALL_INFODIR_TARGZ          "docs")
#
SET(INSTALL_SHAREDIR_TARGZ         "share")
SET(INSTALL_MYSQLSHAREDIR_TARGZ    "share")
SET(INSTALL_MYSQLTESTDIR_TARGZ     "mysqlrouter-test")
SET(INSTALL_SQLBENCHDIR_TARGZ      ".")
SET(INSTALL_SUPPORTFILESDIR_TARGZ  "support-files")
#
SET(INSTALL_MYSQLDATADIR_TARGZ     "data")
SET(INSTALL_PLUGINTESTDIR_TARGZ    ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_TARGZ ${secure_file_priv_path})

#
# RPM layout
#
# See "packaging/rpm-uln/mysql-5.5-libdir.patch" for the differences
# which apply to RPMs in ULN (Oracle Linux), that patch file will
# be applied at build time via "rpmbuild".
#
SET(INSTALL_BINDIR_RPM                  "bin")
SET(INSTALL_SBINDIR_RPM                 "sbin")
SET(INSTALL_SCRIPTDIR_RPM               "bin")
SET(INSTALL_LOGDIR_RPM                  "/var/log/mysqlrouter")
SET(INSTALL_CONFIGDIR_RPM               "/etc/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_RPM              "/var/run/mysqlrouter")
SET(INSTALL_DATADIR_RPM                 "/var/lib/mysqlrouter")
#
IF(ARCH_64BIT)
  SET(INSTALL_LIBDIR_RPM                "lib64")
  SET(INSTALL_PLUGINDIR_RPM             "lib64/mysqlrouter")
ELSE()
  SET(INSTALL_LIBDIR_RPM                "lib")
  SET(INSTALL_PLUGINDIR_RPM             "lib/mysqlrouter")
ENDIF()
#
SET(INSTALL_INCLUDEDIR_RPM              "include/mysql")
#
#SET(INSTALL_DOCDIR_RPM                 unset - installed directly by RPM)
#SET(INSTALL_DOCREADMEDIR_RPM           unset - installed directly by RPM)
SET(INSTALL_INFODIR_RPM                 "share/info")
SET(INSTALL_MANDIR_RPM                  "share/man")
#
SET(INSTALL_SHAREDIR_RPM                "share")
SET(INSTALL_MYSQLSHAREDIR_RPM           "share/mysql-router")
SET(INSTALL_MYSQLTESTDIR_RPM            "share/mysql-router-test")
SET(INSTALL_SQLBENCHDIR_RPM             "")
SET(INSTALL_SUPPORTFILESDIR_RPM         "share/mysql-router")
#
SET(INSTALL_MYSQLDATADIR_RPM            "/var/lib/mysqlrouter")
SET(INSTALL_PLUGINTESTDIR_RPM           ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_RPM     ${secure_file_priv_path})

#
# SLES layout
#
SET(INSTALL_BINDIR_SLES                  "bin")
SET(INSTALL_SBINDIR_SLES                 "sbin")
SET(INSTALL_SCRIPTDIR_SLES               "bin")
SET(INSTALL_LOGDIR_SLES                  "/var/log/mysqlrouter")
SET(INSTALL_CONFIGDIR_SLES               "/etc/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_SLES              "/var/run/mysqlrouter")
SET(INSTALL_DATADIR_SLES                 "/var/lib/mysqlrouter")
#
IF(ARCH_64BIT)
  SET(INSTALL_LIBDIR_SLES                "lib64")
  SET(INSTALL_PLUGINDIR_SLES             "lib64/mysqlrouter")
ELSE()
  SET(INSTALL_LIBDIR_SLES                "lib")
  SET(INSTALL_PLUGINDIR_SLES             "lib/mysqlrouter")
ENDIF()
#
SET(INSTALL_INCLUDEDIR_SLES              "include/mysqlrouter")
#
#SET(INSTALL_DOCDIR_SLES                 unset - installed directly by SLES)
#SET(INSTALL_DOCREADMEDIR_SLES           unset - installed directly by SLES)
SET(INSTALL_INFODIR_SLES                 "share/info")
SET(INSTALL_MANDIR_SLES                  "share/man")
#
SET(INSTALL_SHAREDIR_SLES                "share")
SET(INSTALL_MYSQLSHAREDIR_SLES           "share/mysql-router")
SET(INSTALL_MYSQLTESTDIR_SLES            "share/mysqlrouter-test")
SET(INSTALL_SQLBENCHDIR_SLES             "")
SET(INSTALL_SUPPORTFILESDIR_SLES         "share/mysql")
#
SET(INSTALL_MYSQLDATADIR_SLES            "/var/lib/mysqlrouter")
SET(INSTALL_PLUGINTESTDIR_SLES           ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_SLES     ${secure_file_priv_path})

#
# DEB layout
#
SET(INSTALL_BINDIR_DEB                  "bin")
SET(INSTALL_SBINDIR_DEB                 "sbin")
SET(INSTALL_SCRIPTDIR_DEB               "bin")
SET(INSTALL_LOGDIR_DEB                  "/var/log/mysqlrouter")
SET(INSTALL_CONFIGDIR_DEB               "/etc/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_DEB              "/var/run/mysqlrouter")
SET(INSTALL_DATADIR_DEB                 "/var/lib/mysqlrouter")
#
IF(ARCH_64BIT)
  SET(INSTALL_LIBDIR_DEB                "lib/x86_64-linux-gnu")
  SET(INSTALL_PLUGINDIR_DEB             "lib/x86_64-linux-gnu/mysqlrouter")
ELSE()
  SET(INSTALL_LIBDIR_DEB                "lib/i386-linux-gnu")
  SET(INSTALL_PLUGINDIR_DEB             "lib/i386-linux-gnu/mysqlrouter")
ENDIF()
#
SET(INSTALL_INCLUDEDIR_DEB              "include/mysql/router")
#
SET(INSTALL_DOCDIR_DEB                  "share/mysql-router/docs")
SET(INSTALL_DOCREADMEDIR_DEB            "share/mysql-router/docs")
SET(INSTALL_MANDIR_DEB                  "share/man")
SET(INSTALL_INFODIR_DEB                 "share/mysql-router/docs")
#
SET(INSTALL_SHAREDIR_DEB                "share")
SET(INSTALL_MYSQLSHAREDIR_DEB           "share/mysql-router")
SET(INSTALL_MYSQLTESTDIR_DEB            "lib/mysql-router-test")
SET(INSTALL_SQLBENCHDIR_DEB             "lib/mysql-router")
SET(INSTALL_SUPPORTFILESDIR_DEB         "share/mysql-router")
#
SET(INSTALL_MYSQLDATADIR_DEB            "/var/lib/mysqlrouter")
SET(INSTALL_PLUGINTESTDIR_DEB           ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_DEB     ${secure_file_priv_path})

#
# DEBSVR4 layout
#
SET(INSTALL_BINDIR_DEBSVR4              "bin")
SET(INSTALL_SBINDIR_DEBSVR4             "bin")
SET(INSTALL_SCRIPTDIR_DEBSVR4           "scripts")
SET(INSTALL_LOGDIR_DEBSVR4              "/var/opt/mysqlrouter")
SET(INSTALL_CONFIGDIR_DEBSVR4           "/etc/opt/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_DEBSVR4          "/var/opt/mysqlrouter")
SET(INSTALL_DATADIR_DEBSVR4             "/var/opt/mysqlrouter")
#
SET(INSTALL_LIBDIR_DEBSVR4              "lib")
SET(INSTALL_PLUGINDIR_DEBSVR4           "lib/mysqlrouter")
#
SET(INSTALL_INCLUDEDIR_DEBSVR4          "include")
#
SET(INSTALL_DOCDIR_DEBSVR4              "docs")
SET(INSTALL_DOCREADMEDIR_DEBSVR4        ".")
SET(INSTALL_MANDIR_DEBSVR4              "man")
SET(INSTALL_INFODIR_DEBSVR4             "docs")
#
SET(INSTALL_SHAREDIR_DEBSVR4            "share")
SET(INSTALL_MYSQLSHAREDIR_DEBSVR4       "share")
SET(INSTALL_MYSQLTESTDIR_DEBSVR4        "mysqlrouter-test")
SET(INSTALL_SQLBENCHDIR_DEBSVR4         ".")
SET(INSTALL_SUPPORTFILESDIR_DEBSVR4     "support-files")
#
SET(INSTALL_MYSQLDATADIR_DEBSVR4        "/var/lib/mysqlrouter")
SET(INSTALL_PLUGINTESTDIR_DEBSVR4       ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_DEBSVR4 ${secure_file_priv_path})

#
# SVR4 layout
#
SET(INSTALL_BINDIR_SVR4                 "bin")
SET(INSTALL_SBINDIR_SVR4                "bin")
SET(INSTALL_SCRIPTDIR_SVR4              "scripts")
SET(INSTALL_LOGDIR_SVR4                 "/var/opt/mysqlrouter")
SET(INSTALL_CONFIGDIR_SVR4              "/etc/opt/mysqlrouter")
SET(INSTALL_RUNTIMEDIR_SVR4             "/var/opt/mysqlrouter")
SET(INSTALL_DATADIR_SVR4                "/var/opt/mysqlrouter")
#
SET(INSTALL_LIBDIR_SVR4                 "lib")
SET(INSTALL_PLUGINDIR_SVR4              "lib/mysqlrouter")
#
SET(INSTALL_INCLUDEDIR_SVR4             "include")
#
SET(INSTALL_DOCDIR_SVR4                 "docs")
SET(INSTALL_DOCREADMEDIR_SVR4           ".")
SET(INSTALL_MANDIR_SVR4                 "man")
SET(INSTALL_INFODIR_SVR4                "docs")
#
SET(INSTALL_SHAREDIR_SVR4               "share")
SET(INSTALL_MYSQLSHAREDIR_SVR4          "share")
SET(INSTALL_MYSQLTESTDIR_SVR4           "mysqlrouter-test")
SET(INSTALL_SQLBENCHDIR_SVR4            ".")
SET(INSTALL_SUPPORTFILESDIR_SVR4        "support-files")
#
SET(INSTALL_MYSQLDATADIR_SVR4           "/var/lib/mysqlrouter")
SET(INSTALL_PLUGINTESTDIR_SVR4          ${plugin_tests})
SET(INSTALL_SECURE_FILE_PRIVDIR_SVR4    ${secure_file_priv_path})


# Clear cached variables if install layout was changed
IF(OLD_INSTALL_LAYOUT)
  IF(NOT OLD_INSTALL_LAYOUT STREQUAL INSTALL_LAYOUT)
    SET(FORCE FORCE)
  ENDIF()
ENDIF()
SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "")

# Set INSTALL_FOODIR variables for chosen layout (for example, INSTALL_BINDIR
# will be defined  as ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE
# layout is chosen)
FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN
  INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA PLUGINTEST
  SECURE_FILE_PRIV LOG CONFIG RUNTIME DATA)
  SET(INSTALL_${var}DIR  ${INSTALL_${var}DIR_${INSTALL_LAYOUT}}
  CACHE STRING "${var} installation directory" ${FORCE})
  MARK_AS_ADVANCED(INSTALL_${var}DIR)
ENDFOREACH()

# Set up the rpath correctly based on the information provided.
# This set a relative rpath for when using install layouts that
# require this. The default is to use absolute paths, which are used
# for all other layouts.

SET(CMAKE_INSTALL_RPATH)
if(INSTALL_LAYOUT STREQUAL "STANDALONE" OR INSTALL_LAYOUT STREQUAL "DEFAULT" OR
   INSTALL_LAYOUT STREQUAL "WIN")
  # rpath for lib/mysqlrouter/ plugins that want to find lib/
  set(RPATH_PLUGIN_TO_LIB "${RPATH_ORIGIN}/../")
  set(RPATH_PLUGIN_TO_PLUGIN "${RPATH_ORIGIN}/")
  # rpath for lib/ libraries that want to find other libs in lib/
  set(RPATH_LIBRARY_TO_LIB "${RPATH_ORIGIN}/")
  # rpath for bin/ binaries that want to find other libs in lib/
  set(RPATH_BINARY_TO_LIB "${RPATH_ORIGIN}/../${INSTALL_LIBDIR}/")

else()
  # rpath for lib/mysqlrouter/ plugins that want to find lib/
  set(RPATH_PLUGIN_TO_LIB "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIBDIR}")
  set(RPATH_PLUGIN_TO_PLUGIN "${CMAKE_INSTALL_PREFIX}/${INSTALL_PLUGINDIR}")
  # rpath for lib/ libraries that want to find other libs in lib/
  set(RPATH_LIBRARY_TO_LIB "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIBDIR}")
  # rpath for bin/ binaries that want to find other libs in lib/
  set(RPATH_BINARY_TO_LIB "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIBDIR}")

endif()

# plugins may depend on other plugins
# plugins may depend on libs in lib/
# executables may depend on libs in lib/
LIST(APPEND CMAKE_INSTALL_RPATH
  ${RPATH_PLUGIN_TO_LIB}
  ${RPATH_PLUGIN_TO_PLUGIN}
  ${RPATH_LIBRARY_TO_LIB}
  ${RPATH_BINARY_TO_LIB})

LIST(REMOVE_DUPLICATES CMAKE_INSTALL_RPATH)

set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

#
# Set DEFAULT_SECURE_FILE_PRIV_DIR
# This is used as default value for --secure-file-priv
#
IF(INSTALL_SECURE_FILE_PRIVDIR)
  SET(DEFAULT_SECURE_FILE_PRIV_DIR "\"${INSTALL_SECURE_FILE_PRIVDIR}\""
      CACHE INTERNAL "default --secure-file-priv directory" FORCE)
ELSE()
  SET(DEFAULT_SECURE_FILE_PRIV_DIR \"\"
      CACHE INTERNAL "default --secure-file-priv directory" FORCE)
ENDIF()


================================================
FILE: cmake/libutils.cmake
================================================
# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 


# This file exports macros that emulate some functionality found  in GNU libtool
# on Unix systems. One such feature is convenience libraries. In this context,
# convenience library is a static library that can be linked to shared library
# On systems that force position-independent code, linking into shared library
# normally requires compilation with a special flag (often -fPIC). To enable 
# linking static libraries to shared, we compile source files that come into 
# static library with the PIC flag (${CMAKE_SHARED_LIBRARY_C_FLAGS} in CMake)
# Some systems, like Windows or OSX do not need special compilation (Windows 
# never uses PIC and OSX always uses it). 
#
# The intention behind convenience libraries is simplify the build and to reduce
# excessive recompiles.

# Except for convenience libraries, this file provides macros to merge static 
# libraries (we need it for mysqlclient) and to create shared library out of 
# convenience libraries(again, for mysqlclient)

# Following macros are exported
# - ADD_CONVENIENCE_LIBRARY(target source1...sourceN)
# This macro creates convenience library. The functionality is similar to 
# ADD_LIBRARY(target STATIC source1...sourceN), the difference is that resulting 
# library can always be linked to shared library
# 
# - MERGE_LIBRARIES(target [STATIC|SHARED|MODULE]  [linklib1 .... linklibN]
#  [EXPORTS exported_func1 .... exported_func_N]
#  [OUTPUT_NAME output_name]
# This macro merges several static libraries into a single one or creates a shared
# library from several convenience libraries

# Important global flags 
# - WITH_PIC : If set, it is assumed that everything is compiled as position
# independent code (that is CFLAGS/CMAKE_C_FLAGS contain -fPIC or equivalent)
# If defined, ADD_CONVENIENCE_LIBRARY does not add PIC flag to compile flags
#
# - DISABLE_SHARED: If set, it is assumed that shared libraries are not produced
# during the build. ADD_CONVENIENCE_LIBRARY does not add anything to compile flags


INCLUDE(CheckCCompilerFlag)

GET_FILENAME_COMPONENT(MYSQL_CMAKE_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
IF(WIN32 OR APPLE OR WITH_PIC OR DISABLE_SHARED OR NOT CMAKE_SHARED_LIBRARY_C_FLAGS)
 SET(_SKIP_PIC 1)
ENDIF()

INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/cmake_parse_arguments.cmake)
# CREATE_EXPORT_FILE (VAR target api_functions)
# Internal macro, used to create source file for shared libraries that 
# otherwise consists entirely of "convenience" libraries. On Windows, 
# also exports API functions as dllexport. On unix, creates a dummy file 
# that references all exports and this prevents linker from creating an 
# empty library(there are unportable alternatives, --whole-archive)
MACRO(CREATE_EXPORT_FILE VAR TARGET API_FUNCTIONS)
  IF(WIN32)
    SET(DUMMY ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_dummy.c)
    SET(EXPORTS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_exports.def)
    CONFIGURE_FILE_CONTENT("" ${DUMMY})
    SET(CONTENT "EXPORTS\n")
    FOREACH(FUNC ${API_FUNCTIONS})
      SET(CONTENT "${CONTENT} ${FUNC}\n")
    ENDFOREACH()
    CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS})
    SET(${VAR} ${DUMMY} ${EXPORTS})
  ELSE()
    SET(EXPORTS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_exports_file.cc)
    SET(CONTENT)
    FOREACH(FUNC ${API_FUNCTIONS})
      SET(CONTENT "${CONTENT} extern void* ${FUNC}\;\n")
    ENDFOREACH()
    SET(CONTENT "${CONTENT} void *${TARGET}_api_funcs[] = {\n")
    FOREACH(FUNC ${API_FUNCTIONS})
     SET(CONTENT "${CONTENT} &${FUNC},\n")
    ENDFOREACH()
    SET(CONTENT "${CONTENT} (void *)0\n}\;")
    CONFIGURE_FILE_CONTENT(${CONTENT} ${EXPORTS})
    SET(${VAR} ${EXPORTS})
  ENDIF()
ENDMACRO()


# MYSQL_ADD_CONVENIENCE_LIBRARY(name source1...sourceN)
# Create static library that can be linked to shared library.
# On systems that force position-independent code, adds -fPIC or 
# equivalent flag to compile flags.
MACRO(ADD_CONVENIENCE_LIBRARY)
  SET(TARGET ${ARGV0})
  SET(SOURCES ${ARGN})
  LIST(REMOVE_AT SOURCES 0)
  ADD_LIBRARY(${TARGET} STATIC ${SOURCES})
  IF(NOT _SKIP_PIC)
    SET_TARGET_PROPERTIES(${TARGET} PROPERTIES  COMPILE_FLAGS
    "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
  ENDIF()
ENDMACRO()


MACRO(ADD_CONVENIENCE_LIBRARY_DLL)
  SET(TARGET ${ARGV0})
  SET(SOURCES ${ARGN})
  LIST(REMOVE_AT SOURCES 0)
  ADD_LIBRARY(${TARGET} SHARED ${SOURCES})
  IF(NOT _SKIP_PIC)
    SET_TARGET_PROPERTIES(${TARGET} PROPERTIES  COMPILE_FLAGS
    "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
  ENDIF()
ENDMACRO()

# Write content to file, using CONFIGURE_FILE
# The advantage compared to FILE(WRITE) is that timestamp
# does not change if file already has the same content
MACRO(CONFIGURE_FILE_CONTENT content file)
 SET(CMAKE_CONFIGURABLE_FILE_CONTENT 
  "${content}\n")
 CONFIGURE_FILE(
  ${MYSQL_CMAKE_SCRIPT_DIR}/configurable_file_content.in
  ${file}
  @ONLY)
ENDMACRO()

# Merge static libraries into a big static lib. The resulting library 
# should not not have dependencies on other static libraries.
# We use it in MySQL to merge mysys,dbug,vio etc into mysqlclient

MACRO(MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
  # To produce a library we need at least one source file.
  # It is created by ADD_CUSTOM_COMMAND below and will
  # also help to track dependencies.
  SET(SOURCE_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_depends.cpp)
  ADD_LIBRARY(${TARGET} STATIC ${SOURCE_FILE})
  SET_TARGET_PROPERTIES(${TARGET} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME})

  SET(OSLIBS)
  FOREACH(LIB ${LIBS_TO_MERGE})
    GET_TARGET_PROPERTY(LIB_LOCATION ${LIB} LOCATION)
    GET_TARGET_PROPERTY(LIB_TYPE ${LIB} TYPE)
    IF(NOT LIB_LOCATION)
       # 3rd party library like libz.so. Make sure that everything
       # that links to our library links to this one as well.
       LIST(APPEND OSLIBS ${LIB})
    ELSE()
      # This is a target in current project
      # (can be a static or shared lib)
      IF(LIB_TYPE STREQUAL "STATIC_LIBRARY")
        SET(STATIC_LIBS ${STATIC_LIBS} ${LIB_LOCATION})
        ADD_DEPENDENCIES(${TARGET} ${LIB})
        # Extract dependend OS libraries
        GET_DEPENDEND_OS_LIBS(${LIB} LIB_OSLIBS)
        LIST(APPEND OSLIBS ${LIB_OSLIBS})
      ELSE()
        # This is a shared library our static lib depends on.
        LIST(APPEND OSLIBS ${LIB})
      ENDIF()
    ENDIF()
  ENDFOREACH()

  IF(OSLIBS)
    LIST(REMOVE_DUPLICATES OSLIBS)
    TARGET_LINK_LIBRARIES(${TARGET} ${OSLIBS})
    MESSAGE(STATUS "Library ${TARGET} depends on OSLIBS ${OSLIBS}")
  ENDIF()

  IF(STATIC_LIBS)
    LIST(REMOVE_DUPLICATES STATIC_LIBS)
  ENDIF()

  # Make the generated dummy source file depended on all static input
  # libs. If input lib changes,the source file is touched
  # which causes the desired effect (relink).
  ADD_CUSTOM_COMMAND( 
    OUTPUT  ${SOURCE_FILE}
    COMMAND ${CMAKE_COMMAND}  -E touch ${SOURCE_FILE}
    DEPENDS ${STATIC_LIBS})

  IF(MSVC)
    # To merge libs, just pass them to lib.exe command line.
    SET(LINKER_EXTRA_FLAGS "")
    FOREACH(LIB ${STATIC_LIBS})
      SET(LINKER_EXTRA_FLAGS "${LINKER_EXTRA_FLAGS} ${LIB}")
    ENDFOREACH()
    SET_TARGET_PROPERTIES(${TARGET} PROPERTIES STATIC_LIBRARY_FLAGS 
      "${LINKER_EXTRA_FLAGS}")
  ELSE()
    GET_TARGET_PROPERTY(TARGET_LOCATION ${TARGET} LOCATION)  
    IF(APPLE)
      # Use OSX's libtool to merge archives (ihandles universal 
      # binaries properly)
      ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD
        COMMAND rm ${TARGET_LOCATION}
        COMMAND /usr/bin/libtool -static -o ${TARGET_LOCATION} 
        ${STATIC_LIBS}
      )  
    ELSE()
      # Generic Unix or MinGW. In post-build step, call
      # script, that extracts objects from archives with "ar x" 
      # and repacks them with "ar r"
      SET(TARGET ${TARGET})
      CONFIGURE_FILE(
        ${MYSQL_CMAKE_SCRIPT_DIR}/merge_archives_unix.cmake.in
        ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake 
        @ONLY
      )
      ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD
        COMMAND rm ${TARGET_LOCATION}
        COMMAND ${CMAKE_COMMAND} -P 
        ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake
      )
    ENDIF()
  ENDIF()
ENDMACRO()

# Create libs from libs.
# Merges static libraries, creates shared libraries out of convenience libraries.
# MERGE_LIBRARIES(target [STATIC|SHARED|MODULE] 
#  [linklib1 .... linklibN]
#  [EXPORTS exported_func1 .... exportedFuncN]
#  [OUTPUT_NAME output_name]
#)
MACRO(MERGE_LIBRARIES)
  MYSQL_PARSE_ARGUMENTS(ARG
    "EXPORTS;OUTPUT_NAME;COMPONENT"
    "STATIC;SHARED;MODULE;NOINSTALL"
    ${ARGN}
  )
  LIST(GET ARG_DEFAULT_ARGS 0 TARGET) 
  SET(LIBS ${ARG_DEFAULT_ARGS})
  LIST(REMOVE_AT LIBS 0)
  IF(ARG_STATIC)
    IF (NOT ARG_OUTPUT_NAME)
      SET(ARG_OUTPUT_NAME ${TARGET})
    ENDIF()
    MERGE_STATIC_LIBS(${TARGET} ${ARG_OUTPUT_NAME} "${LIBS}") 
  ELSEIF(ARG_SHARED OR ARG_MODULE)
    IF(ARG_SHARED)
      SET(LIBTYPE SHARED)
    ELSE()
      SET(LIBTYPE MODULE)
    ENDIF()
    # check for non-PIC libraries
    IF(NOT _SKIP_PIC)
      FOREACH(LIB ${LIBS})
        GET_TARGET_PROPERTY(${LIB} TYPE LIBTYPE)
        IF(LIBTYPE STREQUAL "STATIC_LIBRARY")
          GET_TARGET_PROPERTY(LIB COMPILE_FLAGS LIB_COMPILE_FLAGS)
          STRING(REPLACE "${CMAKE_SHARED_LIBRARY_C_FLAGS}" 
          "<PIC_FLAG>" LIB_COMPILE_FLAGS ${LIB_COMPILE_FLAG})
          IF(NOT LIB_COMPILE_FLAGS MATCHES "<PIC_FLAG>")
            MESSAGE(FATAL_ERROR 
            "Attempted to link non-PIC static library ${LIB} to shared library ${TARGET}\n"
            "Please use ADD_CONVENIENCE_LIBRARY, instead of ADD_LIBRARY for ${LIB}"
            )
          ENDIF()
        ENDIF()
      ENDFOREACH()
    ENDIF()
    CREATE_EXPORT_FILE(SRC ${TARGET} "${ARG_EXPORTS}")
    IF(NOT ARG_NOINSTALL)
      ADD_VERSION_INFO(${TARGET} SHARED SRC)
    ENDIF()
    ADD_LIBRARY(${TARGET} ${LIBTYPE} ${SRC})
    TARGET_LINK_LIBRARIES(${TARGET} ${LIBS})
    IF(ARG_OUTPUT_NAME)
      SET_TARGET_PROPERTIES(${TARGET} PROPERTIES OUTPUT_NAME "${ARG_OUTPUT_NAME}")
    ENDIF()
  ELSE()
    MESSAGE(FATAL_ERROR "Unknown library type")
  ENDIF()
  IF(NOT ARG_NOINSTALL)
    IF(ARG_COMPONENT)
      SET(COMP COMPONENT ${ARG_COMPONENT}) 
    ENDIF()
    MYSQL_INSTALL_TARGETS(${TARGET} DESTINATION "${INSTALL_LIBDIR}" ${COMP})
  ENDIF()
  SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_INTERFACE_LIBRARIES "")
ENDMACRO()

FUNCTION(GET_DEPENDEND_OS_LIBS target result)
  SET(deps ${${target}_LIB_DEPENDS})
  IF(deps)
   FOREACH(lib ${deps})
    # Filter out keywords for used for debug vs optimized builds
    IF(NOT lib MATCHES "general" AND NOT lib MATCHES "debug" AND NOT lib MATCHES "optimized")
      GET_TARGET_PROPERTY(lib_location ${lib} LOCATION)
      IF(NOT lib_location)
        SET(ret ${ret} ${lib})
      ENDIF()
    ENDIF()
   ENDFOREACH()
  ENDIF()
  SET(${result} ${ret} PARENT_SCOPE)
ENDFUNCTION()

# We try to hide the symbols in yassl/zlib to avoid name clashes with
# other libraries like openssl.
FUNCTION(RESTRICT_SYMBOL_EXPORTS target)
  IF(CMAKE_COMPILER_IS_GNUCXX AND UNIX)
    SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror")
    CHECK_C_COMPILER_FLAG("-fvisibility=hidden" HAVE_VISIBILITY_HIDDEN)
    IF(HAVE_VISIBILITY_HIDDEN)
      GET_TARGET_PROPERTY(COMPILE_FLAGS ${target} COMPILE_FLAGS)
      IF(NOT COMPILE_FLAGS)
        # Avoid COMPILE_FLAGS-NOTFOUND
        SET(COMPILE_FLAGS)
      ENDIF()
      SET_TARGET_PROPERTIES(${target} PROPERTIES 
        COMPILE_FLAGS "${COMPILE_FLAGS} -fvisibility=hidden")
    ENDIF()
  ENDIF()
ENDFUNCTION()


================================================
FILE: cmake/mysqlx_protobuf.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

IF(MSVC)
  SET(MYSQLX_PROTOBUF_MSVC_DISABLED_WARNINGS "/wd4267 /wd4244")
ENDIF()

# Standard PROTOBUF_GENERATE_CPP modified to generate both
# protobuf and protobuf-lite C++ files.
FUNCTION(MYSQLX_PROTOBUF_GENERATE_CPP SRCS HDRS)
  IF(NOT ARGN)
    MESSAGE(SEND_ERROR
      "Error: MYSQLX_PROTOBUF_GENERATE_CPP() called without any proto files")
    RETURN()
  ENDIF()

  SET(${SRCS})
  SET(${HDRS})
  FOREACH(FIL ${ARGN})
    GET_FILENAME_COMPONENT(ABS_FIL ${FIL} ABSOLUTE)
    GET_FILENAME_COMPONENT(FIL_WE ${FIL} NAME_WE)

    LIST(APPEND ${SRCS} "${PROJECT_BINARY_DIR}/generated/protobuf/${FIL_WE}.pb.cc")
    LIST(APPEND ${HDRS} "${PROJECT_BINARY_DIR}/generated/protobuf/${FIL_WE}.pb.h")

    ADD_CUSTOM_COMMAND(
      OUTPUT "${PROJECT_BINARY_DIR}/generated/protobuf/${FIL_WE}.pb.cc"
             "${PROJECT_BINARY_DIR}/generated/protobuf/${FIL_WE}.pb.h"
      COMMAND ${CMAKE_COMMAND}
              -E make_directory "${PROJECT_BINARY_DIR}/generated/protobuf"
      COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
      ARGS --cpp_out=dllexport_decl=X_PROTOCOL_API:${PROJECT_BINARY_DIR}/generated/protobuf
              -I "${PROTOBUF_MYSQLX_DIR}" -I "${PROTOBUF_INCLUDE_DIR}" ${ABS_FIL}
      DEPENDS ${ABS_FIL} ${PROTOBUF_PROTOC_EXECUTABLE}
      COMMENT "Running C++ protocol buffer compiler on ${FIL}"
      VERBATIM)
  ENDFOREACH()

  SET_SOURCE_FILES_PROPERTIES(
    ${${SRCS}} ${${HDRS}}
    PROPERTIES GENERATED TRUE)

  IF(MSVC)
    ADD_COMPILE_FLAGS(${${SRCS}}
      COMPILE_FLAGS ${MYSQLX_PROTOBUF_MSVC_DISABLED_WARNINGS})
  ENDIF()

  SET(${SRCS} ${${SRCS}} PARENT_SCOPE)
  SET(${HDRS} ${${HDRS}} PARENT_SCOPE)
ENDFUNCTION()



================================================
FILE: cmake/packaging.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA


if(NOT WIN32)
  set(CPACK_PACKAGE_NAME "mysql-router")
else()
  set(CPACK_PACKAGE_NAME "MySQL Router")
endif()


if(NOT GPL)
  MakeNonGPLPackageName(CPACK_PACKAGE_NAME)
endif()
set(CPACK_PACKAGE_VENDOR "Oracle")
set(CPACK_PACKAGE_CONTACT "MySQL Release Engineering <mysql-build@oss.oracle.com>")

set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION_TEXT})
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})

set(EXTRA_NAME_SUFFIX "" CACHE STRING "Extra text in package name")

if(WIN32)
  include(CheckTypeSize)
  if(CMAKE_SIZEOF_VOID_P MATCHES 8)
    set(CPACK_SYSTEM_NAME "windows-x86-64bit")
  else()
    set(CPACK_SYSTEM_NAME "windows-x86-32bit")
  endif()
  set(CPACK_PACKAGE_FILE_NAME "mysql-router${EXTRA_NAME_SUFFIX}-${CPACK_PACKAGE_VERSION}${PROJECT_PACKAGE_EXTRAS}-${CPACK_SYSTEM_NAME}")
endif()

#
# Source Distribution
#
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.txt")
set(CPACK_SOURCE_GENERATOR "ZIP;TGZ")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}${PROJECT_PACKAGE_EXTRAS}")

# We ignore all files in the root of the repository and then
# exclude from the list which we want to keep.
file(GLOB cpack_source_ignore_files "${PROJECT_SOURCE_DIR}/*")
set(src_dir ${PROJECT_SOURCE_DIR})
set(source_include
  "${src_dir}/cmake"
  "${src_dir}/include"
  "${src_dir}/doc"
  "${src_dir}/ext"
  "${src_dir}/src"
  "${src_dir}/tests"
  "${src_dir}/tools"
  "${src_dir}/packaging"
  "${src_dir}/CMakeLists.txt"
  "${src_dir}/config.h.in"
  "${src_dir}/README.txt"
  "${src_dir}/License.txt")
list(REMOVE_ITEM cpack_source_ignore_files ${source_include})
list(APPEND cpack_source_ignore_files "${src_dir}/harness/.gitignore")

# We need to escape the dots
string(REPLACE "." "\\\\." cpack_source_ignore_files "${cpack_source_ignore_files}")

set(CPACK_SOURCE_IGNORE_FILES "${cpack_source_ignore_files}")

include(CPack)

#
# RPM-based
#
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
  add_subdirectory("${PROJECT_SOURCE_DIR}/packaging/rpm-oel")
endif()

#
# MSI for Windows
#
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
  add_subdirectory("${PROJECT_SOURCE_DIR}/packaging/WiX")
endif()


================================================
FILE: cmake/platform.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# Figure out a nice name for Platform and Architecture
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  string(SUBSTRING ${CMAKE_SYSTEM} 7 2 DARWIN_VERSION)
  if(DARWIN_VERSION STREQUAL "17")
    set(PLATFORM_NAME "OS X v10.13")
  elseif(DARWIN_VERSION STREQUAL "16")
    set(PLATFORM_NAME "OS X v10.12")
  elseif(DARWIN_VERSION STREQUAL "15")
    set(PLATFORM_NAME "OS X v10.11")
  elseif(DARWIN_VERSION STREQUAL "14")
    set(PLATFORM_NAME "OS X v10.10")
  elseif(DARWIN_VERSION STREQUAL "13")
    set(PLATFORM_NAME "OS X v10.9")
  else()
    message(FATAL_ERROR "Unsupported version of MacOS X")
  endif()
  set(RPATH_ORIGIN "@loader_path")
  set(CMAKE_INSTALL_NAME_DIR "@rpath")
elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN")
  set(RPATH_ORIGIN "\$ORIGIN")
  set(PLATFORM_NAME "Windows/Cygwin")
else()
  set(RPATH_ORIGIN "\$ORIGIN")
  set(PLATFORM_NAME ${CMAKE_SYSTEM_NAME})
endif()

# Whether we deal with 32 or 64 CPU architecture/compiler
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  set(ARCH_64BIT 1)
else()
  set(ARCH_64BIT 0)
endif()


================================================
FILE: cmake/protobuf.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

#
# Usage:
#
#  cmake -DWITH_PROTOBUF="bundled"|"system"
#
#  Default is "bundled"
#  Other values will be ignored, and we fall back to "bundled"
#

MACRO(RESET_PROTOBUF_VARIABLES)
  UNSET(PROTOBUF_INCLUDE_DIR CACHE)
  UNSET(PROTOBUF_INCLUDE_DIR)
  UNSET(PROTOBUF_INCLUDE_DIRS CACHE)
  UNSET(PROTOBUF_INCLUDE_DIRS)
  UNSET(PROTOBUF_LIBRARIES CACHE)
  UNSET(PROTOBUF_LIBRARIES)
  UNSET(PROTOBUF_LIBRARY CACHE)
  UNSET(PROTOBUF_LIBRARY)
  UNSET(PROTOBUF_LITE_LIBRARY CACHE)
  UNSET(PROTOBUF_LITE_LIBRARY)
  UNSET(PROTOBUF_PROTOC_EXECUTABLE CACHE)
  UNSET(PROTOBUF_PROTOC_EXECUTABLE)
ENDMACRO()

MACRO(ECHO_PROTOBUF_VARIABLES)
  MESSAGE(STATUS "PROTOBUF_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIR}")
  MESSAGE(STATUS "PROTOBUF_LIBRARY ${PROTOBUF_LIBRARY}")
  MESSAGE(STATUS "PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE}")
ENDMACRO()

MACRO(COULD_NOT_FIND_PROTOBUF)
  ECHO_PROTOBUF_VARIABLES()
  MESSAGE(STATUS "Could not find (the correct version of) protobuf.")
  MESSAGE(STATUS "MySQL currently requires at least protobuf version 2.5")
  MESSAGE(FATAL_ERROR
    "You can build with the bundled sources"
    )
ENDMACRO()

SET(BUNDLED_PROTO_SRCDIR ${MySQLRouter_SOURCE_DIR}/ext/protobuf/protobuf-3.0.0/src)

MACRO(MYSQL_USE_BUNDLED_PROTOBUF)
  SET(WITH_PROTOBUF "bundled" CACHE INTERNAL
    "Bundled protoc and protobuf library")
  # Set the same variables as FindProtobuf.cmake
  SET(PROTOBUF_FOUND 1 CACHE INTERNAL "")
  SET(PROTOBUF_INCLUDE_DIR ${BUNDLED_PROTO_SRCDIR} CACHE INTERNAL "")
  SET(PROTOBUF_INCLUDE_DIRS ${BUNDLED_PROTO_SRCDIR} CACHE INTERNAL "")
  SET(PROTOBUF_LIBRARY libprotobuf_3_0 CACHE INTERNAL "")
  SET(PROTOBUF_LIBRARIES libprotobuf_3_0 CACHE INTERNAL "")
  SET(PROTOBUF_PROTOC_EXECUTABLE protoc_3_0 CACHE INTERNAL "")
  SET(PROTOBUF_PROTOC_LIBRARY protoclib_3_0 CACHE INTERNAL "")
  SET(PROTOBUF_LITE_LIBRARY protobuf-lite CACHE INTERNAL "")
  ADD_SUBDIRECTORY(ext/protobuf)
ENDMACRO()

MACRO(MYSQL_CHECK_PROTOBUF)
  IF (NOT WITH_PROTOBUF OR
      NOT WITH_PROTOBUF STREQUAL "system")
    SET(WITH_PROTOBUF "bundled")
  ENDIF()
  MESSAGE(STATUS "WITH_PROTOBUF=${WITH_PROTOBUF}")
  IF(WITH_PROTOBUF STREQUAL "bundled")
    MYSQL_USE_BUNDLED_PROTOBUF()
  ELSE()
    FIND_PACKAGE(Protobuf)
  ENDIF()

  IF(NOT PROTOBUF_FOUND)
    MESSAGE(WARNING "Protobuf could not be found")
  ENDIF()

  IF(PROTOBUF_FOUND)
    # Verify protobuf version number. Version information looks like:
    # // The current version, represented as a single integer to make comparison
    # // easier:  major * 10^6 + minor * 10^3 + micro
    # #define GOOGLE_PROTOBUF_VERSION 3000000
    FILE(STRINGS "${PROTOBUF_INCLUDE_DIR}/google/protobuf/stubs/common.h"
      PROTOBUF_VERSION_NUMBER
      REGEX "^#define[\t ]+GOOGLE_PROTOBUF_VERSION[\t ][0-9]+.*"
      )
    STRING(REGEX REPLACE
      "^.*GOOGLE_PROTOBUF_VERSION[\t ]([0-9])[0-9][0-9]([0-9])[0-9][0-9].*$"
      "\\1"
      PROTOBUF_MAJOR_VERSION "${PROTOBUF_VERSION_NUMBER}")
    STRING(REGEX REPLACE
      "^.*GOOGLE_PROTOBUF_VERSION[\t ]([0-9])[0-9][0-9]([0-9])[0-9][0-9].*$"
      "\\2"
      PROTOBUF_MINOR_VERSION "${PROTOBUF_VERSION_NUMBER}")

    MESSAGE(STATUS
      "protobuf version is ${PROTOBUF_MAJOR_VERSION}.${PROTOBUF_MINOR_VERSION}")

    IF("${PROTOBUF_MAJOR_VERSION}.${PROTOBUF_MINOR_VERSION}" VERSION_LESS "2.5")
      COULD_NOT_FIND_PROTOBUF()
    ENDIF()
  ENDIF()
ENDMACRO()


================================================
FILE: cmake/settings.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# Settings for building MySQL Router

# General
set(MYSQL_ROUTER_TARGET "mysqlrouter"
  CACHE STRING "Name of the MySQL Router application")  # Also used in CMAKE_INSTALL_PREFIX
set(MYSQL_ROUTER_NAME "MySQL Router"
  CACHE STRING "MySQL Router project name")
set(MYSQL_ROUTER_INI "mysqlrouter.conf"
  CACHE STRING "Name of default configuration file")

# Command line options for CMake
option(ENABLE_TESTS "Enable Tests" NO)
option(WITH_STATIC "Enable static linkage of external libraries" NO)
option(GPL "Produce GNU GPLv2 source and binaries" YES)

IF(MYSQL_SERVER_SUFFIX STREQUAL "-enterprise-commercial-advanced" OR DEB_PRODUCT STREQUAL "commercial")
  # if the server's cmake options for 'commercial' builds are set, use them.
  SET(GPL 0)
ENDIF()

# MySQL Harness
set(HARNESS_NAME "mysqlrouter" CACHE STRING "Name of Harness")


================================================
FILE: cmake/ssl.cmake
================================================
# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# We support different versions of SSL:
# - "bundled" uses source code in <source dir>/ext/yassl
# - "system"  (typically) uses headers/libraries in /usr/lib and /usr/lib64
# - a custom installation of openssl can be used like this
#     - cmake -DCMAKE_PREFIX_PATH=</path/to/custom/openssl> -DWITH_SSL="system"
#   or
#     - cmake -DWITH_SSL=</path/to/custom/openssl>
#
# The default value for WITH_SSL is "bundled"
# set in cmake/build_configurations/feature_set.cmake
#
# For custom build/install of openssl, see the accompanying README and
# INSTALL* files. When building with gcc, you must build the shared libraries
# (in addition to the static ones):
#   ./config --prefix=</path/to/custom/openssl> --shared; make; make install
# On some platforms (mac) you need to choose 32/64 bit architecture.
# Build/Install of openssl on windows is slightly different: you need to run
# perl and nmake. You might also need to
#   'set path=</path/to/custom/openssl>\bin;%PATH%
# in order to find the .dll files at runtime.

SET(WITH_SSL_DOC "bundled (use yassl)")
SET(WITH_SSL_DOC
  "${WITH_SSL_DOC}, yes (prefer os library if present, otherwise use bundled)")
SET(WITH_SSL_DOC
  "${WITH_SSL_DOC}, system (use os library)")
SET(WITH_SSL_DOC
  "${WITH_SSL_DOC}, </path/to/custom/installation>")

MACRO (CHANGE_SSL_SETTINGS string)
  SET(WITH_SSL ${string} CACHE STRING ${WITH_SSL_DOC} FORCE)
ENDMACRO()

MACRO (MYSQL_USE_BUNDLED_SSL)
  IF (NOT TARGET yassl)
    SET(INC_DIRS
      ${PROJECT_SOURCE_DIR}/ext/yassl/include
      ${PROJECT_SOURCE_DIR}/ext/yassl/taocrypt/include
    )
    SET(SSL_LIBRARIES  router_yassl router_taocrypt)
    IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
      SET(SSL_LIBRARIES ${SSL_LIBRARIES} ${LIBSOCKET})
    ENDIF()
    SET(SSL_INCLUDE_DIRS ${INC_DIRS})
    SET(SSL_INTERNAL_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/ext/yassl/taocrypt/mySTL)
    SET(SSL_DEFINES "-DHAVE_YASSL -DYASSL_PREFIX -DHAVE_OPENSSL -DMULTI_THREADED")
    CHANGE_SSL_SETTINGS("bundled")
    ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/ext/yassl)
    GET_TARGET_PROPERTY(src router_yassl SOURCES)
    FOREACH(file ${src})
      SET(SSL_SOURCES ${SSL_SOURCES} ${PROJECT_SOURCE_DIR}/ext/yassl/${file})
    ENDFOREACH()
    GET_TARGET_PROPERTY(src router_taocrypt SOURCES)
    FOREACH(file ${src})
      SET(SSL_SOURCES ${SSL_SOURCES}
        ${PROJECT_SOURCE_DIR}/ext/yassl/taocrypt/${file})
    ENDFOREACH()
  ENDIF()
ENDMACRO()

# MYSQL_CHECK_SSL
#
# Provides the following configure options:
# WITH_SSL=[yes|bundled|system|<path/to/custom/installation>]
MACRO (MYSQL_CHECK_SSL)
  IF(NOT WITH_SSL)
   IF(WIN32)
     CHANGE_SSL_SETTINGS("bundled")
   ENDIF()
  ENDIF()

  # See if WITH_SSL is of the form </path/to/custom/installation>
  FILE(GLOB WITH_SSL_HEADER ${WITH_SSL}/include/openssl/ssl.h)
  IF (WITH_SSL_HEADER)
    SET(WITH_SSL_PATH ${WITH_SSL} CACHE PATH "path to custom SSL installation")
  ENDIF()

  IF(WITH_SSL STREQUAL "bundled")
    MYSQL_USE_BUNDLED_SSL()
    # Reset some variables, in case we switch from /path/to/ssl to "bundled".
    IF (WITH_SSL_PATH)
      UNSET(WITH_SSL_PATH)
      UNSET(WITH_SSL_PATH CACHE)
    ENDIF()
    IF (OPENSSL_ROOT_DIR)
      UNSET(OPENSSL_ROOT_DIR)
      UNSET(OPENSSL_ROOT_DIR CACHE)
    ENDIF()
    IF (OPENSSL_INCLUDE_DIR)
      UNSET(OPENSSL_INCLUDE_DIR)
      UNSET(OPENSSL_INCLUDE_DIR CACHE)
    ENDIF()
    IF (WIN32 AND OPENSSL_APPLINK_C)
      UNSET(OPENSSL_APPLINK_C)
      UNSET(OPENSSL_APPLINK_C CACHE)
    ENDIF()
    IF (OPENSSL_LIBRARY)
      UNSET(OPENSSL_LIBRARY)
      UNSET(OPENSSL_LIBRARY CACHE)
    ENDIF()
    IF (CRYPTO_LIBRARY)
      UNSET(CRYPTO_LIBRARY)
      UNSET(CRYPTO_LIBRARY CACHE)
    ENDIF()
  ELSEIF(WITH_SSL STREQUAL "system" OR
         WITH_SSL STREQUAL "yes" OR
         WITH_SSL_PATH
         )
    # First search in WITH_SSL_PATH.
    FIND_PATH(OPENSSL_ROOT_DIR
      NAMES include/openssl/ssl.h
      NO_CMAKE_PATH
      NO_CMAKE_ENVIRONMENT_PATH
      HINTS ${WITH_SSL_PATH}
    )
    # Then search in standard places (if not found above).
    FIND_PATH(OPENSSL_ROOT_DIR
      NAMES include/openssl/ssl.h
    )

    FIND_PATH(OPENSSL_INCLUDE_DIR
      NAMES openssl/ssl.h
      HINTS ${OPENSSL_ROOT_DIR}/include
    )

    IF (WIN32)
      FIND_FILE(OPENSSL_APPLINK_C
        NAMES openssl/applink.c
        HINTS ${OPENSSL_ROOT_DIR}/include
      )
      MESSAGE(STATUS "OPENSSL_APPLINK_C ${OPENSSL_APPLINK_C}")
    ENDIF()

    # On mac this list is <.dylib;.so;.a>
    # We prefer static libraries, so we revert it here.
    IF (WITH_SSL_PATH)
      LIST(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
      MESSAGE(STATUS "suffixes <${CMAKE_FIND_LIBRARY_SUFFIXES}>")
    ENDIF()
    FIND_LIBRARY(OPENSSL_LIBRARY
                 NAMES ssl ssleay32 ssleay32MD
                 HINTS ${OPENSSL_ROOT_DIR}/lib)
    FIND_LIBRARY(CRYPTO_LIBRARY
                 NAMES crypto libeay32
                 HINTS ${OPENSSL_ROOT_DIR}/lib)
    IF (WITH_SSL_PATH)
      LIST(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
    ENDIF()

    # Verify version number. Version information looks like:
    #   #define OPENSSL_VERSION_NUMBER 0x1000103fL
    # Encoded as MNNFFPPS: major minor fix patch status
    FILE(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h"
      OPENSSL_VERSION_NUMBER
      REGEX "^#[ ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x[0-9].*"
    )
    STRING(REGEX REPLACE
      "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9]).*$" "\\1"
      OPENSSL_MAJOR_VERSION "${OPENSSL_VERSION_NUMBER}"
    )

    IF(OPENSSL_INCLUDE_DIR AND
       OPENSSL_LIBRARY   AND
       CRYPTO_LIBRARY      AND
       OPENSSL_MAJOR_VERSION STREQUAL "1"
      )
      SET(OPENSSL_FOUND TRUE)
    ELSE()
      SET(OPENSSL_FOUND FALSE)
    ENDIF()

    # If we are invoked with -DWITH_SSL=/path/to/custom/openssl
    # and we have found static libraries, then link them statically
    # into our executables and libraries.
    # Adding IMPORTED_LOCATION allows MERGE_STATIC_LIBS
    # to get LOCATION and do correct dependency analysis.
    SET(MY_CRYPTO_LIBRARY "${CRYPTO_LIBRARY}")
    SET(MY_OPENSSL_LIBRARY "${OPENSSL_LIBRARY}")
    IF (WITH_SSL_PATH AND NOT TARGET imported_crypto)
      GET_FILENAME_COMPONENT(CRYPTO_EXT "${CRYPTO_LIBRARY}" EXT)
      GET_FILENAME_COMPONENT(OPENSSL_EXT "${OPENSSL_LIBRARY}" EXT)
      IF (CRYPTO_EXT STREQUAL ".a")
        SET(MY_CRYPTO_LIBRARY imported_crypto)
        ADD_LIBRARY(imported_crypto STATIC IMPORTED)
        SET_TARGET_PROPERTIES(imported_crypto
          PROPERTIES IMPORTED_LOCATION "${CRYPTO_LIBRARY}")
      ENDIF()
      IF (OPENSSL_EXT STREQUAL ".a")
        SET(MY_OPENSSL_LIBRARY imported_openssl)
        ADD_LIBRARY(imported_openssl STATIC IMPORTED)
        SET_TARGET_PROPERTIES(imported_openssl
          PROPERTIES IMPORTED_LOCATION "${OPENSSL_LIBRARY}")
      ENDIF()
    ENDIF()

    MESSAGE(STATUS "OPENSSL_INCLUDE_DIR = ${OPENSSL_INCLUDE_DIR}")
    MESSAGE(STATUS "OPENSSL_LIBRARY = ${OPENSSL_LIBRARY}")
    MESSAGE(STATUS "CRYPTO_LIBRARY = ${CRYPTO_LIBRARY}")
    MESSAGE(STATUS "OPENSSL_MAJOR_VERSION = ${OPENSSL_MAJOR_VERSION}")

    INCLUDE(CheckSymbolExists)
    SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
    CHECK_SYMBOL_EXISTS(SHA512_DIGEST_LENGTH "openssl/sha.h"
                        HAVE_SHA512_DIGEST_LENGTH)
    IF(OPENSSL_FOUND AND HAVE_SHA512_DIGEST_LENGTH)
      SET(SSL_SOURCES "")
      SET(SSL_LIBRARIES ${MY_OPENSSL_LIBRARY} ${MY_CRYPTO_LIBRARY})
      IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
        SET(SSL_LIBRARIES ${SSL_LIBRARIES} ${LIBSOCKET})
      ENDIF()
      IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
        SET(SSL_LIBRARIES ${SSL_LIBRARIES})
        SET(SSL_LIBRARIES_DL ${LIBDL})
      ENDIF()
      MESSAGE(STATUS "SSL_LIBRARIES = ${SSL_LIBRARIES}")
      SET(SSL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
      SET(SSL_INTERNAL_INCLUDE_DIRS "")
      SET(SSL_DEFINES "-DHAVE_OPENSSL")
    ELSE()

      UNSET(WITH_SSL_PATH)
      UNSET(WITH_SSL_PATH CACHE)
      UNSET(OPENSSL_ROOT_DIR)
      UNSET(OPENSSL_ROOT_DIR CACHE)
      UNSET(OPENSSL_INCLUDE_DIR)
      UNSET(OPENSSL_INCLUDE_DIR CACHE)
      UNSET(OPENSSL_APPLINK_C)
      UNSET(OPENSSL_APPLINK_C CACHE)
      UNSET(OPENSSL_LIBRARY)
      UNSET(OPENSSL_LIBRARY CACHE)
      UNSET(CRYPTO_LIBRARY)
      UNSET(CRYPTO_LIBRARY CACHE)

      MESSAGE(SEND_ERROR
        "Cannot find appropriate system libraries for SSL. "
        "Make sure you've specified a supported SSL version. "
        "Consult the documentation for WITH_SSL alternatives")
    ENDIF()
  ELSE()
    MESSAGE(SEND_ERROR
      "Wrong option or path for WITH_SSL. "
      "Valid options are : ${WITH_SSL_DOC}")
  ENDIF()
ENDMACRO()


# Many executables will depend on libeay32.dll and ssleay32.dll at runtime.
# In order to ensure we find the right version(s), we copy them into
# the same directory as the executables.
# NOTE: Using dlls will likely crash in malloc/free,
#       see INSTALL.W32 which comes with the openssl sources.
# So we should be linking static versions of the libraries.
MACRO (COPY_OPENSSL_DLLS target_name out_dir)
  IF (WIN32 AND WITH_SSL_PATH)
    GET_FILENAME_COMPONENT(CRYPTO_NAME "${CRYPTO_LIBRARY}" NAME_WE)
    GET_FILENAME_COMPONENT(OPENSSL_NAME "${OPENSSL_LIBRARY}" NAME_WE)
    FILE(GLOB HAVE_CRYPTO_DLL "${WITH_SSL_PATH}/bin/${CRYPTO_NAME}.dll")
    FILE(GLOB HAVE_OPENSSL_DLL "${WITH_SSL_PATH}/bin/${OPENSSL_NAME}.dll")
    IF (HAVE_CRYPTO_DLL AND HAVE_OPENSSL_DLL)
      ADD_CUSTOM_COMMAND(TARGET ${target_name} PRE_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
          "${WITH_SSL_PATH}/bin/${CRYPTO_NAME}.dll"
          "${out_dir}/${CRYPTO_NAME}.dll"
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
          "${WITH_SSL_PATH}/bin/${OPENSSL_NAME}.dll"
          "${out_dir}/${OPENSSL_NAME}.dll"
        )
    ENDIF()
  ENDIF()
ENDMACRO()


================================================
FILE: cmake/testing.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

set(_TEST_RUNTIME_DIR ${PROJECT_BINARY_DIR}/tests)

# We include GMock without touching the compile flags. GMock can
# handle that itself. It will also indirectly create targets for gmock
# and gtest.
#
# Two alternatives for locating GMock *source code*:
# 1. If WITH_GMOCK is given, this is expected to be the location of
#    the *source code*.
# 2. If WITH_GMOCK is not given, it will look in the 'ext' directory
#    in the source root.
if(ENABLE_TESTS)
  if(TARGET gmock)
    # don't build gmock, if the parent already built it

    # copying from unittest/gunit/CMakeFiles.txt
    # this should all be global-variables or a cmake/ file
    if(NOT DOWNLOAD_ROOT)
      set(DOWNLOAD_ROOT ${CMAKE_SOURCE_DIR}/source_downloads)
    endif()

    # We want googletest version 1.8, which also contains googlemock.
    set(GMOCK_PACKAGE_NAME "release-1.8.0")

    if(DEFINED ENV{WITH_GMOCK} AND NOT DEFINED WITH_GMOCK)
      file(TO_CMAKE_PATH "$ENV{WITH_GMOCK}" WITH_GMOCK)
    ENDIF()

    if(LOCAL_GMOCK_ZIP
       AND NOT ${LOCAL_GMOCK_ZIP} MATCHES ".*${GMOCK_PACKAGE_NAME}\\.zip")
     set(LOCAL_GMOCK_ZIP 0)
    endif()

    if(WITH_GMOCK)
      ## Did we get a full path name, including file name?
      if(${WITH_GMOCK} MATCHES ".*\\.zip")
        GET_FILENAME_COMPONENT(GMOCK_DIR ${WITH_GMOCK} PATH)
        GET_FILENAME_COMPONENT(GMOCK_ZIP ${WITH_GMOCK} NAME)
        FIND_FILE(LOCAL_GMOCK_ZIP
                  NAMES ${GMOCK_ZIP}
                  PATHS ${GMOCK_DIR}
                  NO_DEFAULT_PATH
                 )
      else()
        ## Did we get a path name to the directory of the .zip file?
        ## Check for both release-x.y.z.zip and googletest-release-x.y.z.zip
        FIND_FILE(LOCAL_GMOCK_ZIP
                  NAMES "${GMOCK_PACKAGE_NAME}.zip" "googletest-${GMOCK_PACKAGE_NAME}.zip"
                  PATHS ${WITH_GMOCK}
                  NO_DEFAULT_PATH
                  )
        ## If WITH_GMOCK is a directory, use it for download.
        set(DOWNLOAD_ROOT ${WITH_GMOCK})
      endif()
      MESSAGE(STATUS "Local gmock zip ${LOCAL_GMOCK_ZIP}")
    endif()

    set(GMOCK_SOURCE_DIR ${DOWNLOAD_ROOT}/googletest-${GMOCK_PACKAGE_NAME}/googlemock)
    set(GTEST_SOURCE_DIR ${DOWNLOAD_ROOT}/googletest-${GMOCK_PACKAGE_NAME}/googletest)

    # introduce some compat
    set(GTEST_INCLUDE_DIRS ${GMOCK_INCLUDE_DIRS})
    message("yyy seting GTEST_INCLUDE_DIRS to ${GTEST_INCLUDE_DIRS}")

    ADD_LIBRARY(gmock_main STATIC ${GMOCK_SOURCE_DIR}/src/gmock_main.cc)
    target_link_libraries(gmock_main gmock)
    target_include_directories(gmock_main
      PUBLIC ${GMOCK_INCLUDE_DIRS})
    ADD_LIBRARY(gtest_main STATIC ${GTEST_SOURCE_DIR}/src/gtest_main.cc)
    target_include_directories(gtest_main
      PUBLIC ${GMOCK_INCLUDE_DIRS})

    if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
      set_target_properties(gtest_main gmock_main
        PROPERTIES
        COMPILE_FLAGS "-Wno-undef -Wno-conversion")
    endif()

    set(TEST_LIBRARIES gmock gtest gmock_main gtest_main)
  else()
    if(WITH_GMOCK)

      # There is a known gtest/gmock bug that surfaces with the gcc-6.x causing tests crashes:
      # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833450
      # We have a patch for it in the gmock we bundle but if the user wants to use
      # it's own gtest/gmock we need to prevent it if the gcc-6.x is used
      if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
        AND (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "6.0" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "6.0"))
        message(FATAL_ERROR "Parameter WITH_GMOCK is not supported for gcc-6 or greater."
          "You need to either disable the tests or use the bundled gmock (removing WITH_GMOCK parameter).")
      endif()

      set(_gmock_root ${WITH_GMOCK})
      set(_gtest_root ${WITH_GMOCK}/gtest)
    elseif(EXISTS "${CMAKE_SOURCE_DIR}/ext/gmock/CMakeLists.txt")
      if(NOT EXISTS "${CMAKE_SOURCE_DIR}/ext/gtest/CMakeLists.txt")
        message(FATAL_ERROR "Cannot find GTest repository under ${CMAKE_SOURCE_DIR}/ext/gtest")
      endif()
      set(_gmock_root "${CMAKE_SOURCE_DIR}/ext/gmock")
      set(_gtest_root "${CMAKE_SOURCE_DIR}/ext/gtest")
    elseif(GMOCK_SOURCE_DIR)
      # means we are part of the server and GMOCK was downloaded
      set(_gmock_root ${GMOCK_SOURCE_DIR})
      set(_gtest_root ${GMOCK_SOURCE_DIR}/gtest)
    else()
      # means we are part of the server and GMOCK is missing
      # act as other server components, disable the tests
      SET (ENABLE_TESTS 0)
      SET (ENABLE_TESTS 0 PARENT_SCOPE)
    endif()

    if (ENABLE_TESTS)
      if(NOT EXISTS "${_gmock_root}/CMakeLists.txt")
        message(WARNING
          "Unable to find GMock source, not possible to build tests. Either "
          "disable tests with ENABLE_TESTS=no or download the source code "
          "for GMock (available at https://github.com/google/googlemock) and "
          "set WITH_GMOCK to the directory of the unpacked source code.")
      endif()

      message(STATUS "Found GMock source under ${_gmock_root}")
      add_subdirectory(${_gmock_root} ext/gmock)

      # Setting variables that are normally discovered using FindXXX.cmake
      set(GTEST_INCLUDE_DIRS ${_gtest_root}/include)
      message("yyy seting GTEST_INCLUDE_DIRS to ${GTEST_INCLUDE_DIRS}")
      set(GTEST_LIBRARIES gtest)
      set(GTEST_MAIN_LIBRARIES gtest_main)
      set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})

      set(GMOCK_INCLUDE_DIRS ${_gmock_root}/include)
      set(GMOCK_LIBRARIES gmock)
      set(GMOCK_MAIN_LIBRARIES gmock_main)
      set(GMOCK_BOTH_LIBRARIES ${GMOCK_LIBRARIES} ${GMOCK_MAIN_LIBRARIES})

      set(TEST_LIBRARIES ${GMOCK_BOTH_LIBRARIES} ${GTEST_BOTH_LIBRARIES})

      # Since GMock and GTest do not set
      # INTERFACE_SYSTEM_INCLUDE_DIRECTORIES, we do that here. This means
      # that any targets that reference one of these libraries will
      # "automatically" have the include directories for these libraries
      # added to their build flags.  We cannot use "SYSTEM" since that is
      # not available in 2.8.9 (it was introduced in 2.8.12).
      target_include_directories(gmock PUBLIC ${GMOCK_INCLUDE_DIRS})
      target_include_directories(gmock_main PUBLIC ${GMOCK_INCLUDE_DIRS})
      target_include_directories(gtest PUBLIC ${GTEST_INCLUDE_DIRS})
      target_include_directories(gtest_main PUBLIC ${GTEST_INCLUDE_DIRS})

      if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")

        set (comp_flags_ "-Wno-undef -Wno-missing-field-initializers")
        if(COMPILER_HAS_WARNING_MISSING_FORMAT_ATTRIBUTE)
          set(comp_flags_ "${comp_flags_} -Wno-missing-format-attribute")
        endif()

        set_target_properties(gtest gtest_main gmock gmock_main
          PROPERTIES
          COMPILE_FLAGS "${comp_flags_}")
      endif()
    endif()
  endif()
endif()

# Set {RUNTIME,LIBRARY}_OUTPUT_DIRECTORY properties of a target to the stage dir.
# On unix platforms this is just one directory, but on Windows it's per build-type,
# e.g. build/stage/Debug/lib, build/stage/Release/lib, etc
function(set_target_output_directory target target_output_directory dirname)
  if(NOT CMAKE_CFG_INTDIR STREQUAL ".")
    foreach(config_ ${CMAKE_CONFIGURATION_TYPES})
      string(TOUPPER ${config_} config__)
      set_property(TARGET ${target} PROPERTY
        ${target_output_directory}_${config__} ${MySQLRouter_BINARY_STAGE_DIR}/${config_}/${dirname})
    endforeach()
  else()
    set_property(TARGET ${target} PROPERTY
      ${target_output_directory} ${MySQLRouter_BINARY_STAGE_DIR}/${dirname})
  endif()
endfunction()

# Prepare staging area
foreach(dir etc;run;log;bin;lib)
  if(NOT CMAKE_CFG_INTDIR STREQUAL ".")
    foreach(config_ ${CMAKE_CONFIGURATION_TYPES})
      file(MAKE_DIRECTORY ${MySQLRouter_BINARY_STAGE_DIR}/${config_}/${dir})
    endforeach()
  else()
    file(MAKE_DIRECTORY ${MySQLRouter_BINARY_STAGE_DIR}/${dir})
  endif()
endforeach()

function(add_test_file FILE)
  set(one_value_args MODULE LABEL ENVIRONMENT)
  set(multi_value_args LIB_DEPENDS INCLUDE_DIRS)
  cmake_parse_arguments(TEST "" "${one_value_args}" "${multi_value_args}" ${ARGN})

  if(NOT TEST_MODULE)
    message(FATAL_ERROR "Module name missing for test file ${FILE}")
  endif()

  get_filename_component(test_ext ${FILE} EXT)
  get_filename_component(runtime_dir ${FILE} PATH)  # Not using DIRECTORY because of CMake >=2.8.11 requirement

  set(runtime_dir ${PROJECT_BINARY_DIR}/tests/${TEST_MODULE})

  if(test_ext STREQUAL ".cc")
    # Tests written in C++
    get_filename_component(test_target ${FILE} NAME_WE)
    string(REGEX REPLACE "^test_" "" test_target ${test_target})
    set(test_target "test_${TEST_MODULE}_${test_target}")
    set(test_name "tests/${TEST_MODULE}/${test_target}")
    add_executable(${test_target} ${FILE})
    target_link_libraries(${test_target}
      gtest gtest_main gmock gmock_main routertest_helpers
      router_lib harness-library
      ${CMAKE_THREAD_LIBS_INIT})
    foreach(libtarget ${TEST_LIB_DEPENDS})
      #add_dependencies(${test_target} ${libtarget})
      target_link_libraries(${test_target} ${libtarget})
    endforeach()
    foreach(include_dir ${TEST_INCLUDE_DIRS})
      target_include_directories(${test_target} PUBLIC ${include_dir})
    endforeach()
    set_target_properties(${test_target}
      PROPERTIES
      RUNTIME_OUTPUT_DIRECTORY ${runtime_dir}/)
    if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
      # silence undefined use of macro-vars in gtest.
      # we can't use #pragma's due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 to
      # supress it locally.
      set_target_properties(
        ${test_target}
        PROPERTIES
        COMPILE_FLAGS "-Wno-undef -Wno-conversion")
    endif()

    if(WITH_VALGRIND)
      FIND_PROGRAM(VALGRIND valgrind)
      SET(TEST_WRAPPER ${VALGRIND} --error-exitcode=1)
    endif()

    add_test(NAME ${test_name}
      COMMAND ${TEST_WRAPPER} $<TARGET_FILE:${test_target}> --gtest_output=xml:${runtime_dir}/${test_target}.xml)

    SET(TEST_ENV_PREFIX "STAGE_DIR=${MySQLRouter_BINARY_STAGE_DIR};CMAKE_SOURCE_DIR=${MySQLRouter_SOURCE_DIR};CMAKE_BINARY_DIR=${MySQLRouter_BINARY_DIR}")
    if(WITH_VALGRIND)
      SET(TEST_ENV_PREFIX "${TEST_ENV_PREFIX};WITH_VALGRIND=1")
    endif()

    if (WIN32)
      # PATH's separator ";" needs to be escaped as CMAKE's test-env is also separated by ; ...
      STRING(REPLACE ";" "\\;" ESC_ENV_PATH "$ENV{PATH}")

      ## win32 has single and multi-configuration builds
      set_tests_properties(${test_name} PROPERTIES
        ENVIRONMENT
        "${TEST_ENV_PREFIX};PATH=$<TARGET_FILE_DIR:harness-library>\;$<TARGET_FILE_DIR:mysqlrouter>\;$<TARGET_FILE_DIR:mysql_protocol>\;$<TARGET_FILE_DIR:http_common>\;$<TARGET_FILE_DIR:duktape>\;${ESC_ENV_PATH};${TEST_ENVIRONMENT}")
    else()
      set_tests_properties(${test_name} PROPERTIES
        ENVIRONMENT
        "${TEST_ENV_PREFIX};LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH};DYLD_LIBRARY_PATH=$ENV{DYLD_LIBRARY_PATH};${TEST_ENVIRONMENT}")
    endif()
  else()
    message(ERROR "Unknown test type; file '${FILE}'")
  endif()

endfunction(add_test_file)

function(add_test_dir DIR_NAME)
  set(one_value_args MODULE ENVIRONMENT)
  set(multi_value_args LIB_DEPENDS INCLUDE_DIRS)
  cmake_parse_arguments(TEST "" "${one_value_args}" "${multi_value_args}" ${ARGN})

  if(NOT TEST_MODULE)
    message(FATAL_ERROR "Module name missing for test folder ${DIR_NAME}")
  endif()

  get_filename_component(abs_path ${DIR_NAME} ABSOLUTE)

  file(GLOB test_files RELATIVE ${abs_path}
    ${abs_path}/*.cc)

  foreach(test_file ${test_files})
    if(NOT ${test_file} MATCHES "^helper")
      add_test_file(${abs_path}/${test_file}
        MODULE ${TEST_MODULE}
        ENVIRONMENT ${TEST_ENVIRONMENT}
        LIB_DEPENDS ${TEST_LIB_DEPENDS}
        INCLUDE_DIRS ${TEST_INCLUDE_DIRS}
        )
    endif()
  endforeach(test_file)

endfunction(add_test_dir)


================================================
FILE: cmake/version.cmake
================================================
# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# Version information of MySQL Router

# Project version, has to be an X.Y.Z number since it is used with the
# "project" CMake command
set(PROJECT_VERSION_TEXT "8.0.12")

# Can be arbitrary test that is added to the package file names after
# the version, but before the extensions.
set(PROJECT_PACKAGE_EXTRAS "")

set(PROJECT_EDITION "GPL community edition" CACHE STRING
  "Edition of MySQL Router")

# create a string that is allowed in a RPM spec "release" field
set(RPM_EXTRA_VERSION "${PROJECT_PACKAGE_EXTRAS}")
if(RPM_EXTRA_VERSION)
  string(REGEX REPLACE "[^A-Za-z0-9]" "" RPM_EXTRA_VERSION "${RPM_EXTRA_VERSION}")
  set(RPM_EXTRA_VERSION ".${RPM_EXTRA_VERSION}")
endif()

# Nothing below this line needs change when releasing

# Older CMake version do not set PROJECT_VERSION
if(${CMAKE_VERSION} VERSION_LESS "3.0")
  # We can not use project() to set version information
  string(REPLACE "." ";" version_list ${PROJECT_VERSION_TEXT})
  list(GET version_list 0 major)
  list(GET version_list 1 minor)
  list(GET version_list 2 patch)
  set(MySQLRouter_VERSION_MAJOR ${major})
  set(MySQLRouter_VERSION_MINOR ${minor})
  set(MySQLRouter_VERSION_PATCH ${patch})
  set(PROJECT_VERSION_MAJOR ${major})
  set(PROJECT_VERSION_MINOR ${minor})
  set(PROJECT_VERSION_PATCH ${patch})
  set(MySQLRouter_VERSION ${PROJECT_VERSION_TEXT})
  set(PROJECT_VERSION ${PROJECT_VERSION_TEXT})
endif()


================================================
FILE: config.h.in
================================================
/*
  Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License, version 2.0,
  as published by the Free Software Foundation.

  This program is also distributed with certain software (including
  but not limited to OpenSSL) that is licensed under separate terms,
  as designated in a particular file or component or in included license
  documentation.  The authors of MySQL hereby grant you an additional
  permission to link the program and your derivative works with the
  separately licensed software that they have included with MySQL.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

// Generated from config.h.in

// MySQL Router version
#define MYSQL_ROUTER_VERSION "@MySQLRouter_VERSION@"
#define MYSQL_ROUTER_VERSION_MAJOR @MySQLRouter_VERSION_MAJOR@
#define MYSQL_ROUTER_VERSION_MINOR @MySQLRouter_VERSION_MINOR@
#define MYSQL_ROUTER_VERSION_PATCH @MySQLRouter_VERSION_PATCH@
#define MYSQL_ROUTER_VERSION_EDITION "@PROJECT_EDITION@"

// Package information
#define MYSQL_ROUTER_PACKAGE_NAME "@MYSQL_ROUTER_NAME@"
#define MYSQL_ROUTER_PACKAGE_PLATFORM "@PLATFORM_NAME@"
#define MYSQL_ROUTER_PACKAGE_ARCH_CPU "@CMAKE_SYSTEM_PROCESSOR@"
#define MYSQL_ROUTER_PACKAGE_ARCH_64BIT @ARCH_64BIT@

// Legal
#define COPYRIGHT "@ORACLE_COPYRIGHT@"
#define WELCOME \
    "@ORACLE_COPYRIGHT@"\
    "\n\n"\
    "Oracle is a registered trademark of Oracle Corporation and/or its\n"\
    "affiliates. Other names may be trademarks of their respective\n"\
    "owners.\n\n"\
    "Start MySQL Router.\n"

// Compiler features
#ifdef _MSC_VER
#if (_MSC_VER < 1700)
#define noexcept
#endif
#endif

// Defaults
#define CONFIG_FILES R"cfg(@CONFIG_FILES@)cfg"
#define MYSQL_ROUTER_BINARY_FOLDER "@ROUTER_BINDIR@"
#define MYSQL_ROUTER_PLUGIN_FOLDER "@ROUTER_PLUGINDIR@"
#define MYSQL_ROUTER_CONFIG_FOLDER "@ROUTER_CONFIGDIR@"
#define MYSQL_ROUTER_RUNTIME_FOLDER "@ROUTER_RUNTIMEDIR@"
#define MYSQL_ROUTER_LOGGING_FOLDER "@ROUTER_LOGDIR@"
#define MYSQL_ROUTER_DATA_FOLDER "@ROUTER_DATADIR@"

// Plaform specific
#cmakedefine SIZEOF_VOIDP     @SIZEOF_VOIDP@
#cmakedefine SIZEOF_CHARP     @SIZEOF_CHARP@
#cmakedefine SIZEOF_LONG      @SIZEOF_LONG@
#cmakedefine SIZEOF_SHORT     @SIZEOF_SHORT@
#cmakedefine SIZEOF_INT       @SIZEOF_INT@
#cmakedefine SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@
#cmakedefine SIZEOF_OFF_T     @SIZEOF_OFF_T@
#cmakedefine SIZEOF_TIME_T    @SIZEOF_TIME_T@

/* Endianess */
#cmakedefine WORDS_BIGENDIAN 1

#cmakedefine ENABLE_TESTS

/* Compiler specific features */
#cmakedefine HAVE_ATTRIBUTE_FORMAT 1

// Platform specific libraries
#cmakedefine HAVE_PRLIMIT 1


================================================
FILE: doc/doxygen.cfg.in
================================================
# Generated from doc/doxygen.cfg.in

# This file describes the settings to be used by Doxygen for MySQL Router.

DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = "MySQL Router"
PROJECT_NUMBER         =
PROJECT_BRIEF          = "Route MySQL connections"
PROJECT_LOGO           =

OUTPUT_DIRECTORY       = doc
OUTPUT_LANGUAGE        = English
GENERATE_LATEX         = NO
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = NO
OPTIMIZE_OUTPUT_FOR_C  = NO
EXTENSION_MAPPING      = cc=C++

MARKDOWN_SUPPORT       = YES
AUTOLINK_SUPPORT       = YES

BUILTIN_STL_SUPPORT    = YES

EXTRACT_PRIVATE        = YES
INTERNAL_DOCS          = YES
CASE_SENSE_NAMES       = NO

RECURSIVE              = YES
INPUT                  = @MySQLRouter_SOURCE_DIR@/README.md @MySQLRouter_SOURCE_DIR@/
STRIP_FROM_PATH        = @MySQLRouter_SOURCE_DIR@/
EXCLUDE               += @MySQLRouter_SOURCE_DIR@/ext
EXCLUDE               += @MySQLRouter_SOURCE_DIR@/packaging
EXCLUDE               += @MySQLRouter_SOURCE_DIR@/cmake
EXCLUDE_PATTERNS       =
EXCLUDE_PATTERNS      += *.txt
USE_MDFILE_AS_MAINPAGE = @MySQLRouter_SOURCE_DIR@/README.md

HTML_HEADER            = @MySQLRouter_SOURCE_DIR@/doc/router_header.html
HTML_FOOTER            = @MySQLRouter_SOURCE_DIR@/doc/router_footer.html
HTML_EXTRA_STYLESHEET  = @MySQLRouter_SOURCE_DIR@/doc/router_doxygen.css

ALIASES               += devnote="<div class=\"devnote\">\n\internal \n"
ALIASES               += enddevnote="\endinternal \n</div>"

WARN_IF_UNDOCUMENTED   = NO
WARN_AS_ERROR          = YES
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
PREDEFINED             = DOXYGEN_SHOULD_SKIP_THIS

# allow to include every file
EXAMPLE_PATH           = @PROJECT_SOURCE_DIR@


================================================
FILE: doc/router_doxygen.css
================================================
.fragment {
  font-size: 80% !important;
}

.textblock, .memitem {
  width: 600px !important;
}

.memdoc p {
}

.devnote h6 {
  font-color: orange;
  font-weight: bold;
  font-size: inherit;
  margin: 0;
  padding: 0;
}

.devnote p {
  margin: 0;
}

.devnote {
  border-left: solid 3px orange;
  padding-left: 3px;
  margin-bottom: 5px;
}

================================================
FILE: doc/router_footer.html
================================================
<!-- HTML footer for doxygen 1.8.9.1-->
<!-- start footer part -->
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    $navpath
    <li class="footer">$generatedby
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
  </ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
$generatedby &#160;<a href="http://www.doxygen.org/index.html">doxygen</a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>


================================================
FILE: doc/router_header.html
================================================
<!-- HTML header for doxygen 1.8.9.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->

<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <!--BEGIN PROJECT_LOGO-->
  <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
  <!--END PROJECT_LOGO-->
  <!--BEGIN PROJECT_NAME-->
  <td style="padding-left: 0.5em;">
   <div id="projectname">$projectname
   <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
   </div>
   <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
  </td>
  <!--END PROJECT_NAME-->
  <!--BEGIN !PROJECT_NAME-->
   <!--BEGIN PROJECT_BRIEF-->
    <td style="padding-left: 0.5em;">
    <div id="projectbrief">$projectbrief</div>
    </td>
   <!--END PROJECT_BRIEF-->
  <!--END !PROJECT_NAME-->
  <!--BEGIN DISABLE_INDEX-->
   <!--BEGIN SEARCHENGINE-->
   <td>$searchbox</td>
   <!--END SEARCHENGINE-->
  <!--END DISABLE_INDEX-->
 </tr>
 </tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->


================================================
FILE: doc/sample_mysqlrouter.conf
================================================

# MySQL Router sample configuration
#
# The following is a sample configuration file which shows
# most of the plugins available and most of their options.
#
# The paths used are defaults and should be adapted based
# on how MySQL Router was installed, for example, using the
# CMake option CMAKE_INSTALL_PREFIX
#
# The logging_folder is kept empty so message go to the
# console.
#

#[DEFAULT]
#logging_folder =
#plugin_folder = /usr/local/lib/mysqlrouter
#config_folder = /etc/mysql
#runtime_folder = /var/run
#data_folder = /var/lib
#keyring_path = /var/lib/keyring-data
#master_key_path = /var/lib/keyring-key

#[logger]
#level = INFO

#[routing:basic_failover]
# To be more transparent, use MySQL Server port 3306
#bind_port = 7001
#routing_strategy = first-available
#mode = read-write
#destinations = mysql-server1:3306,mysql-server2

# If no plugin is configured which starts a service, keepalive
# will make sure MySQL Router will not immediately exit. It is
# safe to remove once Router is configured.
[keepalive]
interval = 60


================================================
FILE: ext/RAPIDJSON-README
================================================
Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
as published by the Free Software Foundation.

This program is also distributed with certain software (including
but not limited to OpenSSL) that is licensed under separate terms,
as designated in a particular file or component or in included license
documentation.  The authors of MySQL hereby grant you an additional
permission to link the program and your derivative works with the
separately licensed software that they have included with MySQL.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License, version 2.0, for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA

----

The rapidjson library included in this directory is based on
https://github.com/miloyip/rapidjson, version 1.1.0.

The folder lib/jsonchecker is removed so that we don't include any code licensed
under the JSON License.

================================================
FILE: ext/duktape/duktape-2.1.0/LICENSE.txt
================================================
===============
Duktape license
===============

(http://opensource.org/licenses/MIT)

Copyright (c) 2013-2017 by Duktape authors (see AUTHORS.rst)

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.


================================================
FILE: ext/duktape/duktape-2.1.0/README.rst
================================================
=======
Duktape
=======

Duktape is a small and portable Ecmascript E5/E5.1 implementation.  It is
intended to be easily embeddable into C programs, with a C API similar in
spirit to Lua's.

Duktape supports the full E5/E5.1 feature set (with some semantics updated
from ES2015+) including errors, Unicode strings, and regular expressions,
a subset of Ecmascript 2015 (E6) and Ecmascript 2016 (E7) features (e.g.
computed property names, Proxy objects, exponentiation operator, Reflect),
ES2015 ArrayBuffer/TypedView, Node.js Buffer, and WHATWG Encoding API
living standard.

Duktape also provides a number of custom features such as error tracebacks,
additional data types for better C integration, combined reference counting
and mark-and sweep garbage collector, object finalizers, co-operative
threads a.k.a. coroutines, tail calls, a built-in debugger protocol, function
bytecode dump/load, and so on.  Bundled extra modules provide functionality
such as CommonJS module loading and a logging framework.

You can browse Duktape programmer's API and other documentation at:

* http://duktape.org/

In particular, you should read the getting started section:

* http://duktape.org/guide.html#gettingstarted

More examples and how-to articles are in the Duktape Wiki:

* http://wiki.duktape.org/

To build an example command line tool with interactive evaluation (REPL) and
the ability to run script files::

  $ cd <dist_root>
  $ make -f Makefile.cmdline
  [...]

  $ ./duk
  ((o) Duktape
  duk> print('Hello world!');
  Hello world!
  = undefined

  $ ./duk mandel.js
  [...]

To integrate Duktape into your program:

* Use ``tools/configure.py`` to prepare Duktape source and header files
  for build::

      # Duktape options can be customized via command line options.
      # In this example, enable "fastint" support and disable ES2015
      # Proxy support

      $ python2 tools/configure.py --output-directory duktape-src \
            -DDUK_USE_FASTINT -UDUK_USE_ES6_PROXY

* The output directory (duktape-src) will then contain ``duktape.c``,
  ``duktape.h``, and ``duk_config.h`` which you include in your build.

For more details, see:

* http://duktape.org/guide.html#compiling

* http://wiki.duktape.org/Configuring.html

This distributable contains:

* Pre-configured Duktape header and source files using the Duktape default
  configuration:

  * ``src/``: main Duktape library in a "single source file" format (duktape.c,
    duktape.h, and duk_config.h).

  * ``src-noline/``: contains a variant of ``src/duktape.c`` with no ``#line``
    directives which is preferable for some users.  See discussion in
    https://github.com/svaarala/duktape/pull/363.

  * ``src-separate/``: main Duktape library in multiple files format.

* ``src-input/``: raw input source files used by ``configure.py`` which
  recreates the combined/separate prepared sources with specific options.

* ``tools/``: various Python tools, such as ``configure.py`` for preparing
  a ``duk_config.h`` header and Duktape source files for compilation, see
  http://wiki.duktape.org/Configuring.html.

* ``config/``: configuration metadata for ``configure.py``.

* ``examples/``: further examples for using Duktape.  Although Duktape
  itself is widely portable, some of the examples are Linux only.
  For instance the ``eventloop`` example illustrates how ``setTimeout()``
  and other standard timer functions could be implemented on Unix/Linux.

* ``extras/``: utilities and modules which don't comfortably fit into the
  main Duktape library because of footprint or portability concerns.
  Extras are maintained and bug fixed code, but don't have the same version
  guarantees as the main Duktape library.

* ``polyfills/``: a few replacement suggestions for non-standard Javascript
  functions provided by other implementations.

* ``debugger/``: a debugger with a web UI, see ``debugger/README.rst`` and
  https://github.com/svaarala/duktape/blob/master/doc/debugger.rst for
  details on Duktape debugger support.  Also contains a JSON debug proxy
  (one written in Node.js and another in DukLuv) to make talking to the
  debug target easier.

* ``licenses/``: licensing information.

You can find release notes at:

* https://github.com/svaarala/duktape/blob/master/RELEASES.rst
  (summary of all versions)

* https://github.com/svaarala/duktape/blob/master/doc/release-notes-v2-1.rst
  (more detailed notes for this version)

This distributable contains Duktape version 2.1.0, created from git
commit 1f1f51a4f9595ffe8def0e9ba45b20f14679393a (v2.1.0).

Duktape is copyrighted by its authors (see ``AUTHORS.rst``) and licensed
under the MIT license (see ``LICENSE.txt``).  String hashing algorithms are
based on the algorithm from Lua (MIT license), djb2 hash, and Murmurhash2
(MIT license).  Pseudorandom number generator algorithms are based on
Adi Shamir's three-op algorithm, xoroshiro128+ (public domain), and SplitMix64
(public domain).  Duktape module loader is based on the CommonJS module
loading specification (without sharing any code), CommonJS is under the MIT
license.

Have fun!

Sami Vaarala (sami.vaarala@iki.fi)


================================================
FILE: ext/duktape/duktape-2.1.0/extras/README.rst
================================================
==============
Duktape extras
==============

Extra modules and utilities.  Extras provide functionality that doesn't
comfortably fit into the main Duktape library, perhaps for footprint or
portability reasons, but are still useful for most users.

Extras are maintained and will be bug fixed.  However, they don't have the
same semant
Download .txt
gitextract_2ty1zw_5/

├── .gitignore
├── CMakeLists.txt
├── License.txt
├── README.txt
├── cmake/
│   ├── Coverage.cmake
│   ├── FindGMock.cmake
│   ├── FindLibEvent2.cmake
│   ├── FindMySQL.cmake
│   ├── HarnessTesting.cmake
│   ├── Plugin.cmake
│   ├── TextUtils.cmake
│   ├── cmake_parse_arguments.cmake
│   ├── compile_flags.cmake
│   ├── compiler.cmake
│   ├── configure.cmake
│   ├── docs.cmake
│   ├── gmocktest.cmake
│   ├── install_layout.cmake
│   ├── libutils.cmake
│   ├── mysqlx_protobuf.cmake
│   ├── packaging.cmake
│   ├── platform.cmake
│   ├── protobuf.cmake
│   ├── settings.cmake
│   ├── ssl.cmake
│   ├── testing.cmake
│   └── version.cmake
├── config.h.in
├── doc/
│   ├── doxygen.cfg.in
│   ├── router_doxygen.css
│   ├── router_footer.html
│   ├── router_header.html
│   └── sample_mysqlrouter.conf
├── ext/
│   ├── RAPIDJSON-README
│   ├── duktape/
│   │   └── duktape-2.1.0/
│   │       ├── LICENSE.txt
│   │       ├── README.rst
│   │       ├── extras/
│   │       │   ├── README.rst
│   │       │   ├── alloc-pool/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_alloc_pool.c
│   │       │   │   ├── duk_alloc_pool.h
│   │       │   │   ├── ptrcomp.yaml
│   │       │   │   ├── ptrcomp_fixup.h
│   │       │   │   └── test.c
│   │       │   ├── console/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_console.c
│   │       │   │   ├── duk_console.h
│   │       │   │   └── test.c
│   │       │   ├── duk-v1-compat/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_v1_compat.c
│   │       │   │   ├── duk_v1_compat.h
│   │       │   │   ├── test.c
│   │       │   │   ├── test_compile1.js
│   │       │   │   ├── test_compile2.js
│   │       │   │   ├── test_eval1.js
│   │       │   │   └── test_eval2.js
│   │       │   ├── logging/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_logging.c
│   │       │   │   ├── duk_logging.h
│   │       │   │   └── test.c
│   │       │   ├── minimal-printf/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_minimal_printf.c
│   │       │   │   ├── duk_minimal_printf.h
│   │       │   │   └── test.c
│   │       │   ├── module-duktape/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_module_duktape.c
│   │       │   │   ├── duk_module_duktape.h
│   │       │   │   └── test.c
│   │       │   ├── module-node/
│   │       │   │   ├── Makefile
│   │       │   │   ├── README.rst
│   │       │   │   ├── duk_module_node.c
│   │       │   │   ├── duk_module_node.h
│   │       │   │   └── test.c
│   │       │   └── print-alert/
│   │       │       ├── Makefile
│   │       │       ├── README.rst
│   │       │       ├── duk_print_alert.c
│   │       │       ├── duk_print_alert.h
│   │       │       └── test.c
│   │       ├── licenses/
│   │       │   ├── commonjs.txt
│   │       │   ├── lua.txt
│   │       │   ├── murmurhash2.txt
│   │       │   ├── splitmix64.txt
│   │       │   └── xoroshiro128plus.txt
│   │       └── src/
│   │           ├── duk_config.h
│   │           ├── duk_source_meta.json
│   │           ├── duktape.c
│   │           └── duktape.h
│   ├── gmock/
│   │   ├── CHANGES
│   │   ├── CMakeLists.txt
│   │   ├── CONTRIBUTORS
│   │   ├── LICENSE
│   │   ├── Makefile.am
│   │   ├── README
│   │   ├── build-aux/
│   │   │   └── .keep
│   │   ├── configure.ac
│   │   ├── include/
│   │   │   └── gmock/
│   │   │       ├── gmock-actions.h
│   │   │       ├── gmock-cardinalities.h
│   │   │       ├── gmock-generated-actions.h
│   │   │       ├── gmock-generated-actions.h.pump
│   │   │       ├── gmock-generated-function-mockers.h
│   │   │       ├── gmock-generated-function-mockers.h.pump
│   │   │       ├── gmock-generated-matchers.h
│   │   │       ├── gmock-generated-matchers.h.pump
│   │   │       ├── gmock-generated-nice-strict.h
│   │   │       ├── gmock-generated-nice-strict.h.pump
│   │   │       ├── gmock-matchers.h
│   │   │       ├── gmock-more-actions.h
│   │   │       ├── gmock-more-matchers.h
│   │   │       ├── gmock-spec-builders.h
│   │   │       ├── gmock.h
│   │   │       └── internal/
│   │   │           ├── gmock-generated-internal-utils.h
│   │   │           ├── gmock-generated-internal-utils.h.pump
│   │   │           ├── gmock-internal-utils.h
│   │   │           └── gmock-port.h
│   │   ├── make/
│   │   │   └── Makefile
│   │   ├── msvc/
│   │   │   ├── 2005/
│   │   │   │   ├── gmock.sln
│   │   │   │   ├── gmock.vcproj
│   │   │   │   ├── gmock_config.vsprops
│   │   │   │   ├── gmock_main.vcproj
│   │   │   │   └── gmock_test.vcproj
│   │   │   └── 2010/
│   │   │       ├── gmock.sln
│   │   │       ├── gmock.vcxproj
│   │   │       ├── gmock_config.props
│   │   │       ├── gmock_main.vcxproj
│   │   │       └── gmock_test.vcxproj
│   │   ├── scripts/
│   │   │   ├── fuse_gmock_files.py
│   │   │   ├── generator/
│   │   │   │   ├── LICENSE
│   │   │   │   ├── README
│   │   │   │   ├── README.cppclean
│   │   │   │   ├── cpp/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── ast.py
│   │   │   │   │   ├── gmock_class.py
│   │   │   │   │   ├── gmock_class_test.py
│   │   │   │   │   ├── keywords.py
│   │   │   │   │   ├── tokenize.py
│   │   │   │   │   └── utils.py
│   │   │   │   └── gmock_gen.py
│   │   │   ├── gmock-config.in
│   │   │   ├── gmock_doctor.py
│   │   │   ├── upload.py
│   │   │   └── upload_gmock.py
│   │   ├── src/
│   │   │   ├── gmock-all.cc
│   │   │   ├── gmock-cardinalities.cc
│   │   │   ├── gmock-internal-utils.cc
│   │   │   ├── gmock-matchers.cc
│   │   │   ├── gmock-spec-builders.cc
│   │   │   ├── gmock.cc
│   │   │   └── gmock_main.cc
│   │   └── test/
│   │       ├── gmock-actions_test.cc
│   │       ├── gmock-cardinalities_test.cc
│   │       ├── gmock-generated-actions_test.cc
│   │       ├── gmock-generated-function-mockers_test.cc
│   │       ├── gmock-generated-internal-utils_test.cc
│   │       ├── gmock-generated-matchers_test.cc
│   │       ├── gmock-internal-utils_test.cc
│   │       ├── gmock-matchers_test.cc
│   │       ├── gmock-more-actions_test.cc
│   │       ├── gmock-nice-strict_test.cc
│   │       ├── gmock-port_test.cc
│   │       ├── gmock-spec-builders_test.cc
│   │       ├── gmock_all_test.cc
│   │       ├── gmock_ex_test.cc
│   │       ├── gmock_leak_test.py
│   │       ├── gmock_leak_test_.cc
│   │       ├── gmock_link2_test.cc
│   │       ├── gmock_link_test.cc
│   │       ├── gmock_link_test.h
│   │       ├── gmock_output_test.py
│   │       ├── gmock_output_test_.cc
│   │       ├── gmock_output_test_golden.txt
│   │       ├── gmock_stress_test.cc
│   │       ├── gmock_test.cc
│   │       └── gmock_test_utils.py
│   ├── gtest/
│   │   ├── CHANGES
│   │   ├── CMakeLists.txt
│   │   ├── CONTRIBUTORS
│   │   ├── LICENSE
│   │   ├── Makefile.am
│   │   ├── README
│   │   ├── build-aux/
│   │   │   └── .keep
│   │   ├── cmake/
│   │   │   └── internal_utils.cmake
│   │   ├── codegear/
│   │   │   ├── gtest.cbproj
│   │   │   ├── gtest.groupproj
│   │   │   ├── gtest_all.cc
│   │   │   ├── gtest_link.cc
│   │   │   ├── gtest_main.cbproj
│   │   │   └── gtest_unittest.cbproj
│   │   ├── configure.ac
│   │   ├── include/
│   │   │   └── gtest/
│   │   │       ├── gtest-death-test.h
│   │   │       ├── gtest-message.h
│   │   │       ├── gtest-param-test.h
│   │   │       ├── gtest-param-test.h.pump
│   │   │       ├── gtest-printers.h
│   │   │       ├── gtest-spi.h
│   │   │       ├── gtest-test-part.h
│   │   │       ├── gtest-typed-test.h
│   │   │       ├── gtest.h
│   │   │       ├── gtest_pred_impl.h
│   │   │       ├── gtest_prod.h
│   │   │       └── internal/
│   │   │           ├── gtest-death-test-internal.h
│   │   │           ├── gtest-filepath.h
│   │   │           ├── gtest-internal.h
│   │   │           ├── gtest-linked_ptr.h
│   │   │           ├── gtest-param-util-generated.h
│   │   │           ├── gtest-param-util-generated.h.pump
│   │   │           ├── gtest-param-util.h
│   │   │           ├── gtest-port.h
│   │   │           ├── gtest-string.h
│   │   │           ├── gtest-tuple.h
│   │   │           ├── gtest-tuple.h.pump
│   │   │           ├── gtest-type-util.h
│   │   │           └── gtest-type-util.h.pump
│   │   ├── m4/
│   │   │   ├── acx_pthread.m4
│   │   │   └── gtest.m4
│   │   ├── make/
│   │   │   └── Makefile
│   │   ├── msvc/
│   │   │   ├── gtest-md.sln
│   │   │   ├── gtest-md.vcproj
│   │   │   ├── gtest.sln
│   │   │   ├── gtest.vcproj
│   │   │   ├── gtest_main-md.vcproj
│   │   │   ├── gtest_main.vcproj
│   │   │   ├── gtest_prod_test-md.vcproj
│   │   │   ├── gtest_prod_test.vcproj
│   │   │   ├── gtest_unittest-md.vcproj
│   │   │   └── gtest_unittest.vcproj
│   │   ├── samples/
│   │   │   ├── prime_tables.h
│   │   │   ├── sample1.cc
│   │   │   ├── sample1.h
│   │   │   ├── sample10_unittest.cc
│   │   │   ├── sample1_unittest.cc
│   │   │   ├── sample2.cc
│   │   │   ├── sample2.h
│   │   │   ├── sample2_unittest.cc
│   │   │   ├── sample3-inl.h
│   │   │   ├── sample3_unittest.cc
│   │   │   ├── sample4.cc
│   │   │   ├── sample4.h
│   │   │   ├── sample4_unittest.cc
│   │   │   ├── sample5_unittest.cc
│   │   │   ├── sample6_unittest.cc
│   │   │   ├── sample7_unittest.cc
│   │   │   ├── sample8_unittest.cc
│   │   │   └── sample9_unittest.cc
│   │   ├── scripts/
│   │   │   ├── fuse_gtest_files.py
│   │   │   ├── gen_gtest_pred_impl.py
│   │   │   ├── gtest-config.in
│   │   │   ├── pump.py
│   │   │   ├── test/
│   │   │   │   └── Makefile
│   │   │   ├── upload.py
│   │   │   └── upload_gtest.py
│   │   ├── src/
│   │   │   ├── gtest-all.cc
│   │   │   ├── gtest-death-test.cc
│   │   │   ├── gtest-filepath.cc
│   │   │   ├── gtest-internal-inl.h
│   │   │   ├── gtest-port.cc
│   │   │   ├── gtest-printers.cc
│   │   │   ├── gtest-test-part.cc
│   │   │   ├── gtest-typed-test.cc
│   │   │   ├── gtest.cc
│   │   │   └── gtest_main.cc
│   │   ├── test/
│   │   │   ├── gtest-death-test_ex_test.cc
│   │   │   ├── gtest-death-test_test.cc
│   │   │   ├── gtest-filepath_test.cc
│   │   │   ├── gtest-linked_ptr_test.cc
│   │   │   ├── gtest-listener_test.cc
│   │   │   ├── gtest-message_test.cc
│   │   │   ├── gtest-options_test.cc
│   │   │   ├── gtest-param-test2_test.cc
│   │   │   ├── gtest-param-test_test.cc
│   │   │   ├── gtest-param-test_test.h
│   │   │   ├── gtest-port_test.cc
│   │   │   ├── gtest-printers_test.cc
│   │   │   ├── gtest-test-part_test.cc
│   │   │   ├── gtest-tuple_test.cc
│   │   │   ├── gtest-typed-test2_test.cc
│   │   │   ├── gtest-typed-test_test.cc
│   │   │   ├── gtest-typed-test_test.h
│   │   │   ├── gtest-unittest-api_test.cc
│   │   │   ├── gtest_all_test.cc
│   │   │   ├── gtest_break_on_failure_unittest.py
│   │   │   ├── gtest_break_on_failure_unittest_.cc
│   │   │   ├── gtest_catch_exceptions_test.py
│   │   │   ├── gtest_catch_exceptions_test_.cc
│   │   │   ├── gtest_color_test.py
│   │   │   ├── gtest_color_test_.cc
│   │   │   ├── gtest_env_var_test.py
│   │   │   ├── gtest_env_var_test_.cc
│   │   │   ├── gtest_environment_test.cc
│   │   │   ├── gtest_filter_unittest.py
│   │   │   ├── gtest_filter_unittest_.cc
│   │   │   ├── gtest_help_test.py
│   │   │   ├── gtest_help_test_.cc
│   │   │   ├── gtest_list_tests_unittest.py
│   │   │   ├── gtest_list_tests_unittest_.cc
│   │   │   ├── gtest_main_unittest.cc
│   │   │   ├── gtest_no_test_unittest.cc
│   │   │   ├── gtest_output_test.py
│   │   │   ├── gtest_output_test_.cc
│   │   │   ├── gtest_output_test_golden_lin.txt
│   │   │   ├── gtest_pred_impl_unittest.cc
│   │   │   ├── gtest_premature_exit_test.cc
│   │   │   ├── gtest_prod_test.cc
│   │   │   ├── gtest_repeat_test.cc
│   │   │   ├── gtest_shuffle_test.py
│   │   │   ├── gtest_shuffle_test_.cc
│   │   │   ├── gtest_sole_header_test.cc
│   │   │   ├── gtest_stress_test.cc
│   │   │   ├── gtest_test_utils.py
│   │   │   ├── gtest_throw_on_failure_ex_test.cc
│   │   │   ├── gtest_throw_on_failure_test.py
│   │   │   ├── gtest_throw_on_failure_test_.cc
│   │   │   ├── gtest_uninitialized_test.py
│   │   │   ├── gtest_uninitialized_test_.cc
│   │   │   ├── gtest_unittest.cc
│   │   │   ├── gtest_xml_outfile1_test_.cc
│   │   │   ├── gtest_xml_outfile2_test_.cc
│   │   │   ├── gtest_xml_outfiles_test.py
│   │   │   ├── gtest_xml_output_unittest.py
│   │   │   ├── gtest_xml_output_unittest_.cc
│   │   │   ├── gtest_xml_test_utils.py
│   │   │   ├── production.cc
│   │   │   └── production.h
│   │   └── xcode/
│   │       ├── Config/
│   │       │   ├── DebugProject.xcconfig
│   │       │   ├── FrameworkTarget.xcconfig
│   │       │   ├── General.xcconfig
│   │       │   ├── ReleaseProject.xcconfig
│   │       │   ├── StaticLibraryTarget.xcconfig
│   │       │   └── TestTarget.xcconfig
│   │       ├── Resources/
│   │       │   └── Info.plist
│   │       ├── Samples/
│   │       │   └── FrameworkSample/
│   │       │       ├── Info.plist
│   │       │       ├── WidgetFramework.xcodeproj/
│   │       │       │   └── project.pbxproj
│   │       │       ├── runtests.sh
│   │       │       ├── widget.cc
│   │       │       ├── widget.h
│   │       │       └── widget_test.cc
│   │       ├── Scripts/
│   │       │   ├── runtests.sh
│   │       │   └── versiongenerate.py
│   │       └── gtest.xcodeproj/
│   │           └── project.pbxproj
│   ├── protobuf/
│   │   ├── CMakeLists.txt
│   │   └── protobuf-3.0.0/
│   │       ├── BUILD
│   │       ├── CHANGES.txt
│   │       ├── CONTRIBUTORS.txt
│   │       ├── LICENSE
│   │       ├── Makefile.am
│   │       ├── Makefile.in
│   │       ├── README.md
│   │       ├── WORKSPACE
│   │       ├── aclocal.m4
│   │       ├── ar-lib
│   │       ├── autogen.sh
│   │       ├── cmake/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── README.md
│   │       │   ├── examples.cmake
│   │       │   ├── extract_includes.bat.in
│   │       │   ├── install.cmake
│   │       │   ├── libprotobuf-lite.cmake
│   │       │   ├── libprotobuf.cmake
│   │       │   ├── libprotoc.cmake
│   │       │   ├── protobuf-config-version.cmake.in
│   │       │   ├── protobuf-config.cmake.in
│   │       │   ├── protobuf-module.cmake.in
│   │       │   ├── protobuf-options.cmake
│   │       │   ├── protoc.cmake
│   │       │   └── tests.cmake
│   │       ├── compile
│   │       ├── config.guess
│   │       ├── config.h.in
│   │       ├── config.sub
│   │       ├── configure
│   │       ├── configure.ac
│   │       ├── conformance/
│   │       │   ├── ConformanceJava.java
│   │       │   ├── ConformanceJavaLite.java
│   │       │   ├── Makefile.am
│   │       │   ├── Makefile.in
│   │       │   ├── README.md
│   │       │   ├── conformance.proto
│   │       │   ├── conformance_cpp.cc
│   │       │   ├── conformance_objc.m
│   │       │   ├── conformance_python.py
│   │       │   ├── conformance_ruby.rb
│   │       │   ├── conformance_test.cc
│   │       │   ├── conformance_test.h
│   │       │   ├── conformance_test_runner.cc
│   │       │   ├── failure_list_cpp.txt
│   │       │   ├── failure_list_csharp.txt
│   │       │   ├── failure_list_java.txt
│   │       │   ├── failure_list_objc.txt
│   │       │   ├── failure_list_python-post26.txt
│   │       │   ├── failure_list_python.txt
│   │       │   ├── failure_list_python_cpp.txt
│   │       │   ├── failure_list_ruby.txt
│   │       │   └── third_party/
│   │       │       └── jsoncpp/
│   │       │           ├── json.h
│   │       │           └── jsoncpp.cpp
│   │       ├── depcomp
│   │       ├── editors/
│   │       │   ├── README.txt
│   │       │   ├── proto.vim
│   │       │   └── protobuf-mode.el
│   │       ├── generate_descriptor_proto.sh
│   │       ├── gmock.BUILD
│   │       ├── install-sh
│   │       ├── ltmain.sh
│   │       ├── m4/
│   │       │   ├── ac_system_extensions.m4
│   │       │   ├── acx_check_suncc.m4
│   │       │   ├── acx_pthread.m4
│   │       │   ├── libtool.m4
│   │       │   ├── ltoptions.m4
│   │       │   ├── ltsugar.m4
│   │       │   ├── ltversion.m4
│   │       │   ├── lt~obsolete.m4
│   │       │   └── stl_hash.m4
│   │       ├── missing
│   │       ├── protobuf-lite.pc.in
│   │       ├── protobuf.bzl
│   │       ├── protobuf.pc.in
│   │       ├── six.BUILD
│   │       ├── src/
│   │       │   ├── Makefile.am
│   │       │   ├── Makefile.in
│   │       │   ├── README.md
│   │       │   └── google/
│   │       │       └── protobuf/
│   │       │           ├── any.cc
│   │       │           ├── any.h
│   │       │           ├── any.pb.cc
│   │       │           ├── any.pb.h
│   │       │           ├── any.proto
│   │       │           ├── any_test.cc
│   │       │           ├── any_test.proto
│   │       │           ├── api.pb.cc
│   │       │           ├── api.pb.h
│   │       │           ├── api.proto
│   │       │           ├── arena.cc
│   │       │           ├── arena.h
│   │       │           ├── arena_test_util.cc
│   │       │           ├── arena_test_util.h
│   │       │           ├── arena_unittest.cc
│   │       │           ├── arenastring.cc
│   │       │           ├── arenastring.h
│   │       │           ├── arenastring_unittest.cc
│   │       │           ├── compiler/
│   │       │           │   ├── code_generator.cc
│   │       │           │   ├── code_generator.h
│   │       │           │   ├── command_line_interface.cc
│   │       │           │   ├── command_line_interface.h
│   │       │           │   ├── command_line_interface_unittest.cc
│   │       │           │   ├── cpp/
│   │       │           │   │   ├── cpp_bootstrap_unittest.cc
│   │       │           │   │   ├── cpp_enum.cc
│   │       │           │   │   ├── cpp_enum.h
│   │       │           │   │   ├── cpp_enum_field.cc
│   │       │           │   │   ├── cpp_enum_field.h
│   │       │           │   │   ├── cpp_extension.cc
│   │       │           │   │   ├── cpp_extension.h
│   │       │           │   │   ├── cpp_field.cc
│   │       │           │   │   ├── cpp_field.h
│   │       │           │   │   ├── cpp_file.cc
│   │       │           │   │   ├── cpp_file.h
│   │       │           │   │   ├── cpp_generator.cc
│   │       │           │   │   ├── cpp_generator.h
│   │       │           │   │   ├── cpp_helpers.cc
│   │       │           │   │   ├── cpp_helpers.h
│   │       │           │   │   ├── cpp_map_field.cc
│   │       │           │   │   ├── cpp_map_field.h
│   │       │           │   │   ├── cpp_message.cc
│   │       │           │   │   ├── cpp_message.h
│   │       │           │   │   ├── cpp_message_field.cc
│   │       │           │   │   ├── cpp_message_field.h
│   │       │           │   │   ├── cpp_options.h
│   │       │           │   │   ├── cpp_plugin_unittest.cc
│   │       │           │   │   ├── cpp_primitive_field.cc
│   │       │           │   │   ├── cpp_primitive_field.h
│   │       │           │   │   ├── cpp_service.cc
│   │       │           │   │   ├── cpp_service.h
│   │       │           │   │   ├── cpp_string_field.cc
│   │       │           │   │   ├── cpp_string_field.h
│   │       │           │   │   ├── cpp_test_bad_identifiers.proto
│   │       │           │   │   ├── cpp_test_large_enum_value.proto
│   │       │           │   │   ├── cpp_unittest.cc
│   │       │           │   │   ├── cpp_unittest.h
│   │       │           │   │   └── metadata_test.cc
│   │       │           │   ├── csharp/
│   │       │           │   │   ├── csharp_doc_comment.cc
│   │       │           │   │   ├── csharp_doc_comment.h
│   │       │           │   │   ├── csharp_enum.cc
│   │       │           │   │   ├── csharp_enum.h
│   │       │           │   │   ├── csharp_enum_field.cc
│   │       │           │   │   ├── csharp_enum_field.h
│   │       │           │   │   ├── csharp_field_base.cc
│   │       │           │   │   ├── csharp_field_base.h
│   │       │           │   │   ├── csharp_generator.cc
│   │       │           │   │   ├── csharp_generator.h
│   │       │           │   │   ├── csharp_generator_unittest.cc
│   │       │           │   │   ├── csharp_helpers.cc
│   │       │           │   │   ├── csharp_helpers.h
│   │       │           │   │   ├── csharp_map_field.cc
│   │       │           │   │   ├── csharp_map_field.h
│   │       │           │   │   ├── csharp_message.cc
│   │       │           │   │   ├── csharp_message.h
│   │       │           │   │   ├── csharp_message_field.cc
│   │       │           │   │   ├── csharp_message_field.h
│   │       │           │   │   ├── csharp_names.h
│   │       │           │   │   ├── csharp_options.h
│   │       │           │   │   ├── csharp_primitive_field.cc
│   │       │           │   │   ├── csharp_primitive_field.h
│   │       │           │   │   ├── csharp_reflection_class.cc
│   │       │           │   │   ├── csharp_reflection_class.h
│   │       │           │   │   ├── csharp_repeated_enum_field.cc
│   │       │           │   │   ├── csharp_repeated_enum_field.h
│   │       │           │   │   ├── csharp_repeated_message_field.cc
│   │       │           │   │   ├── csharp_repeated_message_field.h
│   │       │           │   │   ├── csharp_repeated_primitive_field.cc
│   │       │           │   │   ├── csharp_repeated_primitive_field.h
│   │       │           │   │   ├── csharp_source_generator_base.cc
│   │       │           │   │   ├── csharp_source_generator_base.h
│   │       │           │   │   ├── csharp_wrapper_field.cc
│   │       │           │   │   └── csharp_wrapper_field.h
│   │       │           │   ├── importer.cc
│   │       │           │   ├── importer.h
│   │       │           │   ├── importer_unittest.cc
│   │       │           │   ├── java/
│   │       │           │   │   ├── java_context.cc
│   │       │           │   │   ├── java_context.h
│   │       │           │   │   ├── java_doc_comment.cc
│   │       │           │   │   ├── java_doc_comment.h
│   │       │           │   │   ├── java_doc_comment_unittest.cc
│   │       │           │   │   ├── java_enum.cc
│   │       │           │   │   ├── java_enum.h
│   │       │           │   │   ├── java_enum_field.cc
│   │       │           │   │   ├── java_enum_field.h
│   │       │           │   │   ├── java_enum_field_lite.cc
│   │       │           │   │   ├── java_enum_field_lite.h
│   │       │           │   │   ├── java_enum_lite.cc
│   │       │           │   │   ├── java_enum_lite.h
│   │       │           │   │   ├── java_extension.cc
│   │       │           │   │   ├── java_extension.h
│   │       │           │   │   ├── java_extension_lite.cc
│   │       │           │   │   ├── java_extension_lite.h
│   │       │           │   │   ├── java_field.cc
│   │       │           │   │   ├── java_field.h
│   │       │           │   │   ├── java_file.cc
│   │       │           │   │   ├── java_file.h
│   │       │           │   │   ├── java_generator.cc
│   │       │           │   │   ├── java_generator.h
│   │       │           │   │   ├── java_generator_factory.cc
│   │       │           │   │   ├── java_generator_factory.h
│   │       │           │   │   ├── java_helpers.cc
│   │       │           │   │   ├── java_helpers.h
│   │       │           │   │   ├── java_lazy_message_field.cc
│   │       │           │   │   ├── java_lazy_message_field.h
│   │       │           │   │   ├── java_lazy_message_field_lite.cc
│   │       │           │   │   ├── java_lazy_message_field_lite.h
│   │       │           │   │   ├── java_map_field.cc
│   │       │           │   │   ├── java_map_field.h
│   │       │           │   │   ├── java_map_field_lite.cc
│   │       │           │   │   ├── java_map_field_lite.h
│   │       │           │   │   ├── java_message.cc
│   │       │           │   │   ├── java_message.h
│   │       │           │   │   ├── java_message_builder.cc
│   │       │           │   │   ├── java_message_builder.h
│   │       │           │   │   ├── java_message_builder_lite.cc
│   │       │           │   │   ├── java_message_builder_lite.h
│   │       │           │   │   ├── java_message_field.cc
│   │       │           │   │   ├── java_message_field.h
│   │       │           │   │   ├── java_message_field_lite.cc
│   │       │           │   │   ├── java_message_field_lite.h
│   │       │           │   │   ├── java_message_lite.cc
│   │       │           │   │   ├── java_message_lite.h
│   │       │           │   │   ├── java_name_resolver.cc
│   │       │           │   │   ├── java_name_resolver.h
│   │       │           │   │   ├── java_names.h
│   │       │           │   │   ├── java_options.h
│   │       │           │   │   ├── java_plugin_unittest.cc
│   │       │           │   │   ├── java_primitive_field.cc
│   │       │           │   │   ├── java_primitive_field.h
│   │       │           │   │   ├── java_primitive_field_lite.cc
│   │       │           │   │   ├── java_primitive_field_lite.h
│   │       │           │   │   ├── java_service.cc
│   │       │           │   │   ├── java_service.h
│   │       │           │   │   ├── java_shared_code_generator.cc
│   │       │           │   │   ├── java_shared_code_generator.h
│   │       │           │   │   ├── java_string_field.cc
│   │       │           │   │   ├── java_string_field.h
│   │       │           │   │   ├── java_string_field_lite.cc
│   │       │           │   │   └── java_string_field_lite.h
│   │       │           │   ├── javanano/
│   │       │           │   │   ├── javanano_enum.cc
│   │       │           │   │   ├── javanano_enum.h
│   │       │           │   │   ├── javanano_enum_field.cc
│   │       │           │   │   ├── javanano_enum_field.h
│   │       │           │   │   ├── javanano_extension.cc
│   │       │           │   │   ├── javanano_extension.h
│   │       │           │   │   ├── javanano_field.cc
│   │       │           │   │   ├── javanano_field.h
│   │       │           │   │   ├── javanano_file.cc
│   │       │           │   │   ├── javanano_file.h
│   │       │           │   │   ├── javanano_generator.cc
│   │       │           │   │   ├── javanano_generator.h
│   │       │           │   │   ├── javanano_helpers.cc
│   │       │           │   │   ├── javanano_helpers.h
│   │       │           │   │   ├── javanano_map_field.cc
│   │       │           │   │   ├── javanano_map_field.h
│   │       │           │   │   ├── javanano_message.cc
│   │       │           │   │   ├── javanano_message.h
│   │       │           │   │   ├── javanano_message_field.cc
│   │       │           │   │   ├── javanano_message_field.h
│   │       │           │   │   ├── javanano_params.h
│   │       │           │   │   ├── javanano_primitive_field.cc
│   │       │           │   │   └── javanano_primitive_field.h
│   │       │           │   ├── js/
│   │       │           │   │   ├── js_generator.cc
│   │       │           │   │   └── js_generator.h
│   │       │           │   ├── main.cc
│   │       │           │   ├── mock_code_generator.cc
│   │       │           │   ├── mock_code_generator.h
│   │       │           │   ├── objectivec/
│   │       │           │   │   ├── objectivec_enum.cc
│   │       │           │   │   ├── objectivec_enum.h
│   │       │           │   │   ├── objectivec_enum_field.cc
│   │       │           │   │   ├── objectivec_enum_field.h
│   │       │           │   │   ├── objectivec_extension.cc
│   │       │           │   │   ├── objectivec_extension.h
│   │       │           │   │   ├── objectivec_field.cc
│   │       │           │   │   ├── objectivec_field.h
│   │       │           │   │   ├── objectivec_file.cc
│   │       │           │   │   ├── objectivec_file.h
│   │       │           │   │   ├── objectivec_generator.cc
│   │       │           │   │   ├── objectivec_generator.h
│   │       │           │   │   ├── objectivec_helpers.cc
│   │       │           │   │   ├── objectivec_helpers.h
│   │       │           │   │   ├── objectivec_helpers_unittest.cc
│   │       │           │   │   ├── objectivec_map_field.cc
│   │       │           │   │   ├── objectivec_map_field.h
│   │       │           │   │   ├── objectivec_message.cc
│   │       │           │   │   ├── objectivec_message.h
│   │       │           │   │   ├── objectivec_message_field.cc
│   │       │           │   │   ├── objectivec_message_field.h
│   │       │           │   │   ├── objectivec_oneof.cc
│   │       │           │   │   ├── objectivec_oneof.h
│   │       │           │   │   ├── objectivec_primitive_field.cc
│   │       │           │   │   └── objectivec_primitive_field.h
│   │       │           │   ├── package_info.h
│   │       │           │   ├── parser.cc
│   │       │           │   ├── parser.h
│   │       │           │   ├── parser_unittest.cc
│   │       │           │   ├── plugin.cc
│   │       │           │   ├── plugin.h
│   │       │           │   ├── plugin.pb.cc
│   │       │           │   ├── plugin.pb.h
│   │       │           │   ├── plugin.proto
│   │       │           │   ├── python/
│   │       │           │   │   ├── python_generator.cc
│   │       │           │   │   ├── python_generator.h
│   │       │           │   │   └── python_plugin_unittest.cc
│   │       │           │   ├── ruby/
│   │       │           │   │   ├── ruby_generated_code.proto
│   │       │           │   │   ├── ruby_generated_code_pb.rb
│   │       │           │   │   ├── ruby_generator.cc
│   │       │           │   │   ├── ruby_generator.h
│   │       │           │   │   └── ruby_generator_unittest.cc
│   │       │           │   ├── subprocess.cc
│   │       │           │   ├── subprocess.h
│   │       │           │   ├── test_plugin.cc
│   │       │           │   ├── zip_output_unittest.sh
│   │       │           │   ├── zip_writer.cc
│   │       │           │   └── zip_writer.h
│   │       │           ├── descriptor.cc
│   │       │           ├── descriptor.h
│   │       │           ├── descriptor.pb.cc
│   │       │           ├── descriptor.pb.h
│   │       │           ├── descriptor.proto
│   │       │           ├── descriptor_database.cc
│   │       │           ├── descriptor_database.h
│   │       │           ├── descriptor_database_unittest.cc
│   │       │           ├── descriptor_unittest.cc
│   │       │           ├── drop_unknown_fields_test.cc
│   │       │           ├── duration.pb.cc
│   │       │           ├── duration.pb.h
│   │       │           ├── duration.proto
│   │       │           ├── dynamic_message.cc
│   │       │           ├── dynamic_message.h
│   │       │           ├── dynamic_message_unittest.cc
│   │       │           ├── empty.pb.cc
│   │       │           ├── empty.pb.h
│   │       │           ├── empty.proto
│   │       │           ├── extension_set.cc
│   │       │           ├── extension_set.h
│   │       │           ├── extension_set_heavy.cc
│   │       │           ├── extension_set_unittest.cc
│   │       │           ├── field_mask.pb.cc
│   │       │           ├── field_mask.pb.h
│   │       │           ├── field_mask.proto
│   │       │           ├── generated_enum_reflection.h
│   │       │           ├── generated_enum_util.h
│   │       │           ├── generated_message_reflection.cc
│   │       │           ├── generated_message_reflection.h
│   │       │           ├── generated_message_reflection_unittest.cc
│   │       │           ├── generated_message_util.cc
│   │       │           ├── generated_message_util.h
│   │       │           ├── io/
│   │       │           │   ├── coded_stream.cc
│   │       │           │   ├── coded_stream.h
│   │       │           │   ├── coded_stream_inl.h
│   │       │           │   ├── coded_stream_unittest.cc
│   │       │           │   ├── gzip_stream.cc
│   │       │           │   ├── gzip_stream.h
│   │       │           │   ├── gzip_stream_unittest.sh
│   │       │           │   ├── package_info.h
│   │       │           │   ├── printer.cc
│   │       │           │   ├── printer.h
│   │       │           │   ├── printer_unittest.cc
│   │       │           │   ├── strtod.cc
│   │       │           │   ├── strtod.h
│   │       │           │   ├── tokenizer.cc
│   │       │           │   ├── tokenizer.h
│   │       │           │   ├── tokenizer_unittest.cc
│   │       │           │   ├── zero_copy_stream.cc
│   │       │           │   ├── zero_copy_stream.h
│   │       │           │   ├── zero_copy_stream_impl.cc
│   │       │           │   ├── zero_copy_stream_impl.h
│   │       │           │   ├── zero_copy_stream_impl_lite.cc
│   │       │           │   ├── zero_copy_stream_impl_lite.h
│   │       │           │   └── zero_copy_stream_unittest.cc
│   │       │           ├── lite_arena_unittest.cc
│   │       │           ├── lite_unittest.cc
│   │       │           ├── map.h
│   │       │           ├── map_entry.h
│   │       │           ├── map_entry_lite.h
│   │       │           ├── map_field.cc
│   │       │           ├── map_field.h
│   │       │           ├── map_field_inl.h
│   │       │           ├── map_field_lite.h
│   │       │           ├── map_field_test.cc
│   │       │           ├── map_lite_test_util.cc
│   │       │           ├── map_lite_test_util.h
│   │       │           ├── map_lite_unittest.proto
│   │       │           ├── map_proto2_unittest.proto
│   │       │           ├── map_test.cc
│   │       │           ├── map_test_util.cc
│   │       │           ├── map_test_util.h
│   │       │           ├── map_test_util_impl.h
│   │       │           ├── map_type_handler.h
│   │       │           ├── map_unittest.proto
│   │       │           ├── message.cc
│   │       │           ├── message.h
│   │       │           ├── message_lite.cc
│   │       │           ├── message_lite.h
│   │       │           ├── message_unittest.cc
│   │       │           ├── metadata.h
│   │       │           ├── no_field_presence_test.cc
│   │       │           ├── package_info.h
│   │       │           ├── preserve_unknown_enum_test.cc
│   │       │           ├── proto3_arena_lite_unittest.cc
│   │       │           ├── proto3_arena_unittest.cc
│   │       │           ├── proto3_lite_unittest.cc
│   │       │           ├── reflection.h
│   │       │           ├── reflection_internal.h
│   │       │           ├── reflection_ops.cc
│   │       │           ├── reflection_ops.h
│   │       │           ├── reflection_ops_unittest.cc
│   │       │           ├── repeated_field.cc
│   │       │           ├── repeated_field.h
│   │       │           ├── repeated_field_reflection_unittest.cc
│   │       │           ├── repeated_field_unittest.cc
│   │       │           ├── service.cc
│   │       │           ├── service.h
│   │       │           ├── source_context.pb.cc
│   │       │           ├── source_context.pb.h
│   │       │           ├── source_context.proto
│   │       │           ├── struct.pb.cc
│   │       │           ├── struct.pb.h
│   │       │           ├── struct.proto
│   │       │           ├── stubs/
│   │       │           │   ├── atomic_sequence_num.h
│   │       │           │   ├── atomicops.h
│   │       │           │   ├── atomicops_internals_arm64_gcc.h
│   │       │           │   ├── atomicops_internals_arm_gcc.h
│   │       │           │   ├── atomicops_internals_arm_qnx.h
│   │       │           │   ├── atomicops_internals_atomicword_compat.h
│   │       │           │   ├── atomicops_internals_generic_gcc.h
│   │       │           │   ├── atomicops_internals_macosx.h
│   │       │           │   ├── atomicops_internals_mips_gcc.h
│   │       │           │   ├── atomicops_internals_pnacl.h
│   │       │           │   ├── atomicops_internals_power.h
│   │       │           │   ├── atomicops_internals_ppc_gcc.h
│   │       │           │   ├── atomicops_internals_solaris.h
│   │       │           │   ├── atomicops_internals_tsan.h
│   │       │           │   ├── atomicops_internals_x86_gcc.cc
│   │       │           │   ├── atomicops_internals_x86_gcc.h
│   │       │           │   ├── atomicops_internals_x86_msvc.cc
│   │       │           │   ├── atomicops_internals_x86_msvc.h
│   │       │           │   ├── bytestream.cc
│   │       │           │   ├── bytestream.h
│   │       │           │   ├── bytestream_unittest.cc
│   │       │           │   ├── callback.h
│   │       │           │   ├── casts.h
│   │       │           │   ├── common.cc
│   │       │           │   ├── common.h
│   │       │           │   ├── common_unittest.cc
│   │       │           │   ├── fastmem.h
│   │       │           │   ├── hash.h
│   │       │           │   ├── int128.cc
│   │       │           │   ├── int128.h
│   │       │           │   ├── int128_unittest.cc
│   │       │           │   ├── logging.h
│   │       │           │   ├── macros.h
│   │       │           │   ├── map_util.h
│   │       │           │   ├── mathlimits.cc
│   │       │           │   ├── mathlimits.h
│   │       │           │   ├── mathutil.h
│   │       │           │   ├── mutex.h
│   │       │           │   ├── once.cc
│   │       │           │   ├── once.h
│   │       │           │   ├── once_unittest.cc
│   │       │           │   ├── platform_macros.h
│   │       │           │   ├── port.h
│   │       │           │   ├── scoped_ptr.h
│   │       │           │   ├── shared_ptr.h
│   │       │           │   ├── singleton.h
│   │       │           │   ├── status.cc
│   │       │           │   ├── status.h
│   │       │           │   ├── status_macros.h
│   │       │           │   ├── status_test.cc
│   │       │           │   ├── statusor.cc
│   │       │           │   ├── statusor.h
│   │       │           │   ├── statusor_test.cc
│   │       │           │   ├── stl_util.h
│   │       │           │   ├── stringpiece.cc
│   │       │           │   ├── stringpiece.h
│   │       │           │   ├── stringpiece_unittest.cc
│   │       │           │   ├── stringprintf.cc
│   │       │           │   ├── stringprintf.h
│   │       │           │   ├── stringprintf_unittest.cc
│   │       │           │   ├── structurally_valid.cc
│   │       │           │   ├── structurally_valid_unittest.cc
│   │       │           │   ├── strutil.cc
│   │       │           │   ├── strutil.h
│   │       │           │   ├── strutil_unittest.cc
│   │       │           │   ├── substitute.cc
│   │       │           │   ├── substitute.h
│   │       │           │   ├── template_util.h
│   │       │           │   ├── template_util_unittest.cc
│   │       │           │   ├── time.cc
│   │       │           │   ├── time.h
│   │       │           │   ├── time_test.cc
│   │       │           │   ├── type_traits.h
│   │       │           │   └── type_traits_unittest.cc
│   │       │           ├── test_util.cc
│   │       │           ├── test_util.h
│   │       │           ├── test_util_lite.cc
│   │       │           ├── test_util_lite.h
│   │       │           ├── testdata/
│   │       │           │   ├── bad_utf8_string
│   │       │           │   ├── golden_message
│   │       │           │   ├── golden_message_maps
│   │       │           │   ├── golden_message_oneof_implemented
│   │       │           │   ├── golden_message_proto3
│   │       │           │   ├── golden_packed_fields_message
│   │       │           │   ├── map_test_data.txt
│   │       │           │   ├── text_format_unittest_data.txt
│   │       │           │   ├── text_format_unittest_data_oneof_implemented.txt
│   │       │           │   ├── text_format_unittest_data_pointy.txt
│   │       │           │   ├── text_format_unittest_data_pointy_oneof.txt
│   │       │           │   ├── text_format_unittest_extensions_data.txt
│   │       │           │   └── text_format_unittest_extensions_data_pointy.txt
│   │       │           ├── testing/
│   │       │           │   ├── file.cc
│   │       │           │   ├── file.h
│   │       │           │   ├── googletest.cc
│   │       │           │   ├── googletest.h
│   │       │           │   ├── zcgunzip.cc
│   │       │           │   └── zcgzip.cc
│   │       │           ├── text_format.cc
│   │       │           ├── text_format.h
│   │       │           ├── text_format_unittest.cc
│   │       │           ├── timestamp.pb.cc
│   │       │           ├── timestamp.pb.h
│   │       │           ├── timestamp.proto
│   │       │           ├── type.pb.cc
│   │       │           ├── type.pb.h
│   │       │           ├── type.proto
│   │       │           ├── unittest.proto
│   │       │           ├── unittest_arena.proto
│   │       │           ├── unittest_custom_options.proto
│   │       │           ├── unittest_drop_unknown_fields.proto
│   │       │           ├── unittest_embed_optimize_for.proto
│   │       │           ├── unittest_empty.proto
│   │       │           ├── unittest_enormous_descriptor.proto
│   │       │           ├── unittest_import.proto
│   │       │           ├── unittest_import_lite.proto
│   │       │           ├── unittest_import_public.proto
│   │       │           ├── unittest_import_public_lite.proto
│   │       │           ├── unittest_lite.proto
│   │       │           ├── unittest_lite_imports_nonlite.proto
│   │       │           ├── unittest_mset.proto
│   │       │           ├── unittest_mset_wire_format.proto
│   │       │           ├── unittest_no_arena.proto
│   │       │           ├── unittest_no_arena_import.proto
│   │       │           ├── unittest_no_arena_lite.proto
│   │       │           ├── unittest_no_field_presence.proto
│   │       │           ├── unittest_no_generic_services.proto
│   │       │           ├── unittest_optimize_for.proto
│   │       │           ├── unittest_preserve_unknown_enum.proto
│   │       │           ├── unittest_preserve_unknown_enum2.proto
│   │       │           ├── unittest_proto3_arena.proto
│   │       │           ├── unittest_proto3_arena_lite.proto
│   │       │           ├── unittest_proto3_lite.proto
│   │       │           ├── unittest_well_known_types.proto
│   │       │           ├── unknown_field_set.cc
│   │       │           ├── unknown_field_set.h
│   │       │           ├── unknown_field_set_unittest.cc
│   │       │           ├── util/
│   │       │           │   ├── field_comparator.cc
│   │       │           │   ├── field_comparator.h
│   │       │           │   ├── field_comparator_test.cc
│   │       │           │   ├── field_mask_util.cc
│   │       │           │   ├── field_mask_util.h
│   │       │           │   ├── field_mask_util_test.cc
│   │       │           │   ├── internal/
│   │       │           │   │   ├── constants.h
│   │       │           │   │   ├── datapiece.cc
│   │       │           │   │   ├── datapiece.h
│   │       │           │   │   ├── default_value_objectwriter.cc
│   │       │           │   │   ├── default_value_objectwriter.h
│   │       │           │   │   ├── default_value_objectwriter_test.cc
│   │       │           │   │   ├── error_listener.cc
│   │       │           │   │   ├── error_listener.h
│   │       │           │   │   ├── expecting_objectwriter.h
│   │       │           │   │   ├── field_mask_utility.cc
│   │       │           │   │   ├── field_mask_utility.h
│   │       │           │   │   ├── json_escaping.cc
│   │       │           │   │   ├── json_escaping.h
│   │       │           │   │   ├── json_objectwriter.cc
│   │       │           │   │   ├── json_objectwriter.h
│   │       │           │   │   ├── json_objectwriter_test.cc
│   │       │           │   │   ├── json_stream_parser.cc
│   │       │           │   │   ├── json_stream_parser.h
│   │       │           │   │   ├── json_stream_parser_test.cc
│   │       │           │   │   ├── location_tracker.h
│   │       │           │   │   ├── mock_error_listener.h
│   │       │           │   │   ├── object_location_tracker.h
│   │       │           │   │   ├── object_source.h
│   │       │           │   │   ├── object_writer.cc
│   │       │           │   │   ├── object_writer.h
│   │       │           │   │   ├── proto_writer.cc
│   │       │           │   │   ├── proto_writer.h
│   │       │           │   │   ├── protostream_objectsource.cc
│   │       │           │   │   ├── protostream_objectsource.h
│   │       │           │   │   ├── protostream_objectsource_test.cc
│   │       │           │   │   ├── protostream_objectwriter.cc
│   │       │           │   │   ├── protostream_objectwriter.h
│   │       │           │   │   ├── protostream_objectwriter_test.cc
│   │       │           │   │   ├── structured_objectwriter.h
│   │       │           │   │   ├── testdata/
│   │       │           │   │   │   ├── anys.proto
│   │       │           │   │   │   ├── books.proto
│   │       │           │   │   │   ├── default_value.proto
│   │       │           │   │   │   ├── default_value_test.proto
│   │       │           │   │   │   ├── field_mask.proto
│   │       │           │   │   │   ├── maps.proto
│   │       │           │   │   │   ├── oneofs.proto
│   │       │           │   │   │   ├── struct.proto
│   │       │           │   │   │   └── timestamp_duration.proto
│   │       │           │   │   ├── type_info.cc
│   │       │           │   │   ├── type_info.h
│   │       │           │   │   ├── type_info_test_helper.cc
│   │       │           │   │   ├── type_info_test_helper.h
│   │       │           │   │   ├── utility.cc
│   │       │           │   │   └── utility.h
│   │       │           │   ├── json_format_proto3.proto
│   │       │           │   ├── json_util.cc
│   │       │           │   ├── json_util.h
│   │       │           │   ├── json_util_test.cc
│   │       │           │   ├── message_differencer.cc
│   │       │           │   ├── message_differencer.h
│   │       │           │   ├── message_differencer_unittest.cc
│   │       │           │   ├── message_differencer_unittest.proto
│   │       │           │   ├── time_util.cc
│   │       │           │   ├── time_util.h
│   │       │           │   ├── time_util_test.cc
│   │       │           │   ├── type_resolver.h
│   │       │           │   ├── type_resolver_util.cc
│   │       │           │   ├── type_resolver_util.h
│   │       │           │   └── type_resolver_util_test.cc
│   │       │           ├── well_known_types_unittest.cc
│   │       │           ├── wire_format.cc
│   │       │           ├── wire_format.h
│   │       │           ├── wire_format_lite.cc
│   │       │           ├── wire_format_lite.h
│   │       │           ├── wire_format_lite_inl.h
│   │       │           ├── wire_format_unittest.cc
│   │       │           ├── wrappers.pb.cc
│   │       │           ├── wrappers.pb.h
│   │       │           └── wrappers.proto
│   │       ├── test-driver
│   │       ├── update_file_lists.sh
│   │       └── util/
│   │           └── python/
│   │               └── BUILD
│   ├── rapidjson/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── .gitmodules
│   │   ├── .travis.yml
│   │   ├── CHANGELOG.md
│   │   ├── CMakeLists.txt
│   │   ├── CMakeModules/
│   │   │   └── FindGTestSrc.cmake
│   │   ├── RapidJSON.pc.in
│   │   ├── RapidJSONConfig.cmake.in
│   │   ├── RapidJSONConfigVersion.cmake.in
│   │   ├── appveyor.yml
│   │   ├── bin/
│   │   │   ├── data/
│   │   │   │   ├── glossary.json
│   │   │   │   ├── menu.json
│   │   │   │   ├── readme.txt
│   │   │   │   ├── sample.json
│   │   │   │   ├── webapp.json
│   │   │   │   └── widget.json
│   │   │   ├── encodings/
│   │   │   │   ├── utf16be.json
│   │   │   │   ├── utf16bebom.json
│   │   │   │   ├── utf16le.json
│   │   │   │   ├── utf16lebom.json
│   │   │   │   ├── utf32be.json
│   │   │   │   ├── utf32bebom.json
│   │   │   │   ├── utf32le.json
│   │   │   │   ├── utf32lebom.json
│   │   │   │   ├── utf8.json
│   │   │   │   └── utf8bom.json
│   │   │   └── types/
│   │   │       ├── booleans.json
│   │   │       ├── floats.json
│   │   │       ├── guids.json
│   │   │       ├── integers.json
│   │   │       ├── mixed.json
│   │   │       ├── nulls.json
│   │   │       ├── paragraphs.json
│   │   │       └── readme.txt
│   │   ├── doc/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Doxyfile.in
│   │   │   ├── Doxyfile.zh-cn.in
│   │   │   ├── diagram/
│   │   │   │   ├── architecture.dot
│   │   │   │   ├── insituparsing.dot
│   │   │   │   ├── iterative-parser-states-diagram.dot
│   │   │   │   ├── makefile
│   │   │   │   ├── move1.dot
│   │   │   │   ├── move2.dot
│   │   │   │   ├── move3.dot
│   │   │   │   ├── normalparsing.dot
│   │   │   │   ├── simpledom.dot
│   │   │   │   ├── tutorial.dot
│   │   │   │   └── utilityclass.dot
│   │   │   ├── dom.md
│   │   │   ├── dom.zh-cn.md
│   │   │   ├── encoding.md
│   │   │   ├── encoding.zh-cn.md
│   │   │   ├── faq.md
│   │   │   ├── faq.zh-cn.md
│   │   │   ├── features.md
│   │   │   ├── features.zh-cn.md
│   │   │   ├── internals.md
│   │   │   ├── misc/
│   │   │   │   ├── DoxygenLayout.xml
│   │   │   │   ├── doxygenextra.css
│   │   │   │   ├── footer.html
│   │   │   │   └── header.html
│   │   │   ├── npm.md
│   │   │   ├── performance.md
│   │   │   ├── performance.zh-cn.md
│   │   │   ├── pointer.md
│   │   │   ├── pointer.zh-cn.md
│   │   │   ├── sax.md
│   │   │   ├── sax.zh-cn.md
│   │   │   ├── schema.md
│   │   │   ├── schema.zh-cn.md
│   │   │   ├── stream.md
│   │   │   ├── stream.zh-cn.md
│   │   │   ├── tutorial.md
│   │   │   └── tutorial.zh-cn.md
│   │   ├── docker/
│   │   │   └── debian/
│   │   │       └── Dockerfile
│   │   ├── example/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── capitalize/
│   │   │   │   └── capitalize.cpp
│   │   │   ├── condense/
│   │   │   │   └── condense.cpp
│   │   │   ├── filterkey/
│   │   │   │   └── filterkey.cpp
│   │   │   ├── filterkeydom/
│   │   │   │   └── filterkeydom.cpp
│   │   │   ├── jsonx/
│   │   │   │   └── jsonx.cpp
│   │   │   ├── messagereader/
│   │   │   │   └── messagereader.cpp
│   │   │   ├── parsebyparts/
│   │   │   │   └── parsebyparts.cpp
│   │   │   ├── pretty/
│   │   │   │   └── pretty.cpp
│   │   │   ├── prettyauto/
│   │   │   │   └── prettyauto.cpp
│   │   │   ├── schemavalidator/
│   │   │   │   └── schemavalidator.cpp
│   │   │   ├── serialize/
│   │   │   │   └── serialize.cpp
│   │   │   ├── simpledom/
│   │   │   │   └── simpledom.cpp
│   │   │   ├── simplereader/
│   │   │   │   └── simplereader.cpp
│   │   │   ├── simplewriter/
│   │   │   │   └── simplewriter.cpp
│   │   │   └── tutorial/
│   │   │       └── tutorial.cpp
│   │   ├── include/
│   │   │   └── rapidjson/
│   │   │       ├── allocators.h
│   │   │       ├── document.h
│   │   │       ├── encodedstream.h
│   │   │       ├── encodings.h
│   │   │       ├── error/
│   │   │       │   ├── en.h
│   │   │       │   └── error.h
│   │   │       ├── filereadstream.h
│   │   │       ├── filewritestream.h
│   │   │       ├── fwd.h
│   │   │       ├── internal/
│   │   │       │   ├── biginteger.h
│   │   │       │   ├── diyfp.h
│   │   │       │   ├── dtoa.h
│   │   │       │   ├── ieee754.h
│   │   │       │   ├── itoa.h
│   │   │       │   ├── meta.h
│   │   │       │   ├── pow10.h
│   │   │       │   ├── regex.h
│   │   │       │   ├── stack.h
│   │   │       │   ├── strfunc.h
│   │   │       │   ├── strtod.h
│   │   │       │   └── swap.h
│   │   │       ├── istreamwrapper.h
│   │   │       ├── memorybuffer.h
│   │   │       ├── memorystream.h
│   │   │       ├── msinttypes/
│   │   │       │   ├── inttypes.h
│   │   │       │   └── stdint.h
│   │   │       ├── ostreamwrapper.h
│   │   │       ├── pointer.h
│   │   │       ├── prettywriter.h
│   │   │       ├── rapidjson.h
│   │   │       ├── reader.h
│   │   │       ├── schema.h
│   │   │       ├── stream.h
│   │   │       ├── stringbuffer.h
│   │   │       └── writer.h
│   │   ├── include_dirs.js
│   │   ├── library.json
│   │   ├── license.txt
│   │   ├── license_readme-oracle.txt
│   │   ├── package.json
│   │   ├── rapidjson.autopkg
│   │   ├── readme.md
│   │   ├── readme.zh-cn.md
│   │   ├── test/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── perftest/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── misctest.cpp
│   │   │   │   ├── perftest.cpp
│   │   │   │   ├── perftest.h
│   │   │   │   ├── platformtest.cpp
│   │   │   │   ├── rapidjsontest.cpp
│   │   │   │   └── schematest.cpp
│   │   │   └── unittest/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── allocatorstest.cpp
│   │   │       ├── bigintegertest.cpp
│   │   │       ├── documenttest.cpp
│   │   │       ├── dtoatest.cpp
│   │   │       ├── encodedstreamtest.cpp
│   │   │       ├── encodingstest.cpp
│   │   │       ├── filestreamtest.cpp
│   │   │       ├── fwdtest.cpp
│   │   │       ├── istreamwrappertest.cpp
│   │   │       ├── itoatest.cpp
│   │   │       ├── jsoncheckertest.cpp
│   │   │       ├── namespacetest.cpp
│   │   │       ├── ostreamwrappertest.cpp
│   │   │       ├── pointertest.cpp
│   │   │       ├── prettywritertest.cpp
│   │   │       ├── readertest.cpp
│   │   │       ├── regextest.cpp
│   │   │       ├── schematest.cpp
│   │   │       ├── simdtest.cpp
│   │   │       ├── strfunctest.cpp
│   │   │       ├── stringbuffertest.cpp
│   │   │       ├── strtodtest.cpp
│   │   │       ├── unittest.cpp
│   │   │       ├── unittest.h
│   │   │       ├── valuetest.cpp
│   │   │       └── writertest.cpp
│   │   └── travis-doxygen.sh
│   └── yassl/
│       ├── AUTHORS
│       ├── CMakeLists.txt
│       ├── COPYING
│       ├── ChangeLog
│       ├── FLOSS-EXCEPTIONS
│       ├── INSTALL
│       ├── NEWS
│       ├── README
│       ├── certs/
│       │   ├── ca-cert.pem
│       │   ├── ca-key.pem
│       │   ├── client-cert.der
│       │   ├── client-cert.pem
│       │   ├── client-key.der
│       │   ├── client-key.pem
│       │   ├── client-keyEnc.pem
│       │   ├── client-keyEnc3.pem
│       │   ├── dsa-cert.pem
│       │   ├── dsa1024.der
│       │   ├── dsa1024.pem
│       │   ├── server-cert.pem
│       │   ├── server-key.pem
│       │   ├── server-keyEnc.pem
│       │   └── taoCert.txt
│       ├── examples/
│       │   ├── client/
│       │   │   ├── client.cpp
│       │   │   └── client.dsp
│       │   ├── echoclient/
│       │   │   ├── echoclient.cpp
│       │   │   ├── echoclient.dsp
│       │   │   ├── input
│       │   │   └── quit
│       │   ├── echoserver/
│       │   │   ├── echoserver.cpp
│       │   │   └── echoserver.dsp
│       │   └── server/
│       │       ├── server.cpp
│       │       └── server.dsp
│       ├── include/
│       │   ├── buffer.hpp
│       │   ├── cert_wrapper.hpp
│       │   ├── crypto_wrapper.hpp
│       │   ├── factory.hpp
│       │   ├── handshake.hpp
│       │   ├── lock.hpp
│       │   ├── log.hpp
│       │   ├── openssl/
│       │   │   ├── crypto.h
│       │   │   ├── des.h
│       │   │   ├── des_old.h
│       │   │   ├── engine.h
│       │   │   ├── err.h
│       │   │   ├── evp.h
│       │   │   ├── generate_prefix_files.pl
│       │   │   ├── hmac.h
│       │   │   ├── lhash.h
│       │   │   ├── md4.h
│       │   │   ├── md5.h
│       │   │   ├── objects.h
│       │   │   ├── opensslv.h
│       │   │   ├── pem.h
│       │   │   ├── pkcs12.h
│       │   │   ├── prefix_crypto.h
│       │   │   ├── prefix_ssl.h
│       │   │   ├── rand.h
│       │   │   ├── rsa.h
│       │   │   ├── sha.h
│       │   │   ├── ssl.h
│       │   │   ├── transport_types.h
│       │   │   ├── x509.h
│       │   │   └── x509v3.h
│       │   ├── socket_wrapper.hpp
│       │   ├── timer.hpp
│       │   ├── yassl.hpp
│       │   ├── yassl_error.hpp
│       │   ├── yassl_imp.hpp
│       │   ├── yassl_int.hpp
│       │   └── yassl_types.hpp
│       ├── lib/
│       │   └── dummy
│       ├── src/
│       │   ├── buffer.cpp
│       │   ├── cert_wrapper.cpp
│       │   ├── crypto_wrapper.cpp
│       │   ├── dummy.cpp
│       │   ├── handshake.cpp
│       │   ├── lock.cpp
│       │   ├── log.cpp
│       │   ├── make.bat
│       │   ├── socket_wrapper.cpp
│       │   ├── ssl.cpp
│       │   ├── template_instnt.cpp
│       │   ├── timer.cpp
│       │   ├── yassl.cpp
│       │   ├── yassl_error.cpp
│       │   ├── yassl_imp.cpp
│       │   └── yassl_int.cpp
│       ├── taocrypt/
│       │   ├── CMakeLists.txt
│       │   ├── COPYING
│       │   ├── INSTALL
│       │   ├── README
│       │   ├── benchmark/
│       │   │   ├── benchmark.cpp
│       │   │   ├── benchmark.dsp
│       │   │   ├── dh1024.der
│       │   │   ├── dsa1024.der
│       │   │   ├── make.bat
│       │   │   └── rsa1024.der
│       │   ├── include/
│       │   │   ├── aes.hpp
│       │   │   ├── algebra.hpp
│       │   │   ├── arc4.hpp
│       │   │   ├── asn.hpp
│       │   │   ├── block.hpp
│       │   │   ├── blowfish.hpp
│       │   │   ├── coding.hpp
│       │   │   ├── des.hpp
│       │   │   ├── dh.hpp
│       │   │   ├── dsa.hpp
│       │   │   ├── error.hpp
│       │   │   ├── file.hpp
│       │   │   ├── hash.hpp
│       │   │   ├── hc128.hpp
│       │   │   ├── hmac.hpp
│       │   │   ├── integer.hpp
│       │   │   ├── kernelc.hpp
│       │   │   ├── md2.hpp
│       │   │   ├── md4.hpp
│       │   │   ├── md5.hpp
│       │   │   ├── misc.hpp
│       │   │   ├── modarith.hpp
│       │   │   ├── modes.hpp
│       │   │   ├── pwdbased.hpp
│       │   │   ├── rabbit.hpp
│       │   │   ├── random.hpp
│       │   │   ├── ripemd.hpp
│       │   │   ├── rsa.hpp
│       │   │   ├── runtime.hpp
│       │   │   ├── sha.hpp
│       │   │   ├── twofish.hpp
│       │   │   ├── type_traits.hpp
│       │   │   └── types.hpp
│       │   ├── mySTL/
│       │   │   ├── algorithm.hpp
│       │   │   ├── helpers.hpp
│       │   │   ├── list.hpp
│       │   │   ├── memory.hpp
│       │   │   ├── memory_array.hpp
│       │   │   ├── pair.hpp
│       │   │   ├── stdexcept.hpp
│       │   │   └── vector.hpp
│       │   ├── src/
│       │   │   ├── aes.cpp
│       │   │   ├── aestables.cpp
│       │   │   ├── algebra.cpp
│       │   │   ├── arc4.cpp
│       │   │   ├── asn.cpp
│       │   │   ├── bftables.cpp
│       │   │   ├── blowfish.cpp
│       │   │   ├── coding.cpp
│       │   │   ├── des.cpp
│       │   │   ├── dh.cpp
│       │   │   ├── dsa.cpp
│       │   │   ├── file.cpp
│       │   │   ├── hash.cpp
│       │   │   ├── hc128.cpp
│       │   │   ├── integer.cpp
│       │   │   ├── make.bat
│       │   │   ├── md2.cpp
│       │   │   ├── md4.cpp
│       │   │   ├── md5.cpp
│       │   │   ├── misc.cpp
│       │   │   ├── rabbit.cpp
│       │   │   ├── random.cpp
│       │   │   ├── ripemd.cpp
│       │   │   ├── rsa.cpp
│       │   │   ├── sha.cpp
│       │   │   ├── template_instnt.cpp
│       │   │   ├── tftables.cpp
│       │   │   └── twofish.cpp
│       │   ├── taocrypt.dsp
│       │   ├── taocrypt.dsw
│       │   ├── test/
│       │   │   ├── make.bat
│       │   │   ├── memory.cpp
│       │   │   ├── test.cpp
│       │   │   └── test.dsp
│       │   └── test.dsw
│       ├── testsuite/
│       │   ├── cipher-test.sh
│       │   ├── input
│       │   ├── make.bat
│       │   ├── quit
│       │   ├── test.hpp
│       │   ├── testsuite.cpp
│       │   └── testsuite.dsp
│       ├── yassl.dsp
│       └── yassl.dsw
├── packaging/
│   ├── README_Debian.md
│   ├── WiX/
│   │   ├── CMakeLists.txt
│   │   ├── CPackWixConfig.cmake
│   │   ├── ca/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── CustomAction.cpp
│   │   │   └── CustomAction.def
│   │   ├── create_msi.cmake.in
│   │   ├── custom_ui.wxs
│   │   ├── extra.wxs.in
│   │   ├── mysql_router.wxs.in
│   │   ├── mysql_router_extra.wxs.in
│   │   ├── mysqlrouter.conf.in
│   │   └── versioninfo.rc.in
│   ├── build_deb.sh
│   ├── build_rpm.sh
│   ├── deb-artful/
│   │   ├── changelog
│   │   └── control
│   ├── deb-bionic/
│   │   ├── changelog
│   │   └── control
│   ├── deb-common/
│   │   ├── compat
│   │   ├── copyright
│   │   ├── extra/
│   │   │   ├── apparmor-profile.in
│   │   │   └── mysqlrouter.conf.in
│   │   ├── mysql-router-dev.install
│   │   ├── mysql-router-dev.lintian-overrides
│   │   ├── mysql-router.install
│   │   ├── mysql-router.lintian-overrides
│   │   ├── mysql-router.mysqlrouter.init
│   │   ├── mysql-router.postinst
│   │   ├── mysql-router.postrm
│   │   ├── mysql-router.preinst
│   │   ├── mysql-router.prerm
│   │   ├── rules
│   │   └── source/
│   │       └── format
│   ├── deb-jessie/
│   │   ├── changelog
│   │   └── control
│   ├── deb-stretch/
│   │   ├── changelog
│   │   └── control
│   ├── deb-trusty/
│   │   ├── changelog
│   │   └── control
│   ├── deb-vivid/
│   │   ├── changelog
│   │   └── control
│   ├── deb-wily/
│   │   ├── changelog
│   │   └── control
│   ├── deb-xenial/
│   │   ├── changelog
│   │   └── control
│   ├── deb-yakkety/
│   │   ├── changelog
│   │   └── control
│   ├── deb-zesty/
│   │   ├── changelog
│   │   └── control
│   └── rpm-oel/
│       ├── CMakeLists.txt
│       ├── mysql-router.spec.in
│       ├── mysqlrouter.conf.in
│       ├── mysqlrouter.init
│       ├── mysqlrouter.service
│       └── mysqlrouter.tmpfiles.d
├── src/
│   ├── CMakeLists.txt
│   ├── harness/
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── CPPLINT.cfg
│   │   ├── Doxyfile.in
│   │   ├── README.txt
│   │   ├── data/
│   │   │   └── main.conf
│   │   ├── include/
│   │   │   ├── common.h
│   │   │   ├── dim.h
│   │   │   ├── harness_assert.h
│   │   │   ├── hostname_validator.h
│   │   │   ├── keyring/
│   │   │   │   ├── keyring.h
│   │   │   │   ├── keyring_file.h
│   │   │   │   ├── keyring_manager.h
│   │   │   │   └── keyring_memory.h
│   │   │   ├── mysql/
│   │   │   │   └── harness/
│   │   │   │       ├── arg_handler.h
│   │   │   │       ├── compiler_attributes.h
│   │   │   │       ├── config_parser.h
│   │   │   │       ├── filesystem.h
│   │   │   │       ├── loader.h
│   │   │   │       ├── loader_config.h
│   │   │   │       ├── logging/
│   │   │   │       │   ├── handler.h
│   │   │   │       │   ├── logger.h
│   │   │   │       │   ├── logging.h
│   │   │   │       │   └── registry.h
│   │   │   │       ├── networking/
│   │   │   │       │   ├── ip_address.h
│   │   │   │       │   ├── ipv4_address.h
│   │   │   │       │   ├── ipv6_address.h
│   │   │   │       │   └── resolver.h
│   │   │   │       └── queue.h
│   │   │   ├── mysql_router_thread.h
│   │   │   ├── process_launcher.h
│   │   │   ├── random_generator.h
│   │   │   ├── socket_operations.h
│   │   │   ├── tcp_address.h
│   │   │   └── unique_ptr.h
│   │   ├── internal/
│   │   │   ├── README.md
│   │   │   ├── checks/
│   │   │   │   └── build_all.py
│   │   │   ├── exclude-from-release.txt
│   │   │   └── hooks/
│   │   │       ├── pre-commit
│   │   │       ├── pre-receive
│   │   │       └── update
│   │   ├── plugin.h.in
│   │   ├── shared/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── include/
│   │   │   │   └── test/
│   │   │   │       └── helpers.h
│   │   │   └── src/
│   │   │       └── test_helpers.cc
│   │   ├── src/
│   │   │   ├── arg_handler.cc
│   │   │   ├── common.cc
│   │   │   ├── config_parser.cc
│   │   │   ├── designator.cc
│   │   │   ├── designator.h
│   │   │   ├── dim.cc
│   │   │   ├── exception.h
│   │   │   ├── filesystem-posix.cc
│   │   │   ├── filesystem-windows.cc
│   │   │   ├── filesystem.cc
│   │   │   ├── hostname_validator.cc
│   │   │   ├── keyring/
│   │   │   │   ├── keyring_file.cc
│   │   │   │   ├── keyring_manager.cc
│   │   │   │   └── keyring_memory.cc
│   │   │   ├── loader-posix.cc
│   │   │   ├── loader-windows.cc
│   │   │   ├── loader.cc
│   │   │   ├── loader_config.cc
│   │   │   ├── logging/
│   │   │   │   ├── handler.cc
│   │   │   │   ├── logger.cc
│   │   │   │   ├── logging.cc
│   │   │   │   └── registry.cc
│   │   │   ├── mysql_router_thread.cc
│   │   │   ├── networking/
│   │   │   │   ├── ip_address.cc
│   │   │   │   ├── ipv4_address.cc
│   │   │   │   ├── ipv6_address.cc
│   │   │   │   └── resolver.cc
│   │   │   ├── process_launcher.cc
│   │   │   ├── random_generator.cc
│   │   │   ├── socket_operations.cc
│   │   │   ├── tcp_address.cc
│   │   │   ├── utilities-posix.cc
│   │   │   ├── utilities-windows.cc
│   │   │   ├── utilities.cc
│   │   │   └── utilities.h
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── data/
│   │       │   ├── logger.cfg
│   │       │   ├── logger.d/
│   │       │   │   ├── default.cfg
│   │       │   │   ├── magic.cfg
│   │       │   │   └── one.cfg
│   │       │   ├── magic-alt.cfg
│   │       │   ├── tests-bad-1.cfg
│   │       │   ├── tests-bad-2.cfg
│   │       │   ├── tests-bad-3.cfg
│   │       │   ├── tests-good-1.cfg.in
│   │       │   ├── tests-good-2.cfg.in
│   │       │   └── tests-start-1.cfg.in
│   │       ├── include/
│   │       │   ├── lifecycle.h
│   │       │   └── magic.h
│   │       ├── plugins/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── bad_one.cc
│   │       │   ├── bad_two.cc
│   │       │   ├── example.cc
│   │       │   ├── lifecycle.cc
│   │       │   ├── lifecycle2.cc
│   │       │   ├── lifecycle3.cc
│   │       │   └── magic.cc
│   │       ├── test_bug22104451.cc
│   │       ├── test_common.cc
│   │       ├── test_config.cc
│   │       ├── test_designator.cc
│   │       ├── test_dim_and_unique_ptr.cc
│   │       ├── test_filesystem.cc
│   │       ├── test_hostname_validator.cc
│   │       ├── test_ip_address.cc
│   │       ├── test_iterator.cc
│   │       ├── test_keyring.cc
│   │       ├── test_keyring_manager.cc
│   │       ├── test_loader.cc
│   │       ├── test_loader_lifecycle.cc
│   │       ├── test_logging.cc
│   │       ├── test_mysql_router_thread.cc
│   │       ├── test_queue.cc
│   │       ├── test_random_generator.cc
│   │       ├── test_resolver.cc
│   │       └── test_utilities.cc
│   ├── http/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       ├── http_client.h
│   │   │       ├── http_client_export.h
│   │   │       ├── http_common.h
│   │   │       ├── http_common_export.h
│   │   │       ├── http_server_component.h
│   │   │       ├── http_server_export.h
│   │   │       └── rest_client.h
│   │   ├── src/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── http_client.cc
│   │   │   ├── http_common.cc
│   │   │   ├── http_request_impl.h
│   │   │   ├── http_server_component.cc
│   │   │   ├── http_server_plugin.cc
│   │   │   ├── http_server_plugin.h
│   │   │   ├── http_time.cc
│   │   │   ├── posix_re.h
│   │   │   ├── rest_cli.cc
│   │   │   ├── rest_client.cc
│   │   │   └── static_files.cc
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── test_posix_re.cc
│   │       └── test_time.cc
│   ├── keepalive/
│   │   ├── CMakeLists.txt
│   │   ├── src/
│   │   │   └── keepalive.cc
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── data/
│   │       │   └── keepalive.cfg.in
│   │       └── test_plugin_keepalive.cc
│   ├── metadata_cache/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       └── metadata_cache.h
│   │   ├── src/
│   │   │   ├── cache_api.cc
│   │   │   ├── cluster_metadata.cc
│   │   │   ├── cluster_metadata.h
│   │   │   ├── group_replication_metadata.cc
│   │   │   ├── group_replication_metadata.h
│   │   │   ├── metadata.h
│   │   │   ├── metadata_cache.cc
│   │   │   ├── metadata_cache.h
│   │   │   ├── metadata_cache_plugin.cc
│   │   │   ├── metadata_factory.cc
│   │   │   ├── metadata_factory.h
│   │   │   ├── plugin_config.cc
│   │   │   └── plugin_config.h
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── helper/
│   │       │   ├── mock_metadata.cc
│   │       │   ├── mock_metadata.h
│   │       │   └── mock_metadata_factory.cc
│   │       ├── test_cache_plugin.cc
│   │       ├── test_failover.cc
│   │       ├── test_metadata.cc
│   │       ├── test_metadata_cache.cc
│   │       └── test_plugin_config.cc
│   ├── mock_server/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       ├── mock_server_component.h
│   │   │       ├── mock_server_export.h
│   │   │       └── mock_server_global_scope.h
│   │   └── src/
│   │       ├── CMakeLists.txt
│   │       ├── duk_module_shim.c
│   │       ├── duk_module_shim.h
│   │       ├── duk_node_fs.c
│   │       ├── duk_node_fs.h
│   │       ├── duktape_statement_reader.cc
│   │       ├── duktape_statement_reader.h
│   │       ├── json_schema_embedder.cc
│   │       ├── json_statement_reader.cc
│   │       ├── json_statement_reader.h
│   │       ├── main.cc
│   │       ├── mock_server_component.cc
│   │       ├── mock_server_plugin.cc
│   │       ├── mock_server_plugin.h
│   │       ├── mysql_protocol_common.h
│   │       ├── mysql_protocol_decoder.cc
│   │       ├── mysql_protocol_decoder.h
│   │       ├── mysql_protocol_encoder.cc
│   │       ├── mysql_protocol_encoder.h
│   │       ├── mysql_protocol_utils.cc
│   │       ├── mysql_protocol_utils.h
│   │       ├── mysql_server_mock.cc
│   │       ├── mysql_server_mock.h
│   │       ├── mysql_server_mock.md
│   │       ├── mysql_server_mock_schema.h
│   │       ├── mysql_server_mock_schema.js
│   │       ├── rest_mock_server.cc
│   │       └── statement_reader.h
│   ├── mysql_protocol/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       ├── mysql_protocol/
│   │   │       │   ├── base_packet.h
│   │   │       │   ├── constants.h
│   │   │       │   ├── error_packet.h
│   │   │       │   └── handshake_packet.h
│   │   │       └── mysql_protocol.h
│   │   ├── src/
│   │   │   ├── base_packet.cc
│   │   │   ├── error_packet.cc
│   │   │   └── handshake_packet.cc
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── test_base_packet.cc
│   │       ├── test_constants.cc
│   │       ├── test_error_packet.cc
│   │       └── test_handshake_packet.cc
│   ├── plugin_info/
│   │   ├── CMakeLists.txt
│   │   ├── src/
│   │   │   ├── library_file.cc
│   │   │   ├── library_file.h
│   │   │   ├── main.cc
│   │   │   ├── plugin.cc
│   │   │   ├── plugin.h
│   │   │   ├── plugin_info_app.cc
│   │   │   └── plugin_info_app.h
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       └── test_plugin_info_app.cc
│   ├── router/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       ├── datatypes.h
│   │   │       ├── keyring_info.h
│   │   │       ├── log_filter.h
│   │   │       ├── my_aes.h
│   │   │       ├── my_aes_impl.h
│   │   │       ├── mysql_session.h
│   │   │       ├── plugin_config.h
│   │   │       ├── sha1.h
│   │   │       ├── uri.h
│   │   │       ├── utils.h
│   │   │       ├── utils_sqlstring.h
│   │   │       └── windows/
│   │   │           └── password_vault.h
│   │   ├── src/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── cluster_metadata.cc
│   │   │   ├── cluster_metadata.h
│   │   │   ├── common/
│   │   │   │   ├── log_filter.cc
│   │   │   │   ├── my_aes.cc
│   │   │   │   ├── my_aes_openssl.cc
│   │   │   │   ├── my_aes_yassl.cc
│   │   │   │   ├── my_sha1.cc
│   │   │   │   ├── mysql_session.cc
│   │   │   │   └── utils_sqlstring.cc
│   │   │   ├── config_files.cc
│   │   │   ├── config_files.h
│   │   │   ├── config_generator.cc
│   │   │   ├── config_generator.h
│   │   │   ├── keyring_info.cc
│   │   │   ├── main.cc
│   │   │   ├── plugin_config.cc
│   │   │   ├── router_app.cc
│   │   │   ├── router_app.h
│   │   │   ├── uri.cc
│   │   │   ├── utils.cc
│   │   │   └── windows/
│   │   │       ├── main-windows.cc
│   │   │       ├── main-windows.h
│   │   │       ├── nt_servc.cc
│   │   │       ├── nt_servc.h
│   │   │       └── password_vault.cc
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── config_a.conf
│   │       ├── config_b.conf
│   │       ├── config_c.ini
│   │       ├── issues/
│   │       │   ├── test_bug22074209.cc
│   │       │   ├── test_bug22084430.cc
│   │       │   ├── test_bug22572346.cc
│   │       │   └── test_bug24909259.cc
│   │       ├── mysqlrouter.conf.in
│   │       ├── mysqlrouter_app.cc
│   │       ├── mysqlrouter_consolelogger.conf.in
│   │       ├── mysqlrouter_extra.conf.in
│   │       ├── mysqlrouter_nologger.conf.in
│   │       ├── mysqlrouter_utils.cc
│   │       ├── parse_error.conf
│   │       ├── router_arghandler.cc
│   │       ├── test_cluster_metadata.cc
│   │       ├── test_config_files.cc
│   │       ├── test_config_generator.cc
│   │       ├── test_configuration_errors.cc
│   │       ├── test_console_output.cc
│   │       ├── test_datatypes.cc
│   │       ├── test_log_filter.cc
│   │       ├── test_metadata_check.cc
│   │       ├── test_mysql_session.cc
│   │       ├── test_plugins_config.cc
│   │       ├── test_uri.cc
│   │       └── test_utils.cc
│   ├── routing/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── mysqlrouter/
│   │   │       └── routing.h
│   │   ├── src/
│   │   │   ├── connection.cc
│   │   │   ├── connection.h
│   │   │   ├── connection_container.cc
│   │   │   ├── connection_container.h
│   │   │   ├── context.cc
│   │   │   ├── context.h
│   │   │   ├── dest_first_available.cc
│   │   │   ├── dest_first_available.h
│   │   │   ├── dest_metadata_cache.cc
│   │   │   ├── dest_metadata_cache.h
│   │   │   ├── dest_next_available.cc
│   │   │   ├── dest_next_available.h
│   │   │   ├── dest_round_robin.cc
│   │   │   ├── dest_round_robin.h
│   │   │   ├── destination.cc
│   │   │   ├── destination.h
│   │   │   ├── mysql_routing.cc
│   │   │   ├── mysql_routing.h
│   │   │   ├── mysql_routing_common.cc
│   │   │   ├── mysql_routing_common.h
│   │   │   ├── plugin_config.cc
│   │   │   ├── plugin_config.h
│   │   │   ├── protocol/
│   │   │   │   ├── base_protocol.h
│   │   │   │   ├── classic_protocol.cc
│   │   │   │   ├── classic_protocol.h
│   │   │   │   ├── protocol.h
│   │   │   │   ├── x_protocol.cc
│   │   │   │   └── x_protocol.h
│   │   │   ├── routing.cc
│   │   │   ├── routing_plugin.cc
│   │   │   ├── utils.cc
│   │   │   └── utils.h
│   │   └── tests/
│   │       ├── CMakeLists.txt
│   │       ├── data/
│   │       │   └── 1route.conf.in
│   │       ├── issues/
│   │       │   ├── test_bug21873666.cc
│   │       │   ├── test_bug21962350.cc
│   │       │   ├── test_bug22062859.cc
│   │       │   └── test_bug22579989.cc
│   │       ├── plugin/
│   │       │   └── test_plugin.cc
│   │       ├── routing_mocks.h
│   │       ├── test_block_clients.cc
│   │       ├── test_classic_protocol.cc
│   │       ├── test_config.cc
│   │       ├── test_connection.cc
│   │       ├── test_connection_container.cc
│   │       ├── test_first_available.cc
│   │       ├── test_metadata_cache_group.cc
│   │       ├── test_next_available.cc
│   │       ├── test_round_robin.cc
│   │       ├── test_routing.cc
│   │       ├── test_setup_named_socket_service.cc
│   │       ├── test_setup_tcp_service.cc
│   │       └── test_x_protocol.cc
│   ├── syslog/
│   │   ├── CMakeLists.txt
│   │   └── src/
│   │       └── syslog.cc
│   └── x_protocol/
│       ├── CMakeLists.txt
│       ├── include/
│       │   └── mysqlrouter/
│       │       └── xprotocol.h
│       └── proto/
│           ├── mysqlx.proto
│           ├── mysqlx_connection.proto
│           ├── mysqlx_crud.proto
│           ├── mysqlx_datatypes.proto
│           ├── mysqlx_expect.proto
│           ├── mysqlx_expr.proto
│           ├── mysqlx_notice.proto
│           ├── mysqlx_resultset.proto
│           ├── mysqlx_session.proto
│           └── mysqlx_sql.proto
└── tests/
    ├── CMakeLists.txt
    ├── component/
    │   ├── CMakeLists.txt
    │   ├── data/
    │   │   ├── bootstrap.js
    │   │   ├── bootstrap_access_error_at_grant.js
    │   │   ├── bootstrap_account_host_multiple_patterns.js
    │   │   ├── bootstrap_account_host_pattern_too_long.js
    │   │   ├── bootstrap_big_data.js
    │   │   ├── bootstrap_exec_time_2_seconds.js
    │   │   ├── bootstrap_failover_at_crash.js
    │   │   ├── bootstrap_failover_at_grant.js
    │   │   ├── bootstrap_failover_reconfigure_ok.js
    │   │   ├── bootstrap_failover_reconfigure_ok_3_old_users.js
    │   │   ├── bootstrap_failover_super_read_only_1.js
    │   │   ├── bootstrap_failover_super_read_only_2.js
    │   │   ├── bootstrap_failover_super_read_only_dead_2nd_1.js
    │   │   ├── bootstrap_failover_super_read_only_delete_user.js
    │   │   ├── bootstrap_report_host.js
    │   │   ├── bootstrap_unsupported_schema_version.js
    │   │   ├── js_test_empty_file.js
    │   │   ├── js_test_nesting.js
    │   │   ├── js_test_parse_error.js
    │   │   ├── js_test_require.js
    │   │   ├── js_test_stmts_is_array.js
    │   │   ├── js_test_stmts_is_coroutine.js
    │   │   ├── js_test_stmts_is_empty.js
    │   │   ├── js_test_stmts_is_function.js
    │   │   ├── js_test_stmts_is_string.js
    │   │   ├── js_test_stmts_result_has_infinity.js
    │   │   ├── js_test_stmts_result_has_negative_int.js
    │   │   ├── js_test_stmts_result_has_repeat.js
    │   │   ├── local_modules/
    │   │   │   ├── common_statements.js
    │   │   │   ├── gr_memberships.js
    │   │   │   └── itertools.js
    │   │   ├── metadata_1_node.js
    │   │   ├── metadata_1_node_repeat.js
    │   │   ├── metadata_3_nodes_first_not_accessible.js
    │   │   ├── metadata_3_secondaries.js
    │   │   ├── metadata_3_secondaries_failed_to_update.js
    │   │   ├── metadata_3_secondaries_pass.js
    │   │   ├── metadata_3_secondaries_primary_failover.js
    │   │   ├── metadata_3_secondaries_server_removed_from_cluster.js
    │   │   ├── metadata_4_secondaries_partitioning.js
    │   │   ├── my_port.js
    │   │   ├── rest_server_mock.js
    │   │   ├── simple-client.js
    │   │   └── test_modules/
    │   │       ├── test-require-dir-with-indexjs/
    │   │       │   └── index.js
    │   │       ├── test-require-dir-with-packagejson/
    │   │       │   ├── foo.js
    │   │       │   └── package.json
    │   │       ├── test-require-direct.js
    │   │       ├── test-require-nesting-1.js
    │   │       ├── test-require-nesting-2.js
    │   │       ├── test-require-nesting-3.js
    │   │       ├── test-require-nesting-4.js
    │   │       └── test-require-nesting-5.js
    │   ├── test_bootstrap.cc
    │   ├── test_bootstrap_system_deployment.cc
    │   ├── test_component_test_framework.cc
    │   ├── test_config.cc
    │   ├── test_logging.cc
    │   ├── test_master_key_reader_writer.cc
    │   ├── test_metadata_ttl.cc
    │   ├── test_mock_server.cc
    │   ├── test_rest_mock_server.cc
    │   ├── test_routing.cc
    │   ├── test_routing_connection.cc
    │   ├── test_routing_strategy.cc
    │   └── test_user_option.cc
    ├── coverage.ignore
    ├── fuzzers/
    │   ├── CMakeLists.txt
    │   ├── README.txt
    │   ├── corpus/
    │   │   ├── fuzz_router_uri/
    │   │   │   ├── uri-1
    │   │   │   ├── uri-2
    │   │   │   └── uri-3
    │   │   └── fuzz_router_uri_tostring/
    │   │       └── uri-ipv6-zoneid
    │   ├── fuzz_router_uri.cc
    │   └── fuzz_router_uri_tostring.cc
    ├── gcoverage.sh
    ├── helpers/
    │   ├── cmd_exec-windows.cc
    │   ├── cmd_exec-windows.h
    │   ├── cmd_exec.cc
    │   ├── cmd_exec.h
    │   ├── gtest_consoleoutput.h
    │   ├── master_key_test_writer.cc
    │   ├── mysql_session_replayer.cc
    │   ├── mysql_session_replayer.h
    │   ├── router_component_test.cc
    │   ├── router_component_test.h
    │   ├── router_test_helpers.cc
    │   ├── router_test_helpers.h
    │   ├── script_generator.cc
    │   ├── script_generator.h
    │   ├── tcp_port_pool.cc
    │   └── tcp_port_pool.h
    ├── legal/
    │   ├── test_legal.cc
    │   └── test_project_name.cc
    └── tools/
        └── gtest_cxx.cc
Download .txt
Showing preview only (2,087K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (18479 symbols across 1150 files)

FILE: ext/duktape/duktape-2.1.0/extras/alloc-pool/duk_alloc_pool.c
  function duk__alloc_pool_dprintf (line 30) | static void duk__alloc_pool_dprintf(const char *fmt, ...) {
  function duk_free_pool (line 312) | void duk_free_pool(void *udata, void *ptr) {
  function duk__alloc_pool_romptr_init (line 347) | static void duk__alloc_pool_romptr_init(void) {
  function duk_uint16_t (line 368) | duk_uint16_t duk_alloc_pool_enc16_rom(void *ptr) {

FILE: ext/duktape/duktape-2.1.0/extras/alloc-pool/duk_alloc_pool.h
  type duk_pool_config (line 24) | typedef struct {
  type duk_pool_free (line 31) | struct duk_pool_free
  type duk_pool_free (line 32) | typedef struct duk_pool_free duk_pool_free;
  type duk_pool_free (line 33) | struct duk_pool_free {
  type duk_pool_state (line 38) | typedef struct {
  type duk_pool_global (line 48) | typedef struct {
  function duk_uint16_t (line 107) | static inline duk_uint16_t duk_alloc_pool_enc16(void *ptr) {

FILE: ext/duktape/duktape-2.1.0/extras/alloc-pool/test.c
  function my_fatal (line 6) | void my_fatal(const char *msg) {
  function duk_ret_t (line 12) | static duk_ret_t my_print(duk_context *ctx) {
  function dump_pool_state (line 20) | static void dump_pool_state(duk_pool_global *g) {
  function main (line 45) | int main(int argc, char *argv[]) {

FILE: ext/duktape/duktape-2.1.0/extras/console/duk_console.c
  function duk_ret_t (line 31) | static duk_ret_t duk__console_log_helper(duk_context *ctx, const char *e...
  function duk_ret_t (line 67) | static duk_ret_t duk__console_assert(duk_context *ctx) {
  function duk_ret_t (line 76) | static duk_ret_t duk__console_log(duk_context *ctx) {
  function duk_ret_t (line 80) | static duk_ret_t duk__console_trace(duk_context *ctx) {
  function duk_ret_t (line 84) | static duk_ret_t duk__console_info(duk_context *ctx) {
  function duk_ret_t (line 88) | static duk_ret_t duk__console_warn(duk_context *ctx) {
  function duk_ret_t (line 92) | static duk_ret_t duk__console_error(duk_context *ctx) {
  function duk_ret_t (line 96) | static duk_ret_t duk__console_dir(duk_context *ctx) {
  function duk__console_reg_vararg_func (line 101) | static void duk__console_reg_vararg_func(duk_context *ctx, duk_c_functio...
  function duk_console_init (line 109) | void duk_console_init(duk_context *ctx, duk_uint_t flags) {

FILE: ext/duktape/duktape-2.1.0/extras/console/test.c
  function main (line 5) | int main(int argc, char *argv[]) {

FILE: ext/duktape/duktape-2.1.0/extras/duk-v1-compat/duk_v1_compat.c
  function duk_dump_context_stdout (line 9) | void duk_dump_context_stdout(duk_context *ctx) {
  function duk_dump_context_stderr (line 15) | void duk_dump_context_stderr(duk_context *ctx) {
  function duk_eval_file (line 72) | void duk_eval_file(duk_context *ctx, const char *path) {
  function duk_eval_file_noresult (line 80) | void duk_eval_file_noresult(duk_context *ctx, const char *path) {
  function duk_int_t (line 85) | duk_int_t duk_peval_file(duk_context *ctx, const char *path) {
  function duk_int_t (line 99) | duk_int_t duk_peval_file_noresult(duk_context *ctx, const char *path) {
  function duk_compile_file (line 107) | void duk_compile_file(duk_context *ctx, duk_uint_t flags, const char *pa...
  function duk_int_t (line 113) | duk_int_t duk_pcompile_file(duk_context *ctx, duk_uint_t flags, const ch...
  function duk_to_defaultvalue (line 126) | void duk_to_defaultvalue(duk_context *ctx, duk_idx_t idx, duk_int_t hint) {

FILE: ext/duktape/duktape-2.1.0/extras/duk-v1-compat/test.c
  function duk_ret_t (line 5) | static duk_ret_t my_print(duk_context *ctx) {
  function main (line 14) | int main(int argc, char *argv[]) {

FILE: ext/duktape/duktape-2.1.0/extras/logging/duk_logging.c
  function duk_ret_t (line 27) | static duk_ret_t duk__logger_constructor(duk_context *ctx) {
  function duk_ret_t (line 85) | static duk_ret_t duk__logger_prototype_fmt(duk_context *ctx) {
  function duk_ret_t (line 108) | static duk_ret_t duk__logger_prototype_raw(duk_context *ctx) {
  function duk_ret_t (line 126) | static duk_ret_t duk__logger_prototype_log_shared(duk_context *ctx) {
  function duk_log_va (line 289) | void duk_log_va(duk_context *ctx, duk_int_t level, const char *fmt, va_l...
  function duk_log (line 312) | void duk_log(duk_context *ctx, duk_int_t level, const char *fmt, ...) {
  function duk_logging_init (line 320) | void duk_logging_init(duk_context *ctx, duk_uint_t flags) {

FILE: ext/duktape/duktape-2.1.0/extras/logging/test.c
  function duk_ret_t (line 5) | static duk_ret_t init_logging(duk_context *ctx, void *udata) {
  function main (line 24) | int main(int argc, char *argv[]) {

FILE: ext/duktape/duktape-2.1.0/extras/minimal-printf/duk_minimal_printf.c
  function duk__format_long (line 29) | static size_t duk__format_long(char *str,
  function duk__parse_pointer (line 90) | static int duk__parse_pointer(const char *str, void **out) {
  function duk_minimal_vsnprintf (line 131) | int duk_minimal_vsnprintf(char *str, size_t size, const char *format, va...
  function duk_minimal_snprintf (line 269) | int duk_minimal_snprintf(char *str, size_t size, const char *format, ...) {
  function duk_minimal_sprintf (line 281) | int duk_minimal_sprintf(char *str, const char *format, ...) {
  function duk_minimal_sscanf (line 293) | int duk_minimal_sscanf(const char *str, const char *format, ...) {

FILE: ext/duktape/duktape-2.1.0/extras/minimal-printf/test.c
  function init_buffer (line 7) | static void init_buffer(void) {
  function dump_buffer (line 15) | static void dump_buffer(void) {
  function main (line 44) | int main(int argc, char *argv[]) {

FILE: ext/duktape/duktape-2.1.0/extras/module-duktape/duk_module_duktape.c
  function duk__resolve_module_id (line 31) | static void duk__resolve_module_id(duk_context *ctx, const char *req_id,...
  function duk_ret_t (line 199) | static duk_ret_t duk__require(duk_context *ctx) {
  function duk_module_duktape_init (line 439) | void duk_module_duktape_init(duk_context *ctx) {

FILE: ext/duktape/duktape-2.1.0/extras/module-duktape/test.c
  function duk_ret_t (line 6) | static duk_ret_t handle_print(duk_context *ctx) {
  function duk_ret_t (line 11) | static duk_ret_t handle_assert(duk_context *ctx) {
  function main (line 20) | int main(int argc, char *argv[]) {

FILE: ext/duktape/duktape-2.1.0/extras/module-node/duk_module_node.c
  function duk_bool_t (line 17) | static duk_bool_t duk__get_cached_module(duk_context *ctx, const char *i...
  function duk__put_cached_module (line 34) | static void duk__put_cached_module(duk_context *ctx) {
  function duk__del_cached_module (line 50) | static void duk__del_cached_module(duk_context *ctx, const char *id) {
  function duk_ret_t (line 57) | static duk_ret_t duk__handle_require(duk_context *ctx) {
  function duk__push_require_function (line 148) | static void duk__push_require_function(duk_context *ctx, const char *id) {
  function duk__push_module_object (line 169) | static void duk__push_module_object(duk_context *ctx, const char *id, du...
  function duk_int_t (line 205) | static duk_int_t duk__eval_module_source(duk_context *ctx) {
  function duk_ret_t (line 265) | duk_ret_t duk_module_node_peval_main(duk_context *ctx, const char *path) {
  function duk_module_node_init (line 283) | void duk_module_node_init(duk_context *ctx) {

FILE: ext/duktape/duktape-2.1.0/extras/module-node/test.c
  function duk_ret_t (line 6) | static duk_ret_t cb_resolve_module(duk_context *ctx) {
  function duk_ret_t (line 20) | static duk_ret_t cb_load_module(duk_context *ctx) {
  function duk_ret_t (line 50) | static duk_ret_t handle_print(duk_context *ctx) {
  function duk_ret_t (line 55) | static duk_ret_t handle_assert(duk_context *ctx) {
  function main (line 63) | int main(int argc, char *argv[]) {

FILE: ext/duktape/duktape-2.1.0/extras/print-alert/duk_print_alert.c
  function duk_ret_t (line 14) | static duk_ret_t duk__print_alert_helper(duk_context *ctx, FILE *fh) {
  function duk_ret_t (line 44) | static duk_ret_t duk__print_alert_helper(duk_context *ctx, FILE *fh) {
  function duk_ret_t (line 107) | static duk_ret_t duk__print(duk_context *ctx) {
  function duk_ret_t (line 111) | static duk_ret_t duk__alert(duk_context *ctx) {
  function duk_print_alert_init (line 115) | void duk_print_alert_init(duk_context *ctx, duk_uint_t flags) {

FILE: ext/duktape/duktape-2.1.0/extras/print-alert/test.c
  function main (line 5) | int main(int argc, char *argv[]) {

FILE: ext/duktape/duktape-2.1.0/src/duk_config.h
  type duk_uint8_t (line 1575) | typedef uint8_t duk_uint8_t;
  type duk_int8_t (line 1576) | typedef int8_t duk_int8_t;
  type duk_uint16_t (line 1577) | typedef uint16_t duk_uint16_t;
  type duk_int16_t (line 1578) | typedef int16_t duk_int16_t;
  type duk_uint32_t (line 1579) | typedef uint32_t duk_uint32_t;
  type duk_int32_t (line 1580) | typedef int32_t duk_int32_t;
  type duk_uint64_t (line 1581) | typedef uint64_t duk_uint64_t;
  type duk_int64_t (line 1582) | typedef int64_t duk_int64_t;
  type uint_least8_t (line 1583) | typedef uint_least8_t duk_uint_least8_t;
  type int_least8_t (line 1584) | typedef int_least8_t duk_int_least8_t;
  type uint_least16_t (line 1585) | typedef uint_least16_t duk_uint_least16_t;
  type int_least16_t (line 1586) | typedef int_least16_t duk_int_least16_t;
  type uint_least32_t (line 1587) | typedef uint_least32_t duk_uint_least32_t;
  type int_least32_t (line 1588) | typedef int_least32_t duk_int_least32_t;
  type uint_least64_t (line 1589) | typedef uint_least64_t duk_uint_least64_t;
  type int_least64_t (line 1590) | typedef int_least64_t duk_int_least64_t;
  type uint_fast8_t (line 1591) | typedef uint_fast8_t duk_uint_fast8_t;
  type int_fast8_t (line 1592) | typedef int_fast8_t duk_int_fast8_t;
  type uint_fast16_t (line 1593) | typedef uint_fast16_t duk_uint_fast16_t;
  type int_fast16_t (line 1594) | typedef int_fast16_t duk_int_fast16_t;
  type uint_fast32_t (line 1595) | typedef uint_fast32_t duk_uint_fast32_t;
  type int_fast32_t (line 1596) | typedef int_fast32_t duk_int_fast32_t;
  type uint_fast64_t (line 1597) | typedef uint_fast64_t duk_uint_fast64_t;
  type int_fast64_t (line 1598) | typedef int_fast64_t duk_int_fast64_t;
  type duk_uintptr_t (line 1599) | typedef uintptr_t duk_uintptr_t;
  type duk_intptr_t (line 1600) | typedef intptr_t duk_intptr_t;
  type uintmax_t (line 1601) | typedef uintmax_t duk_uintmax_t;
  type intmax_t (line 1602) | typedef intmax_t duk_intmax_t;
  type duk_uint8_t (line 1682) | typedef unsigned char duk_uint8_t;
  type duk_int8_t (line 1683) | typedef signed char duk_int8_t;
  type duk_uint16_t (line 1689) | typedef unsigned short duk_uint16_t;
  type duk_int16_t (line 1690) | typedef signed short duk_int16_t;
  type duk_uint16_t (line 1693) | typedef unsigned int duk_uint16_t;
  type duk_int16_t (line 1694) | typedef signed int duk_int16_t;
  type duk_uint32_t (line 1700) | typedef unsigned int duk_uint32_t;
  type duk_int32_t (line 1701) | typedef signed int duk_int32_t;
  type duk_uint32_t (line 1704) | typedef unsigned long duk_uint32_t;
  type duk_int32_t (line 1705) | typedef signed long duk_int32_t;
  type duk_uint64_t (line 1727) | typedef unsigned long duk_uint64_t;
  type duk_int64_t (line 1728) | typedef signed long duk_int64_t;
  type duk_uint64_t (line 1734) | typedef unsigned long long duk_uint64_t;
  type duk_int64_t (line 1735) | typedef signed long long duk_int64_t;
  type duk_uint64_t (line 1741) | typedef unsigned long long duk_uint64_t;
  type duk_int64_t (line 1742) | typedef signed long long duk_int64_t;
  type duk_uint64_t (line 1748) | typedef unsigned long long duk_uint64_t;
  type duk_int64_t (line 1749) | typedef signed long long duk_int64_t;
  type duk_uint64_t (line 1756) | typedef unsigned long duk_uint64_t;
  type duk_int64_t (line 1757) | typedef signed long duk_int64_t;
  type duk_uint8_t (line 1763) | typedef duk_uint8_t duk_uint_least8_t;
  type duk_int8_t (line 1764) | typedef duk_int8_t duk_int_least8_t;
  type duk_uint16_t (line 1765) | typedef duk_uint16_t duk_uint_least16_t;
  type duk_int16_t (line 1766) | typedef duk_int16_t duk_int_least16_t;
  type duk_uint32_t (line 1767) | typedef duk_uint32_t duk_uint_least32_t;
  type duk_int32_t (line 1768) | typedef duk_int32_t duk_int_least32_t;
  type duk_uint8_t (line 1769) | typedef duk_uint8_t duk_uint_fast8_t;
  type duk_int8_t (line 1770) | typedef duk_int8_t duk_int_fast8_t;
  type duk_uint16_t (line 1771) | typedef duk_uint16_t duk_uint_fast16_t;
  type duk_int16_t (line 1772) | typedef duk_int16_t duk_int_fast16_t;
  type duk_uint32_t (line 1773) | typedef duk_uint32_t duk_uint_fast32_t;
  type duk_int32_t (line 1774) | typedef duk_int32_t duk_int_fast32_t;
  type duk_uint64_t (line 1776) | typedef duk_uint64_t duk_uint_least64_t;
  type duk_int64_t (line 1777) | typedef duk_int64_t duk_int_least64_t;
  type duk_uint64_t (line 1778) | typedef duk_uint64_t duk_uint_fast64_t;
  type duk_int64_t (line 1779) | typedef duk_int64_t duk_int_fast64_t;
  type duk_uint64_t (line 1782) | typedef duk_uint64_t duk_uintmax_t;
  type duk_int64_t (line 1783) | typedef duk_int64_t duk_intmax_t;
  type duk_uint32_t (line 1785) | typedef duk_uint32_t duk_uintmax_t;
  type duk_int32_t (line 1786) | typedef duk_int32_t duk_intmax_t;
  type duk_int32_t (line 1879) | typedef duk_int32_t duk_intptr_t;
  type duk_uint32_t (line 1880) | typedef duk_uint32_t duk_uintptr_t;
  type duk_int64_t (line 1886) | typedef duk_int64_t duk_intptr_t;
  type duk_uint64_t (line 1887) | typedef duk_uint64_t duk_uintptr_t;
  type duk_size_t (line 1912) | typedef size_t duk_size_t;
  type duk_ptrdiff_t (line 1913) | typedef ptrdiff_t duk_ptrdiff_t;
  type duk_int_t (line 1920) | typedef int duk_int_t;
  type duk_uint_t (line 1921) | typedef unsigned int duk_uint_t;
  type duk_int_fast32_t (line 1927) | typedef duk_int_fast32_t duk_int_t;
  type duk_uint_fast32_t (line 1928) | typedef duk_uint_fast32_t duk_uint_t;
  type duk_int_fast32_t (line 1939) | typedef duk_int_fast32_t duk_int_fast_t;
  type duk_uint_fast32_t (line 1940) | typedef duk_uint_fast32_t duk_uint_fast_t;
  type duk_small_int_t (line 1949) | typedef int duk_small_int_t;
  type duk_small_uint_t (line 1950) | typedef unsigned int duk_small_uint_t;
  type duk_int_fast16_t (line 1959) | typedef duk_int_fast16_t duk_small_int_fast_t;
  type duk_uint_fast16_t (line 1960) | typedef duk_uint_fast16_t duk_small_uint_fast_t;
  type duk_small_int_t (line 1967) | typedef duk_small_int_t duk_bool_t;
  type duk_int_t (line 1972) | typedef duk_int_t duk_idx_t;
  type duk_uint_t (line 1977) | typedef duk_uint_t duk_uidx_t;
  type duk_uint_t (line 1984) | typedef duk_uint_t duk_uarridx_t;
  type duk_small_int_t (line 1992) | typedef duk_small_int_t duk_ret_t;
  type duk_int_t (line 1999) | typedef duk_int_t duk_errcode_t;
  type duk_int_t (line 2010) | typedef duk_int_t duk_codepoint_t;
  type duk_uint_t (line 2011) | typedef duk_uint_t duk_ucodepoint_t;
  type duk_float_t (line 2018) | typedef float duk_float_t;
  type duk_double_t (line 2019) | typedef double duk_double_t;
  type duk_context (line 2039) | typedef struct duk_hthread duk_context;

FILE: ext/duktape/duktape-2.1.0/src/duktape.c
  type duk_double_union (line 254) | typedef union duk_double_union duk_double_union;
  type duk_jmpbuf (line 651) | struct duk_jmpbuf {
  type duk_jmpbuf (line 655) | struct duk_jmpbuf {
  function class (line 674) | class duk_internal_exception {
  type duk_jmpbuf (line 695) | struct duk_jmpbuf
  type duk_heaphdr (line 699) | struct duk_heaphdr
  type duk_heaphdr_string (line 700) | struct duk_heaphdr_string
  type duk_harray (line 701) | struct duk_harray
  type duk_hstring (line 702) | struct duk_hstring
  type duk_hstring_external (line 703) | struct duk_hstring_external
  type duk_hobject (line 704) | struct duk_hobject
  type duk_hcompfunc (line 705) | struct duk_hcompfunc
  type duk_hnatfunc (line 706) | struct duk_hnatfunc
  type duk_hthread (line 707) | struct duk_hthread
  type duk_hbufobj (line 708) | struct duk_hbufobj
  type duk_hdecenv (line 709) | struct duk_hdecenv
  type duk_hobjenv (line 710) | struct duk_hobjenv
  type duk_hbuffer (line 711) | struct duk_hbuffer
  type duk_hbuffer_fixed (line 712) | struct duk_hbuffer_fixed
  type duk_hbuffer_dynamic (line 713) | struct duk_hbuffer_dynamic
  type duk_hbuffer_external (line 714) | struct duk_hbuffer_external
  type duk_propaccessor (line 716) | struct duk_propaccessor
  type duk_propdesc (line 718) | struct duk_propdesc
  type duk_heap (line 720) | struct duk_heap
  type duk_breakpoint (line 721) | struct duk_breakpoint
  type duk_activation (line 723) | struct duk_activation
  type duk_catcher (line 724) | struct duk_catcher
  type duk_strcache (line 725) | struct duk_strcache
  type duk_ljstate (line 726) | struct duk_ljstate
  type duk_strtab_entry (line 727) | struct duk_strtab_entry
  type duk_fixedbuffer (line 730) | struct duk_fixedbuffer
  type duk_bitdecoder_ctx (line 733) | struct duk_bitdecoder_ctx
  type duk_bitencoder_ctx (line 734) | struct duk_bitencoder_ctx
  type duk_bufwriter_ctx (line 735) | struct duk_bufwriter_ctx
  type duk_token (line 737) | struct duk_token
  type duk_re_token (line 738) | struct duk_re_token
  type duk_lexer_point (line 739) | struct duk_lexer_point
  type duk_lexer_ctx (line 740) | struct duk_lexer_ctx
  type duk_lexer_codepoint (line 741) | struct duk_lexer_codepoint
  type duk_compiler_instr (line 743) | struct duk_compiler_instr
  type duk_compiler_func (line 744) | struct duk_compiler_func
  type duk_compiler_ctx (line 745) | struct duk_compiler_ctx
  type duk_re_matcher_ctx (line 747) | struct duk_re_matcher_ctx
  type duk_re_compiler_ctx (line 748) | struct duk_re_compiler_ctx
  type duk_jmpbuf (line 753) | typedef struct duk_jmpbuf duk_jmpbuf;
  type duk_heaphdr (line 757) | typedef struct duk_heaphdr duk_heaphdr;
  type duk_heaphdr_string (line 758) | typedef struct duk_heaphdr_string duk_heaphdr_string;
  type duk_harray (line 759) | typedef struct duk_harray duk_harray;
  type duk_hstring (line 760) | typedef struct duk_hstring duk_hstring;
  type duk_hstring_external (line 761) | typedef struct duk_hstring_external duk_hstring_external;
  type duk_hobject (line 762) | typedef struct duk_hobject duk_hobject;
  type duk_hcompfunc (line 763) | typedef struct duk_hcompfunc duk_hcompfunc;
  type duk_hnatfunc (line 764) | typedef struct duk_hnatfunc duk_hnatfunc;
  type duk_hthread (line 765) | typedef struct duk_hthread duk_hthread;
  type duk_hbufobj (line 766) | typedef struct duk_hbufobj duk_hbufobj;
  type duk_hdecenv (line 767) | typedef struct duk_hdecenv duk_hdecenv;
  type duk_hobjenv (line 768) | typedef struct duk_hobjenv duk_hobjenv;
  type duk_hbuffer (line 769) | typedef struct duk_hbuffer duk_hbuffer;
  type duk_hbuffer_fixed (line 770) | typedef struct duk_hbuffer_fixed duk_hbuffer_fixed;
  type duk_hbuffer_dynamic (line 771) | typedef struct duk_hbuffer_dynamic duk_hbuffer_dynamic;
  type duk_hbuffer_external (line 772) | typedef struct duk_hbuffer_external duk_hbuffer_external;
  type duk_propaccessor (line 774) | typedef struct duk_propaccessor duk_propaccessor;
  type duk_propvalue (line 775) | typedef union duk_propvalue duk_propvalue;
  type duk_propdesc (line 776) | typedef struct duk_propdesc duk_propdesc;
  type duk_heap (line 778) | typedef struct duk_heap duk_heap;
  type duk_breakpoint (line 779) | typedef struct duk_breakpoint duk_breakpoint;
  type duk_activation (line 781) | typedef struct duk_activation duk_activation;
  type duk_catcher (line 782) | typedef struct duk_catcher duk_catcher;
  type duk_strcache (line 783) | typedef struct duk_strcache duk_strcache;
  type duk_ljstate (line 784) | typedef struct duk_ljstate duk_ljstate;
  type duk_strtab_entry (line 785) | typedef struct duk_strtab_entry duk_strtab_entry;
  type duk_fixedbuffer (line 788) | typedef struct duk_fixedbuffer duk_fixedbuffer;
  type duk_bitdecoder_ctx (line 791) | typedef struct duk_bitdecoder_ctx duk_bitdecoder_ctx;
  type duk_bitencoder_ctx (line 792) | typedef struct duk_bitencoder_ctx duk_bitencoder_ctx;
  type duk_bufwriter_ctx (line 793) | typedef struct duk_bufwriter_ctx duk_bufwriter_ctx;
  type duk_token (line 795) | typedef struct duk_token duk_token;
  type duk_re_token (line 796) | typedef struct duk_re_token duk_re_token;
  type duk_lexer_point (line 797) | typedef struct duk_lexer_point duk_lexer_point;
  type duk_lexer_ctx (line 798) | typedef struct duk_lexer_ctx duk_lexer_ctx;
  type duk_lexer_codepoint (line 799) | typedef struct duk_lexer_codepoint duk_lexer_codepoint;
  type duk_compiler_instr (line 801) | typedef struct duk_compiler_instr duk_compiler_instr;
  type duk_compiler_func (line 802) | typedef struct duk_compiler_func duk_compiler_func;
  type duk_compiler_ctx (line 803) | typedef struct duk_compiler_ctx duk_compiler_ctx;
  type duk_re_matcher_ctx (line 805) | typedef struct duk_re_matcher_ctx duk_re_matcher_ctx;
  type duk_re_compiler_ctx (line 806) | typedef struct duk_re_compiler_ctx duk_re_compiler_ctx;
  type duk_tval (line 844) | typedef union duk_double_union duk_tval;
  type duk_tval_unused (line 845) | typedef struct {
  type duk_tval (line 1109) | typedef struct duk_tval_struct duk_tval;
  type duk_tval_struct (line 1111) | struct duk_tval_struct {
  type duk_tval_unused (line 1132) | typedef struct {
  type duk_bitdecoder_ctx (line 2275) | struct duk_bitdecoder_ctx {
  type duk_bitencoder_ctx (line 2289) | struct duk_bitencoder_ctx {
  type duk_bufwriter_ctx (line 2360) | struct duk_bufwriter_ctx {
  type duk_uint32_t (line 3035) | typedef duk_uint32_t duk_instr_t;
  type duk_token (line 3775) | struct duk_token {
  type duk_re_token (line 3791) | struct duk_re_token {
  type duk_lexer_point (line 3800) | struct duk_lexer_point {
  type duk_lexer_codepoint (line 3806) | struct duk_lexer_codepoint {
  type duk_lexer_ctx (line 3813) | struct duk_lexer_ctx {
  type duk_uint32_t (line 3902) | typedef duk_uint32_t duk_regconst_t;
  type duk_int32_t (line 3905) | typedef duk_int32_t duk_reg_t;
  type duk_ispec (line 3907) | typedef struct {
  type duk_ivalue (line 3913) | typedef struct {
  type duk_compiler_instr (line 3934) | struct duk_compiler_instr {
  type duk_labelinfo (line 3952) | typedef struct {
  type duk_compiler_func (line 3970) | struct duk_compiler_func {
  type duk_compiler_ctx (line 4053) | struct duk_compiler_ctx {
  type duk_re_matcher_ctx (line 4131) | struct duk_re_matcher_ctx {
  type duk_re_compiler_ctx (line 4147) | struct duk_re_compiler_ctx {
  type duk_heaphdr (line 4208) | struct duk_heaphdr {
  type duk_heaphdr_string (line 4255) | struct duk_heaphdr_string {
  type duk_hstring (line 5651) | struct duk_hstring {
  type duk_hstring_external (line 5698) | struct duk_hstring_external {
  type duk_propaccessor (line 6416) | struct duk_propaccessor {
  type duk_propdesc (line 6430) | struct duk_propdesc {
  type duk_hobject (line 6442) | struct duk_hobject {
  type duk_hcompfunc (line 6808) | struct duk_hcompfunc {
  type duk_hnatfunc (line 6948) | struct duk_hnatfunc {
  type duk_hbufobj (line 7070) | struct duk_hbufobj {
  type duk_activation (line 7324) | struct duk_activation {
  type duk_catcher (line 7376) | struct duk_catcher {
  type duk_hthread (line 7385) | struct duk_hthread {
  type duk_harray (line 7543) | struct duk_harray {
  type duk_hdecenv (line 7589) | struct duk_hdecenv {
  type duk_hobjenv (line 7602) | struct duk_hobjenv {
  type duk_hbuffer (line 7790) | struct duk_hbuffer {
  type duk_hbuffer_fixed (line 7836) | struct duk_hbuffer_fixed {
  type duk_hbuffer_dynamic (line 7890) | struct duk_hbuffer_dynamic {
  type duk_hbuffer_external (line 7919) | struct duk_hbuffer_external {
  type duk_breakpoint (line 8214) | struct duk_breakpoint {
  type duk_strcache (line 8228) | struct duk_strcache {
  type duk_ljstate (line 8239) | struct duk_ljstate {
  type duk_heap (line 8263) | struct duk_heap {
  type duk_fixedbuffer (line 8847) | struct duk_fixedbuffer {
  type duk_json_enc_ctx (line 9679) | typedef struct {
  type duk_json_dec_ctx (line 9707) | typedef struct {
  function DUK_INTERNAL (line 10032) | DUK_INTERNAL int duk_repl_fpclassify(double x) {
  function DUK_INTERNAL (line 10064) | DUK_INTERNAL int duk_repl_signbit(double x) {
  function DUK_INTERNAL (line 10072) | DUK_INTERNAL int duk_repl_isfinite(double x) {
  function DUK_INTERNAL (line 10083) | DUK_INTERNAL int duk_repl_isnan(double x) {
  function DUK_INTERNAL (line 10090) | DUK_INTERNAL int duk_repl_isinf(double x) {
  function DUK_INTERNAL (line 10119) | DUK_INTERNAL void duk_debug_log(duk_int_t level, const char *file, duk_i...
  function DUK_INTERNAL (line 10150) | DUK_INTERNAL void duk_debug_log(const char *fmt, ...) {
  function duk_err_handle_error_fmt (line 10975) | void duk_err_handle_error_fmt(duk_hthread *thr, const char *filename, du...
  function duk_err_handle_error (line 10985) | void duk_err_handle_error(duk_hthread *thr, const char *filename, duk_ui...
  function duk_err_handle_error (line 10991) | void duk_err_handle_error(duk_hthread *thr, duk_errcode_t code) {
  function duk_err_require_type_index (line 11003) | void duk_err_require_type_index(duk_hthread *thr, const char *filename, ...
  function duk_err_require_type_index (line 11008) | void duk_err_require_type_index(duk_hthread *thr, const char *filename, ...
  function duk_err_error_internal (line 11013) | void duk_err_error_internal(duk_hthread *thr, const char *filename, duk_...
  function duk_err_error_alloc_failed (line 11016) | void duk_err_error_alloc_failed(duk_hthread *thr, const char *filename, ...
  function duk_err_error (line 11019) | void duk_err_error(duk_hthread *thr, const char *filename, duk_int_t lin...
  function duk_err_range (line 11022) | void duk_err_range(duk_hthread *thr, const char *filename, duk_int_t lin...
  function duk_err_range_index (line 11025) | void duk_err_range_index(duk_hthread *thr, const char *filename, duk_int...
  function duk_err_range_push_beyond (line 11028) | void duk_err_range_push_beyond(duk_hthread *thr, const char *filename, d...
  function duk_err_type_invalid_args (line 11031) | void duk_err_type_invalid_args(duk_hthread *thr, const char *filename, d...
  function duk_err_type_invalid_state (line 11034) | void duk_err_type_invalid_state(duk_hthread *thr, const char *filename, ...
  function duk_err_type_invalid_trap_result (line 11037) | void duk_err_type_invalid_trap_result(duk_hthread *thr, const char *file...
  function DUK_LOCAL (line 11046) | DUK_LOCAL void duk__err_shared(duk_hthread *thr, duk_uint_t code) {
  function duk_err_error (line 11049) | void duk_err_error(duk_hthread *thr) {
  function duk_err_range (line 11052) | void duk_err_range(duk_hthread *thr) {
  function duk_err_eval (line 11055) | void duk_err_eval(duk_hthread *thr) {
  function duk_err_reference (line 11058) | void duk_err_reference(duk_hthread *thr) {
  function duk_err_syntax (line 11061) | void duk_err_syntax(duk_hthread *thr) {
  function duk_err_type (line 11064) | void duk_err_type(duk_hthread *thr) {
  function duk_err_uri (line 11067) | void duk_err_uri(duk_hthread *thr) {
  function duk_default_fatal_handler (line 11076) | void duk_default_fatal_handler(void *udata, const char *msg) {
  function DUK_INTERNAL (line 11133) | DUK_INTERNAL duk_small_int_t duk_unicode_get_xutf8_length(duk_ucodepoint...
  function DUK_INTERNAL (line 11160) | DUK_INTERNAL duk_small_int_t duk_unicode_get_cesu8_length(duk_ucodepoint...
  function DUK_INTERNAL (line 11189) | DUK_INTERNAL duk_small_int_t duk_unicode_encode_xutf8(duk_ucodepoint_t c...
  function DUK_INTERNAL (line 11223) | DUK_INTERNAL duk_small_int_t duk_unicode_encode_cesu8(duk_ucodepoint_t c...
  function DUK_INTERNAL (line 11283) | DUK_INTERNAL duk_small_int_t duk_unicode_decode_xutf8(duk_hthread *thr, ...
  function DUK_INTERNAL (line 11376) | DUK_INTERNAL duk_ucodepoint_t duk_unicode_decode_xutf8_checked(duk_hthre...
  function DUK_INTERNAL (line 11402) | DUK_INTERNAL duk_size_t duk_unicode_unvalidated_utf8_length(const duk_ui...
  function DUK_INTERNAL (line 11428) | DUK_INTERNAL duk_size_t duk_unicode_unvalidated_utf8_length(const duk_ui...
  function DUK_LOCAL (line 11509) | DUK_LOCAL duk_uint32_t duk__uni_decode_value(duk_bitdecoder_ctx *bd_ctx) {
  function DUK_LOCAL (line 11529) | DUK_LOCAL duk_small_int_t duk__uni_range_match(const duk_uint8_t *unitab...
  function DUK_INTERNAL (line 11566) | DUK_INTERNAL duk_small_int_t duk_unicode_is_whitespace(duk_codepoint_t c...
  function DUK_INTERNAL (line 11646) | DUK_INTERNAL duk_small_int_t duk_unicode_is_line_terminator(duk_codepoin...
  function DUK_INTERNAL (line 11666) | DUK_INTERNAL duk_small_int_t duk_unicode_is_identifier_start(duk_codepoi...
  function DUK_INTERNAL (line 11745) | DUK_INTERNAL duk_small_int_t duk_unicode_is_identifier_part(duk_codepoin...
  function DUK_INTERNAL (line 11841) | DUK_INTERNAL duk_small_int_t duk_unicode_is_letter(duk_codepoint_t cp) {
  function DUK_LOCAL (line 11916) | DUK_LOCAL
  function DUK_LOCAL (line 12022) | DUK_LOCAL
  function DUK_INTERNAL (line 12112) | DUK_INTERNAL void duk_unicode_case_convert_string(duk_hthread *thr, duk_...
  function DUK_INTERNAL (line 12181) | DUK_INTERNAL duk_codepoint_t duk_unicode_re_canonicalize_char(duk_hthrea...
  function DUK_INTERNAL (line 12216) | DUK_INTERNAL duk_small_int_t duk_unicode_re_is_wordchar(duk_codepoint_t ...
  function DUK_INTERNAL (line 12493) | DUK_INTERNAL void duk_byteswap_bytes(duk_uint8_t *p, duk_small_uint_t le...
  function DUK_INTERNAL (line 12516) | DUK_INTERNAL duk_bool_t duk_is_whole_get_int32_nonegzero(duk_double_t x,...
  function DUK_INTERNAL (line 12537) | DUK_INTERNAL duk_bool_t duk_is_whole_get_int32(duk_double_t x, duk_int32...
  function DUK_INTERNAL (line 12552) | DUK_INTERNAL duk_bool_t duk_double_is_anyinf(duk_double_t x) {
  function DUK_INTERNAL (line 12558) | DUK_INTERNAL duk_bool_t duk_double_is_posinf(duk_double_t x) {
  function DUK_INTERNAL (line 12564) | DUK_INTERNAL duk_bool_t duk_double_is_neginf(duk_double_t x) {
  function DUK_INTERNAL (line 12570) | DUK_INTERNAL duk_bool_t duk_double_is_nan(duk_double_t x) {
  function DUK_INTERNAL (line 12580) | DUK_INTERNAL duk_bool_t duk_double_is_nan_or_zero(duk_double_t x) {
  function DUK_INTERNAL (line 12590) | DUK_INTERNAL duk_bool_t duk_double_is_nan_or_inf(duk_double_t x) {
  function DUK_INTERNAL (line 12607) | DUK_INTERNAL duk_bool_t duk_double_is_nan_zero_inf(duk_double_t x) {
  function DUK_INTERNAL (line 12647) | DUK_INTERNAL duk_small_uint_t duk_double_signbit(duk_double_t x) {
  function DUK_INTERNAL (line 12653) | DUK_INTERNAL duk_double_t duk_double_trunc_towards_zero(duk_double_t x) {
  function DUK_INTERNAL (line 12663) | DUK_INTERNAL duk_bool_t duk_double_same_sign(duk_double_t x, duk_double_...
  function DUK_INTERNAL (line 12672) | DUK_INTERNAL duk_double_t duk_double_fmin(duk_double_t x, duk_double_t y) {
  function DUK_INTERNAL (line 12681) | DUK_INTERNAL duk_double_t duk_double_fmax(duk_double_t x, duk_double_t y) {
  function DUK_INTERNAL (line 12828) | DUK_INTERNAL void *duk_default_alloc_function(void *udata, duk_size_t si...
  function DUK_INTERNAL (line 12837) | DUK_INTERNAL void *duk_default_realloc_function(void *udata, void *ptr, ...
  function DUK_INTERNAL (line 12846) | DUK_INTERNAL void duk_default_free_function(void *udata, void *ptr) {
  function DUK_EXTERNAL (line 12858) | DUK_EXTERNAL void *duk_resize_buffer(duk_context *ctx, duk_idx_t idx, du...
  function DUK_EXTERNAL (line 12877) | DUK_EXTERNAL void *duk_steal_buffer(duk_context *ctx, duk_idx_t idx, duk...
  function DUK_EXTERNAL (line 12908) | DUK_EXTERNAL void duk_config_buffer(duk_context *ctx, duk_idx_t idx, voi...
  function DUK_LOCAL (line 12951) | DUK_LOCAL duk_uint8_t *duk__load_string_raw(duk_context *ctx, duk_uint8_...
  function DUK_LOCAL (line 12960) | DUK_LOCAL duk_uint8_t *duk__load_buffer_raw(duk_context *ctx, duk_uint8_...
  function DUK_LOCAL (line 12972) | DUK_LOCAL duk_uint8_t *duk__dump_hstring_raw(duk_uint8_t *p, duk_hstring...
  function DUK_LOCAL (line 12989) | DUK_LOCAL duk_uint8_t *duk__dump_hbuffer_raw(duk_hthread *thr, duk_uint8...
  function DUK_LOCAL (line 13008) | DUK_LOCAL duk_uint8_t *duk__dump_string_prop(duk_hthread *thr, duk_uint8...
  function DUK_LOCAL (line 13026) | DUK_LOCAL duk_uint8_t *duk__dump_buffer_prop(duk_hthread *thr, duk_uint8...
  function DUK_LOCAL (line 13044) | DUK_LOCAL duk_uint8_t *duk__dump_uint32_prop(duk_hthread *thr, duk_uint8...
  function DUK_LOCAL (line 13059) | DUK_LOCAL duk_uint8_t *duk__dump_varmap(duk_hthread *thr, duk_uint8_t *p...
  function DUK_LOCAL (line 13105) | DUK_LOCAL duk_uint8_t *duk__dump_formals(duk_hthread *thr, duk_uint8_t *...
  function duk_uint8_t (line 13147) | static duk_uint8_t *duk__dump_func(duk_context *ctx, duk_hcompfunc *func...
  function duk_uint8_t (line 13307) | static duk_uint8_t *duk__load_func(duk_context *ctx, duk_uint8_t *p, duk...
  function DUK_EXTERNAL (line 13614) | DUK_EXTERNAL void duk_dump_function(duk_context *ctx) {
  function DUK_EXTERNAL (line 13648) | DUK_EXTERNAL void duk_load_function(duk_context *ctx) {
  function DUK_EXTERNAL (line 13690) | DUK_EXTERNAL void duk_dump_function(duk_context *ctx) {
  function DUK_EXTERNAL (line 13694) | DUK_EXTERNAL void duk_load_function(duk_context *ctx) {
  function DUK_LOCAL (line 13718) | DUK_LOCAL void duk__call_prop_prep_stack(duk_context *ctx, duk_idx_t nor...
  function DUK_EXTERNAL (line 13744) | DUK_EXTERNAL void duk_call(duk_context *ctx, duk_idx_t nargs) {
  function DUK_EXTERNAL (line 13771) | DUK_EXTERNAL void duk_call_method(duk_context *ctx, duk_idx_t nargs) {
  function DUK_EXTERNAL (line 13792) | DUK_EXTERNAL void duk_call_prop(duk_context *ctx, duk_idx_t obj_idx, duk...
  function DUK_EXTERNAL (line 13809) | DUK_EXTERNAL duk_int_t duk_pcall(duk_context *ctx, duk_idx_t nargs) {
  function DUK_EXTERNAL (line 13847) | DUK_EXTERNAL duk_int_t duk_pcall_method(duk_context *ctx, duk_idx_t narg...
  type duk__pcall_prop_args (line 13872) | struct duk__pcall_prop_args {
  type duk__pcall_prop_args (line 13876) | typedef struct duk__pcall_prop_args duk__pcall_prop_args;
  function DUK_LOCAL (line 13878) | DUK_LOCAL duk_ret_t duk__pcall_prop_raw(duk_context *ctx, void *udata) {
  function DUK_EXTERNAL (line 13896) | DUK_EXTERNAL duk_int_t duk_pcall_prop(duk_context *ctx, duk_idx_t obj_id...
  function DUK_EXTERNAL (line 13916) | DUK_EXTERNAL duk_int_t duk_safe_call(duk_context *ctx, duk_safe_call_fun...
  function DUK_EXTERNAL (line 13938) | DUK_EXTERNAL void duk_new(duk_context *ctx, duk_idx_t nargs) {
  function DUK_LOCAL (line 14146) | DUK_LOCAL duk_ret_t duk__pnew_helper(duk_context *ctx, void *udata) {
  function DUK_EXTERNAL (line 14156) | DUK_EXTERNAL duk_int_t duk_pnew(duk_context *ctx, duk_idx_t nargs) {
  function DUK_EXTERNAL (line 14173) | DUK_EXTERNAL duk_bool_t duk_is_constructor_call(duk_context *ctx) {
  function DUK_INTERNAL (line 14191) | DUK_INTERNAL void duk_require_constructor_call(duk_context *ctx) {
  function DUK_EXTERNAL (line 14197) | DUK_EXTERNAL duk_bool_t duk_is_strict_call(duk_context *ctx) {
  function DUK_EXTERNAL (line 14227) | DUK_EXTERNAL duk_int_t duk_get_current_magic(duk_context *ctx) {
  function DUK_EXTERNAL (line 14255) | DUK_EXTERNAL duk_int_t duk_get_magic(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 14281) | DUK_EXTERNAL void duk_set_magic(duk_context *ctx, duk_idx_t idx, duk_int...
  function DUK_INTERNAL (line 14295) | DUK_INTERNAL void duk_resolve_nonbound_function(duk_context *ctx) {
  function DUK_LOCAL (line 14334) | DUK_LOCAL const duk_uint8_t *duk__prep_codec_arg(duk_context *ctx, duk_i...
  function DUK_LOCAL (line 14352) | DUK_LOCAL void duk__base64_encode_helper(const duk_uint8_t *src, duk_siz...
  function DUK_LOCAL (line 14408) | DUK_LOCAL void duk__base64_encode_helper(const duk_uint8_t *src, duk_siz...
  function DUK_LOCAL (line 14466) | DUK_LOCAL duk_bool_t duk__base64_decode_helper(const duk_uint8_t *src, d...
  function DUK_LOCAL (line 14601) | DUK_LOCAL duk_bool_t duk__base64_decode_helper(const duk_uint8_t *src, d...
  function DUK_EXTERNAL (line 14697) | DUK_EXTERNAL const char *duk_base64_encode(duk_context *ctx, duk_idx_t i...
  function DUK_EXTERNAL (line 14737) | DUK_EXTERNAL void duk_base64_decode(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 14781) | DUK_EXTERNAL const char *duk_hex_encode(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 14837) | DUK_EXTERNAL void duk_hex_decode(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 14922) | DUK_EXTERNAL const char *duk_json_encode(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 14948) | DUK_EXTERNAL void duk_json_decode(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 14968) | DUK_EXTERNAL const char *duk_json_encode(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 14973) | DUK_EXTERNAL void duk_json_decode(duk_context *ctx, duk_idx_t idx) {
  type duk__compile_raw_args (line 14984) | typedef struct duk__compile_raw_args duk__compile_raw_args;
  type duk__compile_raw_args (line 14985) | struct duk__compile_raw_args {
  function DUK_EXTERNAL (line 14992) | DUK_EXTERNAL duk_int_t duk_eval_raw(duk_context *ctx, const char *src_bu...
  function DUK_LOCAL (line 15035) | DUK_LOCAL duk_ret_t duk__do_compile(duk_context *ctx, void *udata) {
  function DUK_EXTERNAL (line 15108) | DUK_EXTERNAL duk_int_t duk_compile_raw(duk_context *ctx, const char *src...
  function DUK_EXTERNAL (line 15157) | DUK_EXTERNAL void duk_push_context_dump(duk_context *ctx) {
  function DUK_EXTERNAL (line 15191) | DUK_EXTERNAL void duk_push_context_dump(duk_context *ctx) {
  function DUK_EXTERNAL (line 15198) | DUK_EXTERNAL void duk_debugger_attach(duk_context *ctx,
  function DUK_EXTERNAL (line 15262) | DUK_EXTERNAL void duk_debugger_detach(duk_context *ctx) {
  function DUK_EXTERNAL (line 15276) | DUK_EXTERNAL void duk_debugger_cooperate(duk_context *ctx) {
  function DUK_EXTERNAL (line 15300) | DUK_EXTERNAL duk_bool_t duk_debugger_notify(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 15339) | DUK_EXTERNAL void duk_debugger_pause(duk_context *ctx) {
  function DUK_EXTERNAL (line 15368) | DUK_EXTERNAL void duk_debugger_attach(duk_context *ctx,
  function DUK_EXTERNAL (line 15389) | DUK_EXTERNAL void duk_debugger_detach(duk_context *ctx) {
  function DUK_EXTERNAL (line 15394) | DUK_EXTERNAL void duk_debugger_cooperate(duk_context *ctx) {
  function DUK_EXTERNAL (line 15400) | DUK_EXTERNAL duk_bool_t duk_debugger_notify(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 15416) | DUK_EXTERNAL void duk_debugger_pause(duk_context *ctx) {
  type duk_internal_thread_state (line 15429) | typedef struct duk_internal_thread_state duk_internal_thread_state;
  type duk_internal_thread_state (line 15431) | struct duk_internal_thread_state {
  function DUK_EXTERNAL (line 15438) | DUK_EXTERNAL
  function DUK_EXTERNAL (line 15490) | DUK_EXTERNAL void duk_destroy_heap(duk_context *ctx) {
  function DUK_EXTERNAL (line 15503) | DUK_EXTERNAL void duk_suspend(duk_context *ctx, duk_thread_state *state) {
  function DUK_EXTERNAL (line 15547) | DUK_EXTERNAL void duk_resume(duk_context *ctx, const duk_thread_state *s...
  function DUK_EXTERNAL (line 15574) | DUK_EXTERNAL void duk_set_global_object(duk_context *ctx) {
  function DUK_LOCAL (line 15641) | DUK_LOCAL void duk__inspect_multiple_uint(duk_context *ctx, const char *...
  function DUK_EXTERNAL (line 15688) | DUK_EXTERNAL void duk_inspect_value(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 15818) | DUK_EXTERNAL void duk_inspect_callstack_entry(duk_context *ctx, duk_int_...
  function DUK_EXTERNAL (line 15885) | DUK_EXTERNAL void *duk_alloc_raw(duk_context *ctx, duk_size_t size) {
  function DUK_EXTERNAL (line 15893) | DUK_EXTERNAL void duk_free_raw(duk_context *ctx, void *ptr) {
  function DUK_EXTERNAL (line 15901) | DUK_EXTERNAL void *duk_realloc_raw(duk_context *ctx, void *ptr, duk_size...
  function DUK_EXTERNAL (line 15909) | DUK_EXTERNAL void *duk_alloc(duk_context *ctx, duk_size_t size) {
  function DUK_EXTERNAL (line 15917) | DUK_EXTERNAL void duk_free(duk_context *ctx, void *ptr) {
  function DUK_EXTERNAL (line 15925) | DUK_EXTERNAL void *duk_realloc(duk_context *ctx, void *ptr, duk_size_t s...
  function DUK_EXTERNAL (line 15943) | DUK_EXTERNAL void duk_get_memory_functions(duk_context *ctx, duk_memory_...
  function DUK_EXTERNAL (line 15959) | DUK_EXTERNAL void duk_gc(duk_context *ctx, duk_uint_t flags) {
  function DUK_EXTERNAL (line 15987) | DUK_EXTERNAL duk_bool_t duk_get_prop(duk_context *ctx, duk_idx_t obj_idx) {
  function DUK_EXTERNAL (line 16010) | DUK_EXTERNAL duk_bool_t duk_get_prop_string(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 16019) | DUK_EXTERNAL duk_bool_t duk_get_prop_lstring(duk_context *ctx, duk_idx_t...
  function DUK_EXTERNAL (line 16028) | DUK_EXTERNAL duk_bool_t duk_get_prop_index(duk_context *ctx, duk_idx_t o...
  function DUK_INTERNAL (line 16036) | DUK_INTERNAL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 16048) | DUK_INTERNAL duk_bool_t duk_get_prop_stridx_short_raw(duk_context *ctx, ...
  function DUK_INTERNAL (line 16053) | DUK_INTERNAL duk_bool_t duk_get_prop_stridx_boolean(duk_context *ctx, du...
  function DUK_LOCAL (line 16069) | DUK_LOCAL duk_bool_t duk__put_prop_shared(duk_context *ctx, duk_idx_t ob...
  function DUK_EXTERNAL (line 16100) | DUK_EXTERNAL duk_bool_t duk_put_prop(duk_context *ctx, duk_idx_t obj_idx) {
  function DUK_EXTERNAL (line 16105) | DUK_EXTERNAL duk_bool_t duk_put_prop_string(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 16118) | DUK_EXTERNAL duk_bool_t duk_put_prop_lstring(duk_context *ctx, duk_idx_t...
  function DUK_EXTERNAL (line 16127) | DUK_EXTERNAL duk_bool_t duk_put_prop_index(duk_context *ctx, duk_idx_t o...
  function DUK_INTERNAL (line 16135) | DUK_INTERNAL duk_bool_t duk_put_prop_stridx(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 16147) | DUK_INTERNAL duk_bool_t duk_put_prop_stridx_short_raw(duk_context *ctx, ...
  function DUK_EXTERNAL (line 16152) | DUK_EXTERNAL duk_bool_t duk_del_prop(duk_context *ctx, duk_idx_t obj_idx) {
  function DUK_EXTERNAL (line 16176) | DUK_EXTERNAL duk_bool_t duk_del_prop_string(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 16185) | DUK_EXTERNAL duk_bool_t duk_del_prop_lstring(duk_context *ctx, duk_idx_t...
  function DUK_EXTERNAL (line 16194) | DUK_EXTERNAL duk_bool_t duk_del_prop_index(duk_context *ctx, duk_idx_t o...
  function DUK_INTERNAL (line 16202) | DUK_INTERNAL duk_bool_t duk_del_prop_stridx(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 16215) | DUK_INTERNAL duk_bool_t duk_del_prop_stridx_short_raw(duk_context *ctx, ...
  function DUK_EXTERNAL (line 16221) | DUK_EXTERNAL duk_bool_t duk_has_prop(duk_context *ctx, duk_idx_t obj_idx) {
  function DUK_EXTERNAL (line 16243) | DUK_EXTERNAL duk_bool_t duk_has_prop_string(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 16252) | DUK_EXTERNAL duk_bool_t duk_has_prop_lstring(duk_context *ctx, duk_idx_t...
  function DUK_EXTERNAL (line 16261) | DUK_EXTERNAL duk_bool_t duk_has_prop_index(duk_context *ctx, duk_idx_t o...
  function DUK_INTERNAL (line 16269) | DUK_INTERNAL duk_bool_t duk_has_prop_stridx(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 16282) | DUK_INTERNAL duk_bool_t duk_has_prop_stridx_short_raw(duk_context *ctx, ...
  function DUK_INTERNAL (line 16293) | DUK_INTERNAL void duk_xdef_prop(duk_context *ctx, duk_idx_t obj_idx, duk...
  function DUK_INTERNAL (line 16311) | DUK_INTERNAL void duk_xdef_prop_index(duk_context *ctx, duk_idx_t obj_id...
  function DUK_INTERNAL (line 16324) | DUK_INTERNAL void duk_xdef_prop_stridx(duk_context *ctx, duk_idx_t obj_i...
  function DUK_INTERNAL (line 16342) | DUK_INTERNAL void duk_xdef_prop_stridx_short_raw(duk_context *ctx, duk_u...
  function DUK_INTERNAL (line 16348) | DUK_INTERNAL void duk_xdef_prop_stridx_builtin(duk_context *ctx, duk_idx...
  function DUK_INTERNAL (line 16372) | DUK_INTERNAL void duk_xdef_prop_stridx_thrower(duk_context *ctx, duk_idx...
  function DUK_EXTERNAL (line 16381) | DUK_EXTERNAL void duk_get_prop_desc(duk_context *ctx, duk_idx_t obj_idx,...
  function DUK_EXTERNAL (line 16388) | DUK_EXTERNAL void duk_def_prop(duk_context *ctx, duk_idx_t obj_idx, duk_...
  function DUK_EXTERNAL (line 16482) | DUK_EXTERNAL void duk_compact(duk_context *ctx, duk_idx_t obj_idx) {
  function DUK_INTERNAL (line 16495) | DUK_INTERNAL void duk_compact_m1(duk_context *ctx) {
  function DUK_EXTERNAL (line 16501) | DUK_EXTERNAL void duk_enum(duk_context *ctx, duk_idx_t obj_idx, duk_uint...
  function DUK_EXTERNAL (line 16509) | DUK_EXTERNAL duk_bool_t duk_next(duk_context *ctx, duk_idx_t enum_index,...
  function DUK_EXTERNAL (line 16521) | DUK_EXTERNAL void duk_put_function_list(duk_context *ctx, duk_idx_t obj_...
  function DUK_EXTERNAL (line 16536) | DUK_EXTERNAL void duk_put_number_list(duk_context *ctx, duk_idx_t obj_id...
  function DUK_EXTERNAL (line 16558) | DUK_EXTERNAL duk_bool_t duk_get_global_string(duk_context *ctx, const ch...
  function DUK_EXTERNAL (line 16573) | DUK_EXTERNAL duk_bool_t duk_get_global_lstring(duk_context *ctx, const c...
  function DUK_EXTERNAL (line 16588) | DUK_EXTERNAL duk_bool_t duk_put_global_string(duk_context *ctx, const ch...
  function DUK_EXTERNAL (line 16604) | DUK_EXTERNAL duk_bool_t duk_put_global_lstring(duk_context *ctx, const c...
  function DUK_EXTERNAL (line 16624) | DUK_EXTERNAL void duk_get_prototype(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 16644) | DUK_EXTERNAL void duk_set_prototype(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 16680) | DUK_EXTERNAL void duk_get_finalizer(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 16686) | DUK_EXTERNAL void duk_set_finalizer(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 16714) | DUK_EXTERNAL void duk_get_finalizer(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 16720) | DUK_EXTERNAL void duk_set_finalizer(duk_context *ctx, duk_idx_t idx) {
  function DUK_LOCAL (line 16804) | DUK_LOCAL duk_int_t duk__api_coerce_d2i(duk_context *ctx, duk_idx_t idx,...
  function DUK_LOCAL (line 16868) | DUK_LOCAL duk_uint_t duk__api_coerce_d2ui(duk_context *ctx, duk_idx_t id...
  function DUK_EXTERNAL (line 16931) | DUK_EXTERNAL duk_idx_t duk_normalize_index(duk_context *ctx, duk_idx_t i...
  function DUK_EXTERNAL (line 16967) | DUK_EXTERNAL duk_idx_t duk_require_normalize_index(duk_context *ctx, duk...
  function DUK_INTERNAL (line 16996) | DUK_INTERNAL duk_tval *duk_get_tval(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 17032) | DUK_INTERNAL duk_tval *duk_get_tval_or_unused(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 17041) | DUK_INTERNAL duk_tval *duk_require_tval(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 17072) | DUK_EXTERNAL duk_bool_t duk_is_valid_index(duk_context *ctx, duk_idx_t i...
  function DUK_EXTERNAL (line 17080) | DUK_EXTERNAL void duk_require_valid_index(duk_context *ctx, duk_idx_t id...
  function DUK_EXTERNAL (line 17096) | DUK_EXTERNAL duk_idx_t duk_get_top(duk_context *ctx) {
  function DUK_INTERNAL (line 17107) | DUK_INTERNAL duk_idx_t duk_get_top_require_min(duk_context *ctx, duk_idx...
  function DUK_EXTERNAL (line 17124) | DUK_EXTERNAL void duk_set_top(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 17220) | DUK_EXTERNAL duk_idx_t duk_get_top_index(duk_context *ctx) {
  function DUK_INTERNAL (line 17240) | DUK_INTERNAL duk_idx_t duk_get_top_index_unsafe(duk_context *ctx) {
  function DUK_EXTERNAL (line 17250) | DUK_EXTERNAL duk_idx_t duk_require_top_index(duk_context *ctx) {
  function DUK_LOCAL (line 17286) | DUK_LOCAL duk_bool_t duk__resize_valstack(duk_context *ctx, duk_size_t n...
  function DUK_NOINLINE (line 17416) | DUK_NOINLINE duk_bool_t duk__valstack_do_resize(duk_context *ctx,
  function DUK_INTERNAL (line 17503) | DUK_INTERNAL duk_bool_t duk_valstack_resize_raw(duk_context *ctx,
  function DUK_EXTERNAL (line 17541) | DUK_EXTERNAL duk_bool_t duk_check_stack(duk_context *ctx, duk_idx_t extr...
  function DUK_EXTERNAL (line 17563) | DUK_EXTERNAL void duk_require_stack(duk_context *ctx, duk_idx_t extra) {
  function DUK_EXTERNAL (line 17585) | DUK_EXTERNAL duk_bool_t duk_check_stack_top(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 17605) | DUK_EXTERNAL void duk_require_stack_top(duk_context *ctx, duk_idx_t top) {
  function DUK_EXTERNAL (line 17629) | DUK_EXTERNAL void duk_swap(duk_context *ctx, duk_idx_t idx1, duk_idx_t i...
  function DUK_EXTERNAL (line 17647) | DUK_EXTERNAL void duk_swap_top(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 17653) | DUK_EXTERNAL void duk_dup(duk_context *ctx, duk_idx_t from_idx) {
  function DUK_EXTERNAL (line 17670) | DUK_EXTERNAL void duk_dup_top(duk_context *ctx) {
  function DUK_INTERNAL (line 17695) | DUK_INTERNAL void duk_dup_0(duk_context *ctx) {
  function DUK_INTERNAL (line 17698) | DUK_INTERNAL void duk_dup_1(duk_context *ctx) {
  function DUK_INTERNAL (line 17701) | DUK_INTERNAL void duk_dup_2(duk_context *ctx) {
  function DUK_INTERNAL (line 17704) | DUK_INTERNAL void duk_dup_m2(duk_context *ctx) {
  function DUK_INTERNAL (line 17707) | DUK_INTERNAL void duk_dup_m3(duk_context *ctx) {
  function DUK_INTERNAL (line 17710) | DUK_INTERNAL void duk_dup_m4(duk_context *ctx) {
  function DUK_EXTERNAL (line 17714) | DUK_EXTERNAL void duk_insert(duk_context *ctx, duk_idx_t to_idx) {
  function DUK_EXTERNAL (line 17754) | DUK_EXTERNAL void duk_replace(duk_context *ctx, duk_idx_t to_idx) {
  function DUK_EXTERNAL (line 17777) | DUK_EXTERNAL void duk_copy(duk_context *ctx, duk_idx_t from_idx, duk_idx...
  function DUK_EXTERNAL (line 17794) | DUK_EXTERNAL void duk_remove(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL_DECL (line 17834) | DUK_INTERNAL_DECL void duk_remove_m2(duk_context *ctx) {
  function DUK_EXTERNAL (line 17842) | DUK_EXTERNAL void duk_xcopymove_raw(duk_context *to_ctx, duk_context *fr...
  function DUK_EXTERNAL (line 17915) | DUK_EXTERNAL void duk_require_undefined(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 17928) | DUK_EXTERNAL void duk_require_null(duk_context *ctx, duk_idx_t idx) {
  function duk_bool_t (line 17941) | duk_bool_t duk__get_boolean_raw(duk_context *ctx, duk_idx_t idx, duk_boo...
  function DUK_EXTERNAL (line 17960) | DUK_EXTERNAL duk_bool_t duk_get_boolean(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 17966) | DUK_EXTERNAL duk_bool_t duk_get_boolean_default(duk_context *ctx, duk_id...
  function DUK_EXTERNAL (line 17972) | DUK_EXTERNAL duk_bool_t duk_require_boolean(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 17990) | DUK_EXTERNAL duk_bool_t duk_opt_boolean(duk_context *ctx, duk_idx_t idx,...
  function duk_double_t (line 17999) | duk_double_t duk__get_number_raw(duk_context *ctx, duk_idx_t idx, duk_do...
  function DUK_EXTERNAL (line 18028) | DUK_EXTERNAL duk_double_t duk_get_number(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 18032) | DUK_EXTERNAL duk_double_t duk_get_number_default(duk_context *ctx, duk_i...
  function DUK_EXTERNAL (line 18036) | DUK_EXTERNAL duk_double_t duk_require_number(duk_context *ctx, duk_idx_t...
  function DUK_EXTERNAL (line 18059) | DUK_EXTERNAL duk_double_t duk_opt_number(duk_context *ctx, duk_idx_t idx...
  function DUK_EXTERNAL (line 18069) | DUK_EXTERNAL duk_int_t duk_get_int(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 18075) | DUK_EXTERNAL duk_uint_t duk_get_uint(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 18081) | DUK_EXTERNAL duk_int_t duk_get_int_default(duk_context *ctx, duk_idx_t i...
  function DUK_EXTERNAL (line 18087) | DUK_EXTERNAL duk_uint_t duk_get_uint_default(duk_context *ctx, duk_idx_t...
  function DUK_EXTERNAL (line 18093) | DUK_EXTERNAL duk_int_t duk_require_int(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 18099) | DUK_EXTERNAL duk_uint_t duk_require_uint(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 18105) | DUK_EXTERNAL duk_int_t duk_opt_int(duk_context *ctx, duk_idx_t idx, duk_...
  function DUK_EXTERNAL (line 18114) | DUK_EXTERNAL duk_uint_t duk_opt_uint(duk_context *ctx, duk_idx_t idx, du...
  function DUK_EXTERNAL (line 18123) | DUK_EXTERNAL const char *duk_get_lstring(duk_context *ctx, duk_idx_t idx...
  function DUK_EXTERNAL (line 18145) | DUK_EXTERNAL const char *duk_require_lstring(duk_context *ctx, duk_idx_t...
  function DUK_INTERNAL (line 18158) | DUK_INTERNAL const char *duk_require_lstring_notsymbol(duk_context *ctx,...
  function DUK_EXTERNAL (line 18171) | DUK_EXTERNAL const char *duk_get_string(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 18184) | DUK_EXTERNAL const char *duk_opt_lstring(duk_context *ctx, duk_idx_t idx...
  function DUK_EXTERNAL (line 18196) | DUK_EXTERNAL const char *duk_opt_string(duk_context *ctx, duk_idx_t idx,...
  function DUK_EXTERNAL (line 18205) | DUK_EXTERNAL const char *duk_get_lstring_default(duk_context *ctx, duk_i...
  function DUK_EXTERNAL (line 18227) | DUK_EXTERNAL const char *duk_get_string_default(duk_context *ctx, duk_id...
  function DUK_INTERNAL (line 18240) | DUK_INTERNAL const char *duk_get_string_notsymbol(duk_context *ctx, duk_...
  function DUK_EXTERNAL (line 18253) | DUK_EXTERNAL const char *duk_require_string(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 18259) | DUK_INTERNAL const char *duk_require_string_notsymbol(duk_context *ctx, ...
  function DUK_LOCAL (line 18269) | DUK_LOCAL void *duk__get_pointer_raw(duk_context *ctx, duk_idx_t idx, vo...
  function DUK_EXTERNAL (line 18285) | DUK_EXTERNAL void *duk_get_pointer(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 18289) | DUK_EXTERNAL void *duk_opt_pointer(duk_context *ctx, duk_idx_t idx, void...
  function DUK_EXTERNAL (line 18298) | DUK_EXTERNAL void *duk_get_pointer_default(duk_context *ctx, duk_idx_t i...
  function DUK_EXTERNAL (line 18302) | DUK_EXTERNAL void *duk_require_pointer(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 18322) | DUK_INTERNAL void *duk_get_voidptr(duk_context *ctx, duk_idx_t idx) {
  function DUK_LOCAL (line 18340) | DUK_LOCAL void *duk__get_buffer_helper(duk_context *ctx, duk_idx_t idx, ...
  function DUK_EXTERNAL (line 18376) | DUK_EXTERNAL void *duk_get_buffer(duk_context *ctx, duk_idx_t idx, duk_s...
  function DUK_EXTERNAL (line 18382) | DUK_EXTERNAL void *duk_opt_buffer(duk_context *ctx, duk_idx_t idx, duk_s...
  function DUK_EXTERNAL (line 18394) | DUK_EXTERNAL void *duk_get_buffer_default(duk_context *ctx, duk_idx_t id...
  function DUK_EXTERNAL (line 18400) | DUK_EXTERNAL void *duk_require_buffer(duk_context *ctx, duk_idx_t idx, d...
  function DUK_INTERNAL (line 18411) | DUK_INTERNAL void *duk_get_buffer_data_raw(duk_context *ctx, duk_idx_t i...
  function DUK_EXTERNAL (line 18474) | DUK_EXTERNAL void *duk_get_buffer_data(duk_context *ctx, duk_idx_t idx, ...
  function DUK_EXTERNAL (line 18478) | DUK_EXTERNAL void *duk_get_buffer_data_default(duk_context *ctx, duk_idx...
  function DUK_EXTERNAL (line 18482) | DUK_EXTERNAL void *duk_opt_buffer_data(duk_context *ctx, duk_idx_t idx, ...
  function DUK_EXTERNAL (line 18494) | DUK_EXTERNAL void *duk_require_buffer_data(duk_context *ctx, duk_idx_t i...
  function DUK_LOCAL (line 18503) | DUK_LOCAL duk_heaphdr *duk__get_tagged_heaphdr_raw(duk_context *ctx, duk...
  function DUK_INTERNAL (line 18521) | DUK_INTERNAL duk_hstring *duk_get_hstring(duk_context *ctx, duk_idx_t id...
  function DUK_INTERNAL (line 18525) | DUK_INTERNAL duk_hstring *duk_get_hstring_notsymbol(duk_context *ctx, du...
  function DUK_INTERNAL (line 18533) | DUK_INTERNAL duk_hstring *duk_require_hstring(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 18542) | DUK_INTERNAL duk_hstring *duk_require_hstring_notsymbol(duk_context *ctx...
  function DUK_INTERNAL (line 18551) | DUK_INTERNAL duk_hobject *duk_get_hobject(duk_context *ctx, duk_idx_t id...
  function DUK_INTERNAL (line 18555) | DUK_INTERNAL duk_hobject *duk_require_hobject(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 18564) | DUK_INTERNAL duk_hbuffer *duk_get_hbuffer(duk_context *ctx, duk_idx_t id...
  function DUK_INTERNAL (line 18568) | DUK_INTERNAL duk_hbuffer *duk_require_hbuffer(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 18577) | DUK_INTERNAL duk_hthread *duk_get_hthread(duk_context *ctx, duk_idx_t id...
  function DUK_INTERNAL (line 18585) | DUK_INTERNAL duk_hthread *duk_require_hthread(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 18594) | DUK_INTERNAL duk_hcompfunc *duk_get_hcompfunc(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 18602) | DUK_INTERNAL duk_hcompfunc *duk_require_hcompfunc(duk_context *ctx, duk_...
  function DUK_INTERNAL (line 18611) | DUK_INTERNAL duk_hnatfunc *duk_get_hnatfunc(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 18619) | DUK_INTERNAL duk_hnatfunc *duk_require_hnatfunc(duk_context *ctx, duk_id...
  function DUK_EXTERNAL (line 18628) | DUK_EXTERNAL duk_c_function duk_get_c_function(duk_context *ctx, duk_idx...
  function DUK_EXTERNAL (line 18652) | DUK_EXTERNAL duk_c_function duk_opt_c_function(duk_context *ctx, duk_idx...
  function DUK_EXTERNAL (line 18661) | DUK_EXTERNAL duk_c_function duk_get_c_function_default(duk_context *ctx,...
  function DUK_EXTERNAL (line 18674) | DUK_EXTERNAL duk_c_function duk_require_c_function(duk_context *ctx, duk...
  function DUK_EXTERNAL (line 18687) | DUK_EXTERNAL void duk_require_function(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL_DECL (line 18693) | DUK_INTERNAL_DECL void duk_require_constructable(duk_context *ctx, duk_i...
  function DUK_EXTERNAL (line 18703) | DUK_EXTERNAL duk_context *duk_get_context(duk_context *ctx, duk_idx_t id...
  function DUK_EXTERNAL (line 18709) | DUK_EXTERNAL duk_context *duk_require_context(duk_context *ctx, duk_idx_...
  function DUK_EXTERNAL (line 18715) | DUK_EXTERNAL duk_context *duk_opt_context(duk_context *ctx, duk_idx_t id...
  function DUK_EXTERNAL_DECL (line 18724) | DUK_EXTERNAL_DECL duk_context *duk_get_context_default(duk_context *ctx,...
  function DUK_EXTERNAL (line 18737) | DUK_EXTERNAL void *duk_get_heapptr(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 18754) | DUK_EXTERNAL void *duk_opt_heapptr(duk_context *ctx, duk_idx_t idx, void...
  function DUK_EXTERNAL_DECL (line 18763) | DUK_EXTERNAL_DECL void *duk_get_heapptr_default(duk_context *ctx, duk_id...
  function DUK_EXTERNAL (line 18776) | DUK_EXTERNAL void *duk_require_heapptr(duk_context *ctx, duk_idx_t idx) {
  function DUK_LOCAL (line 18795) | DUK_LOCAL duk_hobject *duk__get_hobject_promote_mask_raw(duk_context *ct...
  function DUK_INTERNAL (line 18831) | DUK_INTERNAL duk_hobject *duk_get_hobject_promote_mask(duk_context *ctx,...
  function DUK_INTERNAL (line 18838) | DUK_INTERNAL duk_hobject *duk_require_hobject_promote_mask(duk_context *...
  function DUK_INTERNAL (line 18845) | DUK_INTERNAL duk_hobject *duk_require_hobject_accept_mask(duk_context *c...
  function DUK_INTERNAL (line 18849) | DUK_INTERNAL duk_hobject *duk_get_hobject_with_class(duk_context *ctx, d...
  function DUK_INTERNAL (line 18863) | DUK_INTERNAL duk_hobject *duk_require_hobject_with_class(duk_context *ct...
  function DUK_EXTERNAL (line 18883) | DUK_EXTERNAL duk_size_t duk_get_length(duk_context *ctx, duk_idx_t idx) {
  function DUK_LOCAL (line 18958) | DUK_LOCAL duk_heaphdr *duk__known_heaphdr(duk_context *ctx, duk_idx_t id...
  function DUK_INTERNAL (line 18976) | DUK_INTERNAL duk_hstring *duk_known_hstring(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 18981) | DUK_INTERNAL duk_hobject *duk_known_hobject(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 18986) | DUK_INTERNAL duk_hbuffer *duk_known_hbuffer(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 18991) | DUK_INTERNAL duk_hcompfunc *duk_known_hcompfunc(duk_context *ctx, duk_id...
  function DUK_INTERNAL (line 18996) | DUK_INTERNAL duk_hnatfunc *duk_known_hnatfunc(duk_context *ctx, duk_idx_...
  function DUK_EXTERNAL (line 19001) | DUK_EXTERNAL void duk_set_length(duk_context *ctx, duk_idx_t idx, duk_si...
  function DUK_LOCAL (line 19019) | DUK_LOCAL duk_bool_t duk__defaultvalue_coerce_attempt(duk_context *ctx, ...
  function DUK_EXTERNAL (line 19036) | DUK_EXTERNAL void duk_to_undefined(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 19048) | DUK_EXTERNAL void duk_to_null(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 19061) | DUK_EXTERNAL void duk_to_primitive(duk_context *ctx, duk_idx_t idx, duk_...
  function DUK_EXTERNAL (line 19142) | DUK_EXTERNAL duk_bool_t duk_to_boolean(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 19163) | DUK_EXTERNAL duk_double_t duk_to_number(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 19184) | DUK_INTERNAL duk_double_t duk_to_number_m1(duk_context *ctx) {
  function DUK_INTERNAL (line 19187) | DUK_INTERNAL duk_double_t duk_to_number_m2(duk_context *ctx) {
  function DUK_INTERNAL (line 19191) | DUK_INTERNAL duk_double_t duk_to_number_tval(duk_context *ctx, duk_tval ...
  type duk_double_t (line 19206) | typedef duk_double_t (*duk__toint_coercer)(duk_hthread *thr, duk_tval *tv);
  function DUK_LOCAL (line 19208) | DUK_LOCAL duk_double_t duk__to_int_uint_helper(duk_context *ctx, duk_idx...
  function DUK_EXTERNAL (line 19237) | DUK_EXTERNAL duk_int_t duk_to_int(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 19246) | DUK_EXTERNAL duk_uint_t duk_to_uint(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 19255) | DUK_EXTERNAL duk_int32_t duk_to_int32(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 19272) | DUK_EXTERNAL duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 19289) | DUK_EXTERNAL duk_uint16_t duk_to_uint16(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 19308) | DUK_INTERNAL duk_uint8_t duk_to_uint8clamped(duk_context *ctx, duk_idx_t...
  function DUK_EXTERNAL (line 19343) | DUK_EXTERNAL const char *duk_to_lstring(duk_context *ctx, duk_idx_t idx,...
  function DUK_LOCAL (line 19351) | DUK_LOCAL duk_ret_t duk__safe_to_string_raw(duk_context *ctx, void *udat...
  function DUK_EXTERNAL (line 19359) | DUK_EXTERNAL const char *duk_safe_to_lstring(duk_context *ctx, duk_idx_t...
  function DUK_INTERNAL (line 19392) | DUK_INTERNAL duk_hstring *duk_to_property_key_hstring(duk_context *ctx, ...
  function DUK_INTERNAL (line 19412) | DUK_INTERNAL duk_hstring *duk_safe_to_hstring(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 19421) | DUK_INTERNAL void duk_push_class_string_tval(duk_context *ctx, duk_tval ...
  function DUK_INTERNAL (line 19504) | DUK_INTERNAL duk_int_t duk_to_int_clamped_raw(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 19567) | DUK_INTERNAL duk_int_t duk_to_int_clamped(duk_context *ctx, duk_idx_t id...
  function DUK_INTERNAL (line 19572) | DUK_INTERNAL duk_int_t duk_to_int_check_range(duk_context *ctx, duk_idx_...
  function DUK_EXTERNAL (line 19576) | DUK_EXTERNAL const char *duk_to_string(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 19677) | DUK_INTERNAL duk_hstring *duk_to_hstring(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 19686) | DUK_INTERNAL duk_hstring *duk_to_hstring_m1(duk_context *ctx) {
  function DUK_INTERNAL (line 19690) | DUK_INTERNAL duk_hstring *duk_to_hstring_acceptsymbol(duk_context *ctx, ...
  function DUK_EXTERNAL (line 19707) | DUK_EXTERNAL const char *duk_buffer_to_string(duk_context *ctx, duk_idx_...
  function DUK_EXTERNAL (line 19722) | DUK_EXTERNAL void *duk_to_buffer_raw(duk_context *ctx, duk_idx_t idx, du...
  function DUK_EXTERNAL (line 19784) | DUK_EXTERNAL void *duk_to_pointer(duk_context *ctx, duk_idx_t idx) {
  function DUK_LOCAL (line 19834) | DUK_LOCAL void duk__push_func_from_lightfunc(duk_context *ctx, duk_c_fun...
  function DUK_EXTERNAL (line 19875) | DUK_EXTERNAL void duk_to_object(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 20000) | DUK_INTERNAL duk_hobject *duk_to_hobject(duk_context *ctx, duk_idx_t idx) {
  function DUK_LOCAL (line 20012) | DUK_LOCAL duk_bool_t duk__tag_check(duk_context *ctx, duk_idx_t idx, duk...
  function DUK_LOCAL (line 20020) | DUK_LOCAL duk_bool_t duk__obj_flag_any_default_false(duk_context *ctx, d...
  function DUK_INTERNAL (line 20032) | DUK_INTERNAL duk_int_t duk_get_type_tval(duk_tval *tv) {
  function DUK_EXTERNAL (line 20071) | DUK_EXTERNAL duk_int_t duk_get_type(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 20096) | DUK_INTERNAL const char *duk_get_type_name(duk_context *ctx, duk_idx_t i...
  function DUK_INTERNAL (line 20107) | DUK_INTERNAL duk_small_uint_t duk_get_class_number(duk_context *ctx, duk...
  function DUK_EXTERNAL (line 20131) | DUK_EXTERNAL duk_bool_t duk_check_type(duk_context *ctx, duk_idx_t idx, ...
  function DUK_INTERNAL (line 20137) | DUK_INTERNAL duk_uint_t duk_get_type_mask_tval(duk_tval *tv) {
  function DUK_EXTERNAL (line 20176) | DUK_EXTERNAL duk_uint_t duk_get_type_mask(duk_context *ctx, duk_idx_t id...
  function DUK_EXTERNAL (line 20187) | DUK_EXTERNAL duk_bool_t duk_check_type_mask(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 20202) | DUK_EXTERNAL duk_bool_t duk_is_undefined(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20207) | DUK_EXTERNAL duk_bool_t duk_is_null(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20212) | DUK_EXTERNAL duk_bool_t duk_is_boolean(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20217) | DUK_EXTERNAL duk_bool_t duk_is_number(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20234) | DUK_EXTERNAL duk_bool_t duk_is_nan(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20255) | DUK_EXTERNAL duk_bool_t duk_is_string(duk_context *ctx, duk_idx_t idx) {
  function DUK_INTERNAL (line 20260) | DUK_INTERNAL duk_bool_t duk_is_string_notsymbol(duk_context *ctx, duk_id...
  function DUK_EXTERNAL (line 20265) | DUK_EXTERNAL duk_bool_t duk_is_object(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20270) | DUK_EXTERNAL duk_bool_t duk_is_buffer(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20276) | DUK_EXTERNAL duk_bool_t duk_is_buffer_data(duk_context *ctx, duk_idx_t i...
  function DUK_EXTERNAL (line 20295) | DUK_EXTERNAL duk_bool_t duk_is_buffer_data(duk_context *ctx, duk_idx_t i...
  function DUK_EXTERNAL (line 20303) | DUK_EXTERNAL duk_bool_t duk_is_pointer(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20308) | DUK_EXTERNAL duk_bool_t duk_is_lightfunc(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20313) | DUK_EXTERNAL duk_bool_t duk_is_symbol(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20327) | DUK_EXTERNAL duk_bool_t duk_is_array(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20339) | DUK_EXTERNAL duk_bool_t duk_is_function(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20355) | DUK_EXTERNAL duk_bool_t duk_is_c_function(duk_context *ctx, duk_idx_t id...
  function DUK_EXTERNAL (line 20362) | DUK_EXTERNAL duk_bool_t duk_is_ecmascript_function(duk_context *ctx, duk...
  function DUK_EXTERNAL (line 20369) | DUK_EXTERNAL duk_bool_t duk_is_bound_function(duk_context *ctx, duk_idx_...
  function DUK_EXTERNAL (line 20376) | DUK_EXTERNAL duk_bool_t duk_is_thread(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 20388) | DUK_EXTERNAL duk_bool_t duk_is_fixed_buffer(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 20403) | DUK_EXTERNAL duk_bool_t duk_is_dynamic_buffer(duk_context *ctx, duk_idx_...
  function DUK_EXTERNAL (line 20418) | DUK_EXTERNAL duk_bool_t duk_is_external_buffer(duk_context *ctx, duk_idx...
  function DUK_EXTERNAL (line 20433) | DUK_EXTERNAL duk_errcode_t duk_get_error_code(duk_context *ctx, duk_idx_...
  function DUK_INTERNAL (line 20479) | DUK_INTERNAL void duk_push_tval(duk_context *ctx, duk_tval *tv) {
  function DUK_EXTERNAL (line 20492) | DUK_EXTERNAL void duk_push_undefined(duk_context *ctx) {
  function DUK_EXTERNAL (line 20506) | DUK_EXTERNAL void duk_push_null(duk_context *ctx) {
  function DUK_EXTERNAL (line 20517) | DUK_EXTERNAL void duk_push_boolean(duk_context *ctx, duk_bool_t val) {
  function DUK_EXTERNAL (line 20530) | DUK_EXTERNAL void duk_push_true(duk_context *ctx) {
  function DUK_EXTERNAL (line 20541) | DUK_EXTERNAL void duk_push_false(duk_context *ctx) {
  function DUK_EXTERNAL (line 20553) | DUK_EXTERNAL void duk_push_number(duk_context *ctx, duk_double_t val) {
  function DUK_EXTERNAL (line 20567) | DUK_EXTERNAL void duk_push_int(duk_context *ctx, duk_int_t val) {
  function DUK_EXTERNAL (line 20600) | DUK_EXTERNAL void duk_push_uint(duk_context *ctx, duk_uint_t val) {
  function DUK_EXTERNAL (line 20634) | DUK_EXTERNAL void duk_push_nan(duk_context *ctx) {
  function DUK_EXTERNAL (line 20648) | DUK_EXTERNAL const char *duk_push_lstring(duk_context *ctx, const char *...
  function DUK_EXTERNAL (line 20682) | DUK_EXTERNAL const char *duk_push_string(duk_context *ctx, const char *s...
  function DUK_EXTERNAL (line 20693) | DUK_EXTERNAL void duk_push_pointer(duk_context *ctx, void *val) {
  function DUK_INTERNAL (line 20704) | DUK_INTERNAL duk_hstring *duk_push_uint_to_hstring(duk_context *ctx, duk...
  function DUK_LOCAL (line 20714) | DUK_LOCAL void duk__push_this_helper(duk_context *ctx, duk_small_uint_t ...
  function DUK_EXTERNAL (line 20753) | DUK_EXTERNAL void duk_push_this(duk_context *ctx) {
  function DUK_INTERNAL (line 20759) | DUK_INTERNAL void duk_push_this_check_object_coercible(duk_context *ctx) {
  function DUK_INTERNAL (line 20765) | DUK_INTERNAL duk_hobject *duk_push_this_coercible_to_object(duk_context ...
  function DUK_INTERNAL (line 20776) | DUK_INTERNAL duk_hstring *duk_push_this_coercible_to_string(duk_context ...
  function DUK_INTERNAL (line 20783) | DUK_INTERNAL duk_tval *duk_get_borrowed_this_tval(duk_context *ctx) {
  function DUK_EXTERNAL (line 20797) | DUK_EXTERNAL void duk_push_current_function(duk_context *ctx) {
  function DUK_EXTERNAL (line 20814) | DUK_EXTERNAL void duk_push_current_thread(duk_context *ctx) {
  function DUK_EXTERNAL (line 20827) | DUK_EXTERNAL void duk_push_global_object(duk_context *ctx) {
  function DUK_LOCAL (line 20834) | DUK_LOCAL void duk__push_stash(duk_context *ctx) {
  function DUK_EXTERNAL (line 20846) | DUK_EXTERNAL void duk_push_heap_stash(duk_context *ctx) {
  function DUK_EXTERNAL (line 20856) | DUK_EXTERNAL void duk_push_global_stash(duk_context *ctx) {
  function DUK_EXTERNAL (line 20862) | DUK_EXTERNAL void duk_push_thread_stash(duk_context *ctx, duk_context *t...
  function DUK_LOCAL (line 20874) | DUK_LOCAL duk_int_t duk__try_push_vsprintf(duk_context *ctx, void *buf, ...
  function DUK_EXTERNAL (line 20891) | DUK_EXTERNAL const char *duk_push_vsprintf(duk_context *ctx, const char ...
  function DUK_EXTERNAL (line 20957) | DUK_EXTERNAL const char *duk_push_sprintf(duk_context *ctx, const char *...
  function DUK_INTERNAL (line 20971) | DUK_INTERNAL duk_hobject *duk_push_object_helper(duk_context *ctx, duk_u...
  function DUK_INTERNAL (line 21004) | DUK_INTERNAL duk_hobject *duk_push_object_helper_proto(duk_context *ctx,...
  function DUK_EXTERNAL (line 21017) | DUK_EXTERNAL duk_idx_t duk_push_object(duk_context *ctx) {
  function DUK_EXTERNAL (line 21028) | DUK_EXTERNAL duk_idx_t duk_push_array(duk_context *ctx) {
  function DUK_INTERNAL (line 21059) | DUK_INTERNAL duk_harray *duk_push_harray(duk_context *ctx) {
  function DUK_INTERNAL (line 21075) | DUK_INTERNAL duk_harray *duk_push_harray_with_size(duk_context *ctx, duk...
  function DUK_EXTERNAL (line 21090) | DUK_EXTERNAL duk_idx_t duk_push_thread_raw(duk_context *ctx, duk_uint_t ...
  function DUK_INTERNAL (line 21148) | DUK_INTERNAL duk_hcompfunc *duk_push_hcompfunc(duk_context *ctx) {
  function DUK_LOCAL (line 21182) | DUK_LOCAL duk_idx_t duk__push_c_function_raw(duk_context *ctx, duk_c_fun...
  function DUK_EXTERNAL (line 21229) | DUK_EXTERNAL duk_idx_t duk_push_c_function(duk_context *ctx, duk_c_funct...
  function DUK_INTERNAL (line 21247) | DUK_INTERNAL void duk_push_c_function_noexotic(duk_context *ctx, duk_c_f...
  function DUK_INTERNAL (line 21264) | DUK_INTERNAL void duk_push_c_function_noconstruct_noexotic(duk_context *...
  function DUK_EXTERNAL (line 21280) | DUK_EXTERNAL duk_idx_t duk_push_c_lightfunc(duk_context *ctx, duk_c_func...
  function DUK_INTERNAL (line 21315) | DUK_INTERNAL duk_hbufobj *duk_push_bufobj_raw(duk_context *ctx, duk_uint...
  function DUK_EXTERNAL (line 21365) | DUK_EXTERNAL void duk_push_buffer_object(duk_context *ctx, duk_idx_t idx...
  function DUK_EXTERNAL (line 21441) | DUK_EXTERNAL void duk_push_buffer_object(duk_context *ctx, duk_idx_t idx...
  function DUK_EXTERNAL (line 21450) | DUK_EXTERNAL duk_idx_t duk_push_error_object_va_raw(duk_context *ctx, du...
  function DUK_EXTERNAL (line 21502) | DUK_EXTERNAL duk_idx_t duk_push_error_object_raw(duk_context *ctx, duk_e...
  function DUK_EXTERNAL (line 21515) | DUK_EXTERNAL duk_idx_t duk_push_error_object_stash(duk_context *ctx, duk...
  function DUK_EXTERNAL (line 21532) | DUK_EXTERNAL void *duk_push_buffer_raw(duk_context *ctx, duk_size_t size...
  function DUK_INTERNAL (line 21560) | DUK_INTERNAL void *duk_push_fixed_buffer_nozero(duk_context *ctx, duk_si...
  function DUK_INTERNAL (line 21564) | DUK_INTERNAL void *duk_push_fixed_buffer_zero(duk_context *ctx, duk_size...
  function DUK_LOCAL (line 21577) | DUK_LOCAL void duk__validate_push_heapptr(duk_context *ctx, void *ptr) {
  function DUK_EXTERNAL (line 21676) | DUK_EXTERNAL duk_idx_t duk_push_heapptr(duk_context *ctx, void *ptr) {
  function DUK_EXTERNAL (line 21769) | DUK_EXTERNAL duk_idx_t duk_push_bare_object(duk_context *ctx) {
  function DUK_INTERNAL (line 21778) | DUK_INTERNAL void duk_push_hstring(duk_context *ctx, duk_hstring *h) {
  function DUK_INTERNAL (line 21786) | DUK_INTERNAL void duk_push_hstring_stridx(duk_context *ctx, duk_small_ui...
  function DUK_INTERNAL (line 21793) | DUK_INTERNAL void duk_push_hstring_empty(duk_context *ctx) {
  function DUK_INTERNAL (line 21799) | DUK_INTERNAL void duk_push_hobject(duk_context *ctx, duk_hobject *h) {
  function DUK_INTERNAL (line 21807) | DUK_INTERNAL void duk_push_hbuffer(duk_context *ctx, duk_hbuffer *h) {
  function DUK_INTERNAL (line 21815) | DUK_INTERNAL void duk_push_hobject_bidx(duk_context *ctx, duk_small_int_...
  function DUK_EXTERNAL (line 21828) | DUK_EXTERNAL void duk_pop_n(duk_context *ctx, duk_idx_t count) {
  function DUK_INTERNAL (line 21871) | DUK_INTERNAL void duk_pop_n_unsafe(duk_context *ctx, duk_idx_t count) {
  function DUK_INTERNAL (line 21909) | DUK_INTERNAL void duk_pop_n_nodecref_unsafe(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 21930) | DUK_INTERNAL void duk_pop_n_nodecref_unsafe(duk_context *ctx, duk_idx_t ...
  function DUK_EXTERNAL (line 21939) | DUK_EXTERNAL void duk_pop(duk_context *ctx) {
  function DUK_EXTERNAL (line 21944) | DUK_EXTERNAL void duk_pop(duk_context *ctx) {
  function DUK_INTERNAL (line 21969) | DUK_INTERNAL void duk_pop_unsafe(duk_context *ctx) {
  function DUK_INTERNAL (line 21974) | DUK_INTERNAL void duk_pop_unsafe(duk_context *ctx) {
  function DUK_EXTERNAL (line 21995) | DUK_EXTERNAL void duk_pop_2(duk_context *ctx) {
  function DUK_EXTERNAL (line 22000) | DUK_EXTERNAL void duk_pop_3(duk_context *ctx) {
  function DUK_INTERNAL (line 22010) | DUK_INTERNAL void duk_pack(duk_context *ctx, duk_idx_t count) {
  function DUK_INTERNAL (line 22070) | DUK_INTERNAL void duk_unpack(duk_context *ctx) {
  function DUK_EXTERNAL (line 22084) | DUK_EXTERNAL void duk_throw_raw(duk_context *ctx) {
  function DUK_EXTERNAL (line 22128) | DUK_EXTERNAL void duk_fatal_raw(duk_context *ctx, const char *err_msg) {
  function DUK_EXTERNAL (line 22154) | DUK_EXTERNAL void duk_error_va_raw(duk_context *ctx, duk_errcode_t err_c...
  function DUK_EXTERNAL (line 22161) | DUK_EXTERNAL void duk_error_raw(duk_context *ctx, duk_errcode_t err_code...
  function DUK_LOCAL (line 22175) | DUK_LOCAL void duk__throw_error_from_stash(duk_context *ctx, duk_errcode...
  function DUK_EXTERNAL (line 22201) | DUK_EXTERNAL duk_ret_t duk_generic_error_stash(duk_context *ctx, const c...
  function DUK_EXTERNAL (line 22204) | DUK_EXTERNAL duk_ret_t duk_eval_error_stash(duk_context *ctx, const char...
  function DUK_EXTERNAL (line 22207) | DUK_EXTERNAL duk_ret_t duk_range_error_stash(duk_context *ctx, const cha...
  function DUK_EXTERNAL (line 22210) | DUK_EXTERNAL duk_ret_t duk_reference_error_stash(duk_context *ctx, const...
  function DUK_EXTERNAL (line 22213) | DUK_EXTERNAL duk_ret_t duk_syntax_error_stash(duk_context *ctx, const ch...
  function DUK_EXTERNAL (line 22216) | DUK_EXTERNAL duk_ret_t duk_type_error_stash(duk_context *ctx, const char...
  function DUK_EXTERNAL (line 22219) | DUK_EXTERNAL duk_ret_t duk_uri_error_stash(duk_context *ctx, const char ...
  function DUK_EXTERNAL (line 22228) | DUK_EXTERNAL duk_bool_t duk_equals(duk_context *ctx, duk_idx_t idx1, duk...
  function DUK_EXTERNAL (line 22246) | DUK_EXTERNAL duk_bool_t duk_strict_equals(duk_context *ctx, duk_idx_t id...
  function DUK_EXTERNAL (line 22261) | DUK_EXTERNAL duk_bool_t duk_samevalue(duk_context *ctx, duk_idx_t idx1, ...
  function DUK_EXTERNAL (line 22280) | DUK_EXTERNAL duk_bool_t duk_instanceof(duk_context *ctx, duk_idx_t idx1,...
  function DUK_INTERNAL (line 22303) | DUK_INTERNAL void duk_push_lightfunc_name_raw(duk_context *ctx, duk_c_fu...
  function DUK_INTERNAL (line 22322) | DUK_INTERNAL void duk_push_lightfunc_name(duk_context *ctx, duk_tval *tv) {
  function DUK_INTERNAL (line 22331) | DUK_INTERNAL void duk_push_lightfunc_tostring(duk_context *ctx, duk_tval...
  function DUK_INTERNAL (line 22351) | DUK_INTERNAL void duk_push_string_funcptr(duk_context *ctx, duk_uint8_t ...
  function DUK_LOCAL (line 22392) | DUK_LOCAL void duk__push_hstring_readable_unicode(duk_context *ctx, duk_...
  function DUK_LOCAL (line 22444) | DUK_LOCAL const char *duk__push_string_tval_readable(duk_context *ctx, d...
  function DUK_INTERNAL (line 22517) | DUK_INTERNAL const char *duk_push_string_tval_readable(duk_context *ctx,...
  function DUK_INTERNAL (line 22522) | DUK_INTERNAL const char *duk_push_string_readable(duk_context *ctx, duk_...
  function DUK_INTERNAL (line 22527) | DUK_INTERNAL const char *duk_push_string_tval_readable_error(duk_context...
  function DUK_INTERNAL (line 22532) | DUK_INTERNAL void duk_push_symbol_descriptive_string(duk_context *ctx, d...
  function DUK_LOCAL (line 22569) | DUK_LOCAL void duk__concat_and_join_helper(duk_context *ctx, duk_idx_t c...
  function DUK_EXTERNAL (line 22672) | DUK_EXTERNAL void duk_concat(duk_context *ctx, duk_idx_t count) {
  function DUK_EXTERNAL (line 22678) | DUK_EXTERNAL void duk_join(duk_context *ctx, duk_idx_t count) {
  function DUK_EXTERNAL (line 22688) | DUK_EXTERNAL void duk_decode_string(duk_context *ctx, duk_idx_t idx, duk...
  function DUK_EXTERNAL (line 22712) | DUK_EXTERNAL void duk_map_string(duk_context *ctx, duk_idx_t idx, duk_ma...
  function DUK_EXTERNAL (line 22753) | DUK_EXTERNAL void duk_substring(duk_context *ctx, duk_idx_t idx, duk_siz...
  function DUK_EXTERNAL (line 22802) | DUK_EXTERNAL void duk_trim(duk_context *ctx, duk_idx_t idx) {
  function DUK_EXTERNAL (line 22878) | DUK_EXTERNAL duk_codepoint_t duk_char_code_at(duk_context *ctx, duk_idx_...
  function DUK_EXTERNAL (line 22907) | DUK_EXTERNAL duk_double_t duk_get_now(duk_context *ctx) {
  function DUK_EXTERNAL (line 22911) | DUK_EXTERNAL void duk_time_to_components(duk_context *ctx, duk_double_t ...
  function DUK_EXTERNAL (line 22938) | DUK_EXTERNAL duk_double_t duk_components_to_time(duk_context *ctx, duk_t...
  function DUK_LOCAL (line 23029) | DUK_LOCAL duk_uint32_t duk__push_this_obj_len_u32(duk_context *ctx) {
  function DUK_LOCAL (line 23042) | DUK_LOCAL duk_uint32_t duk__push_this_obj_len_u32_limited(duk_context *c...
  function DUK_LOCAL (line 23061) | DUK_LOCAL duk_harray *duk__arraypart_fastpath_this(duk_context *ctx) {
  function DUK_INTERNAL (line 23116) | DUK_INTERNAL duk_ret_t duk_bi_array_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 23151) | DUK_INTERNAL duk_ret_t duk_bi_array_constructor_is_array(duk_context *ct...
  function DUK_INTERNAL (line 23163) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_to_string(duk_context *ctx) {
  function DUK_INTERNAL (line 23202) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_concat(duk_context *ctx) {
  function DUK_INTERNAL (line 23294) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_join_shared(duk_context *c...
  function DUK_LOCAL (line 23377) | DUK_LOCAL duk_ret_t duk__array_pop_fastpath(duk_context *ctx, duk_harray...
  function DUK_INTERNAL (line 23420) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_pop(duk_context *ctx) {
  function DUK_LOCAL (line 23454) | DUK_LOCAL duk_ret_t duk__array_push_fastpath(duk_context *ctx, duk_harra...
  function DUK_INTERNAL (line 23502) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_push(duk_context *ctx) {
  function DUK_LOCAL (line 23571) | DUK_LOCAL duk_small_int_t duk__array_sort_compare(duk_context *ctx, duk_...
  function DUK_LOCAL (line 23690) | DUK_LOCAL void duk__array_sort_swap(duk_context *ctx, duk_int_t l, duk_i...
  function DUK_LOCAL (line 23720) | DUK_LOCAL void duk__debuglog_qsort_state(duk_context *ctx, duk_int_t lo,...
  function DUK_LOCAL (line 23750) | DUK_LOCAL void duk__array_qsort(duk_context *ctx, duk_int_t lo, duk_int_...
  function DUK_INTERNAL (line 23846) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_sort(duk_context *ctx) {
  function DUK_INTERNAL (line 23882) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_splice(duk_context *ctx) {
  function DUK_INTERNAL (line 24046) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_reverse(duk_context *ctx) {
  function DUK_INTERNAL (line 24097) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_slice(duk_context *ctx) {
  function DUK_INTERNAL (line 24159) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_shift(duk_context *ctx) {
  function DUK_INTERNAL (line 24201) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_unshift(duk_context *ctx) {
  function DUK_INTERNAL (line 24263) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_indexof_shared(duk_context...
  function DUK_INTERNAL (line 24364) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_iter_shared(duk_context *c...
  function DUK_INTERNAL (line 24497) | DUK_INTERNAL duk_ret_t duk_bi_array_prototype_reduce_shared(duk_context ...
  function DUK_INTERNAL (line 24600) | DUK_INTERNAL duk_ret_t duk_bi_boolean_prototype_tostring_shared(duk_cont...
  function DUK_INTERNAL (line 24637) | DUK_INTERNAL duk_ret_t duk_bi_boolean_constructor(duk_context *ctx) {
  function DUK_LOCAL (line 24777) | DUK_LOCAL duk_hbufobj *duk__hbufobj_promote_this(duk_context *ctx) {
  function DUK_LOCAL (line 24803) | DUK_LOCAL duk_heaphdr *duk__getrequire_bufobj_this(duk_context *ctx, duk...
  function DUK_LOCAL (line 24847) | DUK_LOCAL duk_hbufobj *duk__get_bufobj_this(duk_context *ctx) {
  function DUK_LOCAL (line 24854) | DUK_LOCAL duk_hbufobj *duk__require_bufobj_this(duk_context *ctx) {
  function DUK_LOCAL (line 24859) | DUK_LOCAL duk_hbufobj *duk__require_bufobj_value(duk_context *ctx, duk_i...
  function DUK_LOCAL (line 24889) | DUK_LOCAL void duk__set_bufobj_buffer(duk_context *ctx, duk_hbufobj *h_b...
  function DUK_LOCAL (line 24912) | DUK_LOCAL void duk__resolve_offset_opt_length(duk_context *ctx,
  function DUK_LOCAL (line 24974) | DUK_LOCAL void duk__clamp_startend_nonegidx_noshift(duk_context *ctx,
  function DUK_LOCAL (line 25011) | DUK_LOCAL void duk__clamp_startend_negidx_shifted(duk_context *ctx,
  function DUK_INTERNAL (line 25069) | DUK_INTERNAL void duk_hbufobj_promote_plain(duk_context *ctx, duk_idx_t ...
  function DUK_INTERNAL (line 25075) | DUK_INTERNAL void duk_hbufobj_push_uint8array_from_plain(duk_hthread *th...
  function DUK_INTERNAL (line 25120) | DUK_INTERNAL void duk_hbufobj_push_validated_read(duk_context *ctx, duk_...
  function DUK_INTERNAL (line 25157) | DUK_INTERNAL void duk_hbufobj_validated_write(duk_context *ctx, duk_hbuf...
  function DUK_LOCAL (line 25206) | DUK_LOCAL duk_hbuffer *duk__hbufobj_fixed_from_argvalue(duk_context *ctx) {
  function DUK_INTERNAL (line 25289) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 25314) | DUK_INTERNAL duk_ret_t duk_bi_arraybuffer_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 25359) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 25716) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 25742) | DUK_INTERNAL duk_ret_t duk_bi_dataview_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 25794) | DUK_INTERNAL duk_ret_t duk_bi_arraybuffer_isview(duk_context *ctx) {
  function DUK_INTERNAL (line 25820) | DUK_INTERNAL duk_ret_t duk_bi_uint8array_allocplain(duk_context *ctx) {
  function DUK_INTERNAL (line 25831) | DUK_INTERNAL duk_ret_t duk_bi_uint8array_plainof(duk_context *ctx) {
  function DUK_INTERNAL (line 25860) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_tostring(duk_context *ctx) {
  function DUK_INTERNAL (line 25923) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_tojson(duk_context *ctx) {
  function DUK_INTERNAL (line 25973) | DUK_INTERNAL duk_ret_t duk_bi_buffer_compare_shared(duk_context *ctx) {
  function DUK_INTERNAL (line 26030) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_fill(duk_context *ctx) {
  function DUK_INTERNAL (line 26108) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_write(duk_context *ctx) {
  function DUK_INTERNAL (line 26155) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_copy(duk_context *ctx) {
  function DUK_INTERNAL (line 26297) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_set(duk_context *ctx) {
  function DUK_LOCAL (line 26580) | DUK_LOCAL void duk__arraybuffer_plain_slice(duk_context *ctx, duk_hbuffe...
  function DUK_INTERNAL (line 26616) | DUK_INTERNAL duk_ret_t duk_bi_buffer_slice_shared(duk_context *ctx) {
  function DUK_INTERNAL (line 26769) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_is_encoding(duk_context *ctx) {
  function DUK_INTERNAL (line 26786) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_is_buffer(duk_context *ctx) {
  function DUK_INTERNAL (line 26816) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_byte_length(duk_context *ctx) {
  function DUK_INTERNAL (line 26847) | DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_concat(duk_context *ctx) {
  function DUK_INTERNAL (line 26975) | DUK_INTERNAL duk_ret_t duk_bi_buffer_readfield(duk_context *ctx) {
  function DUK_INTERNAL (line 27235) | DUK_INTERNAL duk_ret_t duk_bi_buffer_writefield(duk_context *ctx) {
  function DUK_LOCAL (line 27516) | DUK_LOCAL duk_hbufobj *duk__autospawn_arraybuffer(duk_context *ctx, duk_...
  function DUK_INTERNAL (line 27533) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_buffer_getter(duk_context *ctx) {
  function DUK_INTERNAL (line 27581) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_byteoffset_getter(duk_context *...
  function DUK_INTERNAL (line 27597) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_bytelength_getter(duk_context *...
  function DUK_INTERNAL (line 27619) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_buffer_getter(duk_context *ctx) {
  function DUK_INTERNAL (line 27624) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_byteoffset_getter(duk_context *...
  function DUK_INTERNAL (line 27629) | DUK_INTERNAL duk_ret_t duk_bi_typedarray_bytelength_getter(duk_context *...
  function DUK_LOCAL (line 27840) | DUK_LOCAL duk_bool_t duk__parse_string_iso8601_subset(duk_context *ctx, ...
  function DUK_LOCAL (line 28035) | DUK_LOCAL duk_ret_t duk__parse_string(duk_context *ctx, const char *str) {
  function DUK_INTERNAL (line 28093) | DUK_INTERNAL duk_bool_t duk_bi_date_is_leap_year(duk_int_t year) {
  function DUK_INTERNAL (line 28106) | DUK_INTERNAL duk_bool_t duk_bi_date_timeval_in_valid_range(duk_double_t ...
  function DUK_INTERNAL (line 28110) | DUK_INTERNAL duk_bool_t duk_bi_date_timeval_in_leeway_range(duk_double_t...
  function DUK_INTERNAL (line 28114) | DUK_INTERNAL duk_bool_t duk_bi_date_year_in_valid_range(duk_double_t x) {
  function DUK_LOCAL (line 28118) | DUK_LOCAL duk_double_t duk__timeclip(duk_double_t x) {
  function DUK_LOCAL (line 28134) | DUK_LOCAL duk_int_t duk__div_floor(duk_int_t a, duk_int_t b) {
  function DUK_LOCAL (line 28148) | DUK_LOCAL duk_int_t duk__day_from_year(duk_int_t year) {
  function DUK_LOCAL (line 28159) | DUK_LOCAL duk_int_t duk__year_from_day(duk_int_t day, duk_small_int_t *o...
  function DUK_LOCAL (line 28196) | DUK_LOCAL duk_double_t duk__make_day(duk_double_t year, duk_double_t mon...
  function DUK_INTERNAL (line 28258) | DUK_INTERNAL void duk_bi_date_timeval_to_parts(duk_double_t d, duk_int_t...
  function DUK_INTERNAL (line 28403) | DUK_INTERNAL duk_double_t duk_bi_date_get_timeval_from_dparts(duk_double...
  function DUK_LOCAL (line 28541) | DUK_LOCAL duk_double_t duk__push_this_get_timeval_tzoffset(duk_context *...
  function DUK_LOCAL (line 28583) | DUK_LOCAL duk_double_t duk__push_this_get_timeval(duk_context *ctx, duk_...
  function DUK_LOCAL (line 28591) | DUK_LOCAL duk_ret_t duk__set_this_timeval_from_dparts(duk_context *ctx, ...
  function DUK_LOCAL (line 28606) | DUK_LOCAL void duk__format_parts_iso8601(duk_int_t *parts, duk_int_t tzo...
  function DUK_LOCAL (line 28666) | DUK_LOCAL duk_ret_t duk__to_string_helper(duk_context *ctx, duk_small_ui...
  function DUK_LOCAL (line 28722) | DUK_LOCAL duk_ret_t duk__get_part_helper(duk_context *ctx, duk_small_uin...
  function DUK_LOCAL (line 28754) | DUK_LOCAL duk_ret_t duk__set_part_helper(duk_context *ctx, duk_small_uin...
  function DUK_LOCAL (line 28853) | DUK_LOCAL void duk__twodigit_year_fixup(duk_context *ctx, duk_idx_t idx_...
  function DUK_LOCAL (line 28879) | DUK_LOCAL void duk__set_parts_from_args(duk_context *ctx, duk_double_t *...
  function DUK_LOCAL (line 29054) | DUK_LOCAL duk_small_uint_t duk__date_get_indirect_magic(duk_context *ctx) {
  function DUK_INTERNAL (line 29065) | DUK_INTERNAL duk_ret_t duk_bi_date_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 29115) | DUK_INTERNAL duk_ret_t duk_bi_date_constructor_parse(duk_context *ctx) {
  function DUK_INTERNAL (line 29119) | DUK_INTERNAL duk_ret_t duk_bi_date_constructor_utc(duk_context *ctx) {
  function DUK_INTERNAL (line 29138) | DUK_INTERNAL duk_ret_t duk_bi_date_constructor_now(duk_context *ctx) {
  function DUK_INTERNAL (line 29181) | DUK_INTERNAL duk_ret_t duk_bi_date_prototype_tostring_shared(duk_context...
  function DUK_INTERNAL (line 29186) | DUK_INTERNAL duk_ret_t duk_bi_date_prototype_value_of(duk_context *ctx) {
  function DUK_INTERNAL (line 29197) | DUK_INTERNAL duk_ret_t duk_bi_date_prototype_to_json(duk_context *ctx) {
  function DUK_INTERNAL (line 29263) | DUK_INTERNAL duk_ret_t duk_bi_date_prototype_get_shared(duk_context *ctx) {
  function DUK_INTERNAL (line 29268) | DUK_INTERNAL duk_ret_t duk_bi_date_prototype_get_timezone_offset(duk_con...
  function DUK_INTERNAL (line 29348) | DUK_INTERNAL duk_ret_t duk_bi_date_prototype_set_shared(duk_context *ctx) {
  function DUK_INTERNAL (line 29353) | DUK_INTERNAL duk_ret_t duk_bi_date_prototype_set_time(duk_context *ctx) {
  function DUK_INTERNAL (line 29433) | DUK_INTERNAL duk_double_t duk_bi_date_get_now_gettimeofday(duk_context *...
  function DUK_INTERNAL (line 29452) | DUK_INTERNAL duk_double_t duk_bi_date_get_now_time(duk_context *ctx) {
  function DUK_INTERNAL (line 29463) | DUK_INTERNAL duk_int_t duk_bi_date_get_local_tzoffset_gmtime(duk_double_...
  function DUK_INTERNAL (line 29612) | DUK_INTERNAL duk_bool_t duk_bi_date_parse_string_strptime(duk_context *c...
  function DUK_INTERNAL (line 29647) | DUK_INTERNAL duk_bool_t duk_bi_date_parse_string_getdate(duk_context *ct...
  function DUK_INTERNAL (line 29674) | DUK_INTERNAL duk_bool_t duk_bi_date_format_parts_strftime(duk_context *c...
  function DUK_LOCAL (line 29742) | DUK_LOCAL void duk__convert_systime_to_ularge(const SYSTEMTIME *st, ULAR...
  function DUK_LOCAL (line 29752) | DUK_LOCAL void duk__set_systime_jan1970(SYSTEMTIME *st) {
  function DUK_INTERNAL (line 29766) | DUK_INTERNAL duk_double_t duk_bi_date_get_now_windows(duk_context *ctx) {
  function DUK_INTERNAL_DECL (line 29788) | DUK_INTERNAL_DECL duk_int_t duk_bi_date_get_local_tzoffset_windows(duk_d...
  function DUK_INTERNAL_DECL (line 29828) | DUK_INTERNAL_DECL duk_int_t duk_bi_date_get_local_tzoffset_windows_no_ds...
  function DUK_INTERNAL (line 29873) | DUK_INTERNAL duk_ret_t duk_bi_duktape_object_info(duk_context *ctx) {
  function DUK_INTERNAL (line 29878) | DUK_INTERNAL duk_ret_t duk_bi_duktape_object_act(duk_context *ctx) {
  function DUK_INTERNAL (line 29886) | DUK_INTERNAL duk_ret_t duk_bi_duktape_object_gc(duk_context *ctx) {
  function DUK_INTERNAL (line 29901) | DUK_INTERNAL duk_ret_t duk_bi_duktape_object_fin(duk_context *ctx) {
  function DUK_INTERNAL (line 29923) | DUK_INTERNAL duk_ret_t duk_bi_duktape_object_enc(duk_context *ctx) {
  function DUK_INTERNAL (line 29970) | DUK_INTERNAL duk_ret_t duk_bi_duktape_object_dec(duk_context *ctx) {
  function DUK_INTERNAL (line 30016) | DUK_INTERNAL duk_ret_t duk_bi_duktape_object_compact(duk_context *ctx) {
  type duk__encode_context (line 30036) | typedef struct {
  type duk__decode_context (line 30041) | typedef struct {
  function DUK_LOCAL (line 30066) | DUK_LOCAL duk_uint8_t *duk__utf8_emit_repl(duk_uint8_t *ptr) {
  function DUK_LOCAL (line 30073) | DUK_LOCAL void duk__utf8_decode_init(duk__decode_context *dec_ctx) {
  function DUK_LOCAL (line 30084) | DUK_LOCAL duk_codepoint_t duk__utf8_decode_next(duk__decode_context *dec...
  function DUK_LOCAL (line 30169) | DUK_LOCAL void duk__utf8_encode_char(void *udata, duk_codepoint_t codepo...
  function DUK_LOCAL (line 30228) | DUK_LOCAL duk_ret_t duk__decode_helper(duk_context *ctx, duk__decode_con...
  function DUK_INTERNAL (line 30364) | DUK_INTERNAL duk_ret_t duk_bi_textencoder_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 30373) | DUK_INTERNAL duk_ret_t duk_bi_textencoder_prototype_encoding_getter(duk_...
  function DUK_INTERNAL (line 30378) | DUK_INTERNAL duk_ret_t duk_bi_textencoder_prototype_encode(duk_context *...
  function DUK_INTERNAL (line 30460) | DUK_INTERNAL duk_ret_t duk_bi_textdecoder_constructor(duk_context *ctx) {
  function DUK_LOCAL (line 30495) | DUK_LOCAL duk__decode_context *duk__get_textdecoder_context(duk_context ...
  function DUK_INTERNAL (line 30504) | DUK_INTERNAL duk_ret_t duk_bi_textdecoder_prototype_shared_getter(duk_co...
  function DUK_INTERNAL (line 30528) | DUK_INTERNAL duk_ret_t duk_bi_textdecoder_prototype_decode(duk_context *...
  function DUK_INTERNAL (line 30545) | DUK_INTERNAL duk_ret_t duk_textdecoder_decode_utf8_nodejs(duk_context *c...
  function DUK_INTERNAL (line 30565) | DUK_INTERNAL duk_ret_t duk_bi_error_constructor_shared(duk_context *ctx) {
  function DUK_INTERNAL (line 30607) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_to_string(duk_context *ctx) {
  function DUK_LOCAL (line 30676) | DUK_LOCAL duk_ret_t duk__error_getter_helper(duk_context *ctx, duk_small...
  function DUK_INTERNAL (line 30869) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_stack_getter(duk_context *...
  function DUK_INTERNAL (line 30873) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_filename_getter(duk_contex...
  function DUK_INTERNAL (line 30877) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_linenumber_getter(duk_cont...
  function DUK_INTERNAL (line 30895) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_stack_getter(duk_context *...
  function DUK_INTERNAL (line 30902) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_filename_getter(duk_contex...
  function DUK_INTERNAL (line 30907) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_linenumber_getter(duk_cont...
  function DUK_LOCAL (line 30914) | DUK_LOCAL duk_ret_t duk__error_setter_helper(duk_context *ctx, duk_small...
  function DUK_INTERNAL (line 30940) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_stack_setter(duk_context *...
  function DUK_INTERNAL (line 30944) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_filename_setter(duk_contex...
  function DUK_INTERNAL (line 30948) | DUK_INTERNAL duk_ret_t duk_bi_error_prototype_linenumber_setter(duk_cont...
  function DUK_INTERNAL (line 30963) | DUK_INTERNAL duk_ret_t duk_bi_function_prototype(duk_context *ctx) {
  function DUK_INTERNAL (line 30970) | DUK_INTERNAL duk_ret_t duk_bi_function_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 31054) | DUK_INTERNAL duk_ret_t duk_bi_function_prototype_to_string(duk_context *...
  function DUK_INTERNAL (line 31123) | DUK_INTERNAL duk_ret_t duk_bi_function_prototype_apply(duk_context *ctx) {
  function DUK_INTERNAL (line 31227) | DUK_INTERNAL duk_ret_t duk_bi_function_prototype_call(duk_context *ctx) {
  function DUK_INTERNAL (line 31266) | DUK_INTERNAL duk_ret_t duk_bi_function_prototype_bind(duk_context *ctx) {
  type duk__transform_context (line 31464) | typedef struct {
  function DUK_LOCAL (line 31476) | DUK_LOCAL duk_small_int_t duk__decode_hex_escape(const duk_uint8_t *p, d...
  function DUK_LOCAL (line 31493) | DUK_LOCAL int duk__transform_helper(duk_context *ctx, duk__transform_cal...
  function DUK_LOCAL (line 31521) | DUK_LOCAL void duk__transform_callback_encode_uri(duk__transform_context...
  function DUK_LOCAL (line 31583) | DUK_LOCAL void duk__transform_callback_decode_uri(duk__transform_context...
  function DUK_LOCAL (line 31722) | DUK_LOCAL void duk__transform_callback_escape(duk__transform_context *tf...
  function DUK_LOCAL (line 31761) | DUK_LOCAL void duk__transform_callback_unescape(duk__transform_context *...
  function DUK_INTERNAL (line 31796) | DUK_INTERNAL duk_ret_t duk_bi_global_object_eval(duk_context *ctx) {
  function DUK_INTERNAL (line 31978) | DUK_INTERNAL duk_ret_t duk_bi_global_object_parse_int(duk_context *ctx) {
  function DUK_INTERNAL (line 32026) | DUK_INTERNAL duk_ret_t duk_bi_global_object_parse_float(duk_context *ctx) {
  function DUK_INTERNAL (line 32057) | DUK_INTERNAL duk_ret_t duk_bi_global_object_is_nan(duk_context *ctx) {
  function DUK_INTERNAL (line 32065) | DUK_INTERNAL duk_ret_t duk_bi_global_object_is_finite(duk_context *ctx) {
  function DUK_INTERNAL (line 32077) | DUK_INTERNAL duk_ret_t duk_bi_global_object_decode_uri(duk_context *ctx) {
  function DUK_INTERNAL (line 32081) | DUK_INTERNAL duk_ret_t duk_bi_global_object_decode_uri_component(duk_con...
  function DUK_INTERNAL (line 32085) | DUK_INTERNAL duk_ret_t duk_bi_global_object_encode_uri(duk_context *ctx) {
  function DUK_INTERNAL (line 32089) | DUK_INTERNAL duk_ret_t duk_bi_global_object_encode_uri_component(duk_con...
  function DUK_INTERNAL (line 32094) | DUK_INTERNAL duk_ret_t duk_bi_global_object_escape(duk_context *ctx) {
  function DUK_INTERNAL (line 32098) | DUK_INTERNAL duk_ret_t duk_bi_global_object_unescape(duk_context *ctx) {
  function DUK_LOCAL (line 32316) | DUK_LOCAL void duk__dec_syntax_error(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32325) | DUK_LOCAL void duk__dec_eat_white(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32356) | DUK_LOCAL duk_uint8_t duk__dec_peek(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32362) | DUK_LOCAL duk_uint8_t duk__dec_get(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32367) | DUK_LOCAL duk_uint8_t duk__dec_get_nonwhite(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32373) | DUK_LOCAL duk_uint_fast32_t duk__dec_decode_hex_escape(duk_json_dec_ctx ...
  function DUK_LOCAL (line 32406) | DUK_LOCAL void duk__dec_req_stridx(duk_json_dec_ctx *js_ctx, duk_small_u...
  function DUK_LOCAL (line 32443) | DUK_LOCAL duk_small_int_t duk__dec_string_escape(duk_json_dec_ctx *js_ct...
  function DUK_LOCAL (line 32492) | DUK_LOCAL void duk__dec_string(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32602) | DUK_LOCAL void duk__dec_plain_string(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32645) | DUK_LOCAL void duk__dec_pointer(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32699) | DUK_LOCAL void duk__dec_buffer(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32758) | DUK_LOCAL void duk__dec_number(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32823) | DUK_LOCAL void duk__dec_objarr_entry(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32837) | DUK_LOCAL void duk__dec_objarr_exit(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32845) | DUK_LOCAL void duk__dec_object(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 32928) | DUK_LOCAL void duk__dec_array(duk_json_dec_ctx *js_ctx) {
  function else (line 33021) | else if (x == DUK_ASC_LC_T) {
  function else (line 33024) | else if (x == DUK_ASC_LC_F) {
  function else (line 33027) | else if (x == DUK_ASC_LC_N) {
  function else (line 33031) | else if (js_ctx->flag_ext_custom && x == DUK_ASC_LC_U) {
  function else (line 33034) | else if (js_ctx->flag_ext_custom && x == DUK_ASC_UC_N) {
  function else (line 33037) | else if (js_ctx->flag_ext_custom && x == DUK_ASC_UC_I) {
  function else (line 33040) | else if (js_ctx->flag_ext_custom && x == DUK_ASC_LPAREN) {
  function else (line 33042) | else if (js_ctx->flag_ext_custom && x == DUK_ASC_PIPE) {
  function else (line 33045) | else if (x == DUK_ASC_LCURLY) {
  function else (line 33047) | else if (x == DUK_ASC_LBRACKET) {
  function DUK_LOCAL (line 33068) | DUK_LOCAL void duk__dec_reviver_walk(duk_json_dec_ctx *js_ctx) {
  function DUK_LOCAL (line 33168) | DUK_LOCAL void duk__emit_1(duk_json_enc_ctx *js_ctx, duk_uint_fast8_t ch) {
  function DUK_LOCAL (line 33172) | DUK_LOCAL void duk__emit_2(duk_json_enc_ctx *js_ctx, duk_uint_fast8_t ch...
  function DUK_LOCAL (line 33176) | DUK_LOCAL void duk__emit_hstring(duk_json_enc_ctx *js_ctx, duk_hstring *...
  function DUK_LOCAL (line 33181) | DUK_LOCAL void duk__emit_cstring(duk_json_enc_ctx *js_ctx, const char *s...
  function DUK_LOCAL (line 33186) | DUK_LOCAL void duk__emit_stridx(duk_json_enc_ctx *js_ctx, duk_small_uint...
  function DUK_LOCAL (line 33196) | DUK_LOCAL void duk__unemit_1(duk_json_enc_ctx *js_ctx) {
  function DUK_LOCAL (line 33206) | DUK_LOCAL duk_uint8_t *duk__emit_esc_auto_fast(duk_json_enc_ctx *js_ctx,...
  function DUK_LOCAL (line 33260) | DUK_LOCAL void duk__enc_key_autoquote(duk_json_enc_ctx *js_ctx, duk_hstr...
  function DUK_LOCAL (line 33448) | DUK_LOCAL void duk__enc_double(duk_json_enc_ctx *js_ctx) {
  function DUK_LOCAL (line 33514) | DUK_LOCAL void duk__enc_fastint_tval(duk_json_enc_ctx *js_ctx, duk_tval ...
  function DUK_LOCAL (line 33539) | DUK_LOCAL duk_uint8_t *duk__enc_buffer_data_hex(const duk_uint8_t *src, ...
  function DUK_LOCAL (line 33597) | DUK_LOCAL duk_uint8_t *duk__enc_buffer_data_hex(const duk_uint8_t *src, ...
  function DUK_LOCAL (line 33616) | DUK_LOCAL void duk__enc_buffer_data(duk_json_enc_ctx *js_ctx, duk_uint8_...
  function DUK_LOCAL (line 33670) | DUK_LOCAL void duk__enc_buffer_jx_jc(duk_json_enc_ctx *js_ctx, duk_hbuff...
  function DUK_LOCAL (line 33678) | DUK_LOCAL void duk__enc_buffer_json_fastpath(duk_json_enc_ctx *js_ctx, d...
  function DUK_LOCAL (line 33725) | DUK_LOCAL void duk__enc_pointer(duk_json_enc_ctx *js_ctx, void *ptr) {
  function DUK_LOCAL (line 33763) | DUK_LOCAL void duk__enc_bufobj(duk_json_enc_ctx *js_ctx, duk_hbufobj *h_...
  function DUK_LOCAL (line 33782) | DUK_LOCAL void duk__enc_newline_indent(duk_json_enc_ctx *js_ctx, duk_int...
  function DUK_LOCAL (line 33792) | DUK_LOCAL void duk__enc_newline_indent(duk_json_enc_ctx *js_ctx, duk_int...
  function DUK_LOCAL (line 33845) | DUK_LOCAL void duk__enc_objarr_entry(duk_json_enc_ctx *js_ctx, duk_idx_t...
  function DUK_LOCAL (line 33896) | DUK_LOCAL void duk__enc_objarr_exit(duk_json_enc_ctx *js_ctx, duk_idx_t ...
  function DUK_LOCAL (line 33928) | DUK_LOCAL void duk__enc_object(duk_json_enc_ctx *js_ctx) {
  function DUK_LOCAL (line 34024) | DUK_LOCAL void duk__enc_array(duk_json_enc_ctx *js_ctx) {
  function DUK_LOCAL (line 34090) | DUK_LOCAL duk_bool_t duk__enc_value(duk_json_enc_ctx *js_ctx, duk_idx_t ...
  function DUK_LOCAL (line 34359) | DUK_LOCAL duk_bool_t duk__enc_allow_into_proplist(duk_tval *tv) {
  function DUK_LOCAL (line 34399) | DUK_LOCAL duk_bool_t duk__json_stringify_fast_value(duk_json_enc_ctx *js...
  function DUK_INTERNAL (line 35695) | DUK_INTERNAL duk_ret_t duk_bi_math_object_onearg_shared(duk_context *ctx) {
  function DUK_INTERNAL (line 35708) | DUK_INTERNAL duk_ret_t duk_bi_math_object_twoarg_shared(duk_context *ctx) {
  function DUK_INTERNAL (line 35723) | DUK_INTERNAL duk_ret_t duk_bi_math_object_max(duk_context *ctx) {
  function DUK_INTERNAL (line 35727) | DUK_INTERNAL duk_ret_t duk_bi_math_object_min(duk_context *ctx) {
  function DUK_INTERNAL (line 35731) | DUK_INTERNAL duk_ret_t duk_bi_math_object_random(duk_context *ctx) {
  function DUK_INTERNAL (line 35737) | DUK_INTERNAL duk_ret_t duk_bi_math_object_hypot(duk_context *ctx) {
  function DUK_LOCAL (line 35813) | DUK_LOCAL duk_double_t duk__push_this_number_plain(duk_context *ctx) {
  function DUK_INTERNAL (line 35841) | DUK_INTERNAL duk_ret_t duk_bi_number_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 35894) | DUK_INTERNAL duk_ret_t duk_bi_number_prototype_value_of(duk_context *ctx) {
  function DUK_INTERNAL (line 35899) | DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_string(duk_context *ct...
  function DUK_INTERNAL (line 35920) | DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_locale_string(duk_cont...
  function DUK_INTERNAL (line 35933) | DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_fixed(duk_context *ctx) {
  function DUK_INTERNAL (line 35966) | DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_exponential(duk_contex...
  function DUK_INTERNAL (line 36000) | DUK_INTERNAL duk_ret_t duk_bi_number_prototype_to_precision(duk_context ...
  function DUK_INTERNAL (line 36055) | DUK_INTERNAL duk_ret_t duk_bi_object_prototype_to_string(duk_context *ct...
  function DUK_INTERNAL (line 36067) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 36108) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_assign(duk_context *ctx) {
  function DUK_INTERNAL (line 36142) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_is(duk_context *ctx) {
  function DUK_INTERNAL (line 36150) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_create(duk_context *ctx) {
  function DUK_INTERNAL (line 36188) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_define_properties(duk_c...
  function DUK_INTERNAL (line 36275) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_seal_freeze_shared(duk_...
  function DUK_INTERNAL (line 36332) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_is_sealed_frozen_shared...
  function DUK_INTERNAL (line 36357) | DUK_INTERNAL duk_ret_t duk_bi_object_prototype_to_locale_string(duk_cont...
  function DUK_INTERNAL (line 36371) | DUK_INTERNAL duk_ret_t duk_bi_object_prototype_value_of(duk_context *ctx) {
  function DUK_INTERNAL (line 36379) | DUK_INTERNAL duk_ret_t duk_bi_object_prototype_is_prototype_of(duk_conte...
  function DUK_INTERNAL (line 36404) | DUK_INTERNAL duk_ret_t duk_bi_object_prototype_has_own_property(duk_cont...
  function DUK_INTERNAL (line 36410) | DUK_INTERNAL duk_ret_t duk_bi_object_prototype_property_is_enumerable(du...
  function DUK_INTERNAL (line 36421) | DUK_INTERNAL duk_ret_t duk_bi_object_getprototype_shared(duk_context *ct...
  function DUK_INTERNAL (line 36480) | DUK_INTERNAL duk_ret_t duk_bi_object_setprototype_shared(duk_context *ct...
  function DUK_INTERNAL (line 36576) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_define_property(duk_con...
  function DUK_INTERNAL (line 36663) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_get_own_property_descri...
  function DUK_INTERNAL (line 36679) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_is_extensible(duk_conte...
  function DUK_INTERNAL (line 36732) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_keys_shared(duk_context...
  function DUK_INTERNAL (line 36809) | DUK_INTERNAL duk_ret_t duk_bi_object_constructor_prevent_extensions(duk_...
  function DUK_INTERNAL (line 36866) | DUK_INTERNAL duk_ret_t duk_bi_pointer_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 36899) | DUK_INTERNAL duk_ret_t duk_bi_pointer_prototype_tostring_shared(duk_cont...
  function DUK_INTERNAL (line 36942) | DUK_INTERNAL void duk_proxy_ownkeys_postprocess(duk_context *ctx, duk_ho...
  function DUK_INTERNAL (line 37019) | DUK_INTERNAL duk_ret_t duk_bi_proxy_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 37092) | DUK_INTERNAL duk_ret_t duk_bi_reflect_object_delete_property(duk_context...
  function DUK_INTERNAL (line 37113) | DUK_INTERNAL duk_ret_t duk_bi_reflect_object_get(duk_context *ctx) {
  function DUK_INTERNAL (line 37137) | DUK_INTERNAL duk_ret_t duk_bi_reflect_object_has(duk_context *ctx) {
  function DUK_INTERNAL (line 37158) | DUK_INTERNAL duk_ret_t duk_bi_reflect_object_set(duk_context *ctx) {
  function DUK_LOCAL (line 37194) | DUK_LOCAL void duk__get_this_regexp(duk_context *ctx) {
  function DUK_INTERNAL (line 37205) | DUK_INTERNAL duk_ret_t duk_bi_regexp_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 37277) | DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_exec(duk_context *ctx) {
  function DUK_INTERNAL (line 37289) | DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_test(duk_context *ctx) {
  function DUK_INTERNAL (line 37304) | DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_tostring(duk_context *ctx) {
  function DUK_INTERNAL (line 37316) | DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_flags(duk_context *ctx) {
  function DUK_INTERNAL (line 37345) | DUK_INTERNAL duk_ret_t duk_bi_regexp_prototype_shared_getter(duk_context...
  function DUK_LOCAL (line 37439) | DUK_LOCAL duk_hstring *duk__str_tostring_notregexp(duk_context *ctx, duk...
  function DUK_LOCAL (line 37451) | DUK_LOCAL duk_int_t duk__str_search_shared(duk_context *ctx, duk_hstring...
  function DUK_INTERNAL (line 37529) | DUK_INTERNAL duk_ret_t duk_bi_string_constructor(duk_context *ctx) {
  function DUK_LOCAL (line 37571) | DUK_LOCAL duk_ret_t duk__construct_from_codepoints(duk_context *ctx, duk...
  function DUK_INTERNAL (line 37630) | DUK_INTERNAL duk_ret_t duk_bi_string_constructor_from_char_code(duk_cont...
  function DUK_INTERNAL (line 37635) | DUK_INTERNAL duk_ret_t duk_bi_string_constructor_from_code_point(duk_con...
  function DUK_INTERNAL (line 37644) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_to_string(duk_context *ct...
  function DUK_INTERNAL (line 37679) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_char_at(duk_context *ctx) {
  function DUK_INTERNAL (line 37691) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_char_code_at(duk_context ...
  function DUK_INTERNAL (line 37740) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_substring(duk_context *ct...
  function DUK_INTERNAL (line 37773) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_substr(duk_context *ctx) {
  function DUK_INTERNAL (line 37817) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_slice(duk_context *ctx) {
  function DUK_INTERNAL (line 37857) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_caseconv_shared(duk_conte...
  function DUK_INTERNAL (line 37870) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_indexof_shared(duk_contex...
  function DUK_LOCAL (line 38576) | DUK_LOCAL void duk__to_regexp_helper(duk_context *ctx, duk_idx_t idx, du...
  function DUK_INTERNAL (line 38602) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_search(duk_context *ctx) {
  function DUK_INTERNAL (line 38643) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_match(duk_context *ctx) {
  function DUK_INTERNAL (line 38716) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_concat(duk_context *ctx) {
  function DUK_INTERNAL (line 38724) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_trim(duk_context *ctx) {
  function DUK_INTERNAL (line 38733) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_repeat(duk_context *ctx) {
  function DUK_INTERNAL (line 38830) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_locale_compare(duk_contex...
  function DUK_INTERNAL (line 38889) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_startswith_endswith(duk_c...
  function DUK_INTERNAL (line 38954) | DUK_INTERNAL duk_ret_t duk_bi_string_prototype_includes(duk_context *ctx) {
  function DUK_INTERNAL (line 38988) | DUK_INTERNAL duk_ret_t duk_bi_symbol_constructor_shared(duk_context *ctx) {
  function DUK_LOCAL (line 39051) | DUK_LOCAL duk_hstring *duk__auto_unbox_symbol(duk_context *ctx, duk_tval...
  function DUK_INTERNAL (line 39090) | DUK_INTERNAL duk_ret_t duk_bi_symbol_tostring_shared(duk_context *ctx) {
  function DUK_INTERNAL (line 39108) | DUK_INTERNAL duk_ret_t duk_bi_symbol_key_for(duk_context *ctx) {
  function DUK_INTERNAL (line 39137) | DUK_INTERNAL duk_ret_t duk_bi_symbol_toprimitive(duk_context *ctx) {
  function DUK_INTERNAL (line 39160) | DUK_INTERNAL duk_ret_t duk_bi_thread_constructor(duk_context *ctx) {
  function DUK_INTERNAL (line 39202) | DUK_INTERNAL duk_ret_t duk_bi_thread_resume(duk_context *ctx) {
  function DUK_INTERNAL (line 39354) | DUK_INTERNAL duk_ret_t duk_bi_thread_yield(duk_context *ctx) {
  function DUK_INTERNAL (line 39455) | DUK_INTERNAL duk_ret_t duk_bi_thread_current(duk_context *ctx) {
  function DUK_INTERNAL (line 39466) | DUK_INTERNAL duk_ret_t duk_bi_type_error_thrower(duk_context *ctx) {
  function DUK_INTERNAL (line 39478) | DUK_INTERNAL void duk_fb_put_bytes(duk_fixedbuffer *fb, const duk_uint8_...
  function DUK_INTERNAL (line 39493) | DUK_INTERNAL void duk_fb_put_byte(duk_fixedbuffer *fb, duk_uint8_t x) {
  function DUK_INTERNAL (line 39497) | DUK_INTERNAL void duk_fb_put_cstring(duk_fixedbuffer *fb, const char *x) {
  function DUK_INTERNAL (line 39501) | DUK_INTERNAL void duk_fb_sprintf(duk_fixedbuffer *fb, const char *fmt, ....
  function DUK_INTERNAL (line 39526) | DUK_INTERNAL void duk_fb_put_funcptr(duk_fixedbuffer *fb, duk_uint8_t *f...
  function DUK_INTERNAL (line 39533) | DUK_INTERNAL duk_bool_t duk_fb_is_full(duk_fixedbuffer *fb) {
  type duk__dprint_state (line 39655) | typedef struct duk__dprint_state duk__dprint_state;
  type duk__dprint_state (line 39656) | struct duk__dprint_state {
  function DUK_LOCAL (line 39687) | DUK_LOCAL void duk__print_shared_heaphdr(duk__dprint_state *st, duk_heap...
  function DUK_LOCAL (line 39735) | DUK_LOCAL void duk__print_shared_heaphdr_string(duk__dprint_state *st, d...
  function DUK_LOCAL (line 39779) | DUK_LOCAL void duk__print_hstring(duk__dprint_state *st, duk_hstring *h,...
  function DUK_LOCAL (line 39847) | DUK_LOCAL void duk__print_hobject(duk__dprint_state *st, duk_hobject *h) {
  function DUK_LOCAL (line 40142) | DUK_LOCAL void duk__print_hbuffer(duk__dprint_state *st, duk_hbuffer *h) {
  function DUK_LOCAL (line 40189) | DUK_LOCAL void duk__print_heaphdr(duk__dprint_state *st, duk_heaphdr *h) {
  function DUK_LOCAL (line 40217) | DUK_LOCAL void duk__print_tval(duk__dprint_state *st, duk_tval *tv) {
  function DUK_LOCAL (line 40311) | DUK_LOCAL void duk__print_instr(duk__dprint_state *st, duk_instr_t ins) {
  function DUK_LOCAL (line 40336) | DUK_LOCAL void duk__print_opcode(duk__dprint_state *st, duk_small_int_t ...
  function DUK_INTERNAL (line 40346) | DUK_INTERNAL duk_int_t duk_debug_vsnprintf(char *str, duk_size_t size, c...
  function DUK_INTERNAL (line 40530) | DUK_INTERNAL duk_int_t duk_debug_snprintf(char *str, duk_size_t size, co...
  function DUK_INTERNAL (line 40545) | DUK_INTERNAL void duk_debug_format_funcptr(char *buf, duk_size_t buf_siz...
  type duk__ptr_union (line 40589) | typedef union {
  function duk__debug_do_detach1 (line 40607) | void duk__debug_do_detach1(duk_heap *heap, duk_int_t reason) {
  function DUK_LOCAL (line 40665) | DUK_LOCAL void duk__debug_do_detach2(duk_heap *heap) {
  function DUK_INTERNAL (line 40697) | DUK_INTERNAL void duk_debug_do_detach(duk_heap *heap) {
  function DUK_LOCAL (line 40707) | DUK_LOCAL void duk__debug_null_most_callbacks(duk_hthread *thr) {
  function DUK_INTERNAL (line 40727) | DUK_INTERNAL duk_bool_t duk_debug_read_peek(duk_hthread *thr) {
  function DUK_INTERNAL (line 40746) | DUK_INTERNAL void duk_debug_read_flush(duk_hthread *thr) {
  function DUK_INTERNAL (line 40765) | DUK_INTERNAL void duk_debug_write_flush(duk_hthread *thr) {
  function DUK_INTERNAL (line 40789) | DUK_INTERNAL void duk_debug_skip_bytes(duk_hthread *thr, duk_size_t leng...
  function DUK_INTERNAL (line 40802) | DUK_INTERNAL void duk_debug_skip_byte(duk_hthread *thr) {
  function DUK_INTERNAL (line 40813) | DUK_INTERNAL uint8_t duk_debug_peek_byte(duk_hthread *thr) {
  function DUK_INTERNAL (line 40828) | DUK_INTERNAL void duk_debug_read_bytes(duk_hthread *thr, duk_uint8_t *da...
  function DUK_INTERNAL (line 40874) | DUK_INTERNAL duk_uint8_t duk_debug_read_byte(duk_hthread *thr) {
  function DUK_LOCAL (line 40882) | DUK_LOCAL duk_uint32_t duk__debug_read_uint32_raw(duk_hthread *thr) {
  function DUK_LOCAL (line 40894) | DUK_LOCAL duk_uint32_t duk__debug_read_int32_raw(duk_hthread *thr) {
  function DUK_LOCAL (line 40898) | DUK_LOCAL duk_uint16_t duk__debug_read_uint16_raw(duk_hthread *thr) {
  function DUK_INTERNAL (line 40908) | DUK_INTERNAL duk_int32_t duk_debug_read_int(duk_hthread *thr) {
  function DUK_LOCAL (line 40929) | DUK_LOCAL duk_hstring *duk__debug_read_hstring_raw(duk_hthread *thr, duk...
  function DUK_INTERNAL (line 40947) | DUK_INTERNAL duk_hstring *duk_debug_read_hstring(duk_hthread *thr) {
  function DUK_LOCAL (line 40975) | DUK_LOCAL duk_hbuffer *duk__debug_read_hbuffer_raw(duk_hthread *thr, duk...
  function DUK_LOCAL (line 40986) | DUK_LOCAL void *duk__debug_read_pointer_raw(duk_hthread *thr) {
  function DUK_LOCAL (line 41008) | DUK_LOCAL duk_double_t duk__debug_read_double_raw(duk_hthread *thr) {
  function DUK_INTERNAL (line 41018) | DUK_INTERNAL duk_heaphdr *duk_debug_read_heapptr(duk_hthread *thr) {
  function DUK_INTERNAL (line 41037) | DUK_INTERNAL duk_heaphdr *duk_debug_read_any_ptr(duk_hthread *thr) {
  function DUK_INTERNAL (line 41066) | DUK_INTERNAL duk_tval *duk_debug_read_tval(duk_hthread *thr) {
  function DUK_INTERNAL (line 41186) | DUK_INTERNAL void duk_debug_write_bytes(duk_hthread *thr, const duk_uint...
  function DUK_INTERNAL (line 41231) | DUK_INTERNAL void duk_debug_write_byte(duk_hthread *thr, duk_uint8_t x) {
  function DUK_INTERNAL (line 41235) | DUK_INTERNAL void duk_debug_write_unused(duk_hthread *thr) {
  function DUK_INTERNAL (line 41239) | DUK_INTERNAL void duk_debug_write_undefined(duk_hthread *thr) {
  function DUK_INTERNAL (line 41244) | DUK_INTERNAL void duk_debug_write_null(duk_hthread *thr) {
  function DUK_INTERNAL (line 41249) | DUK_INTERNAL void duk_debug_write_boolean(duk_hthread *thr, duk_uint_t v...
  function DUK_INTERNAL (line 41254) | DUK_INTERNAL void duk_debug_write_int(duk_hthread *thr, duk_int32_t x) {
  function DUK_INTERNAL (line 41280) | DUK_INTERNAL void duk_debug_write_uint(duk_hthread *thr, duk_uint32_t x) {
  function DUK_INTERNAL (line 41295) | DUK_INTERNAL void duk_debug_write_strbuf(duk_hthread *thr, const char *d...
  function DUK_INTERNAL (line 41324) | DUK_INTERNAL void duk_debug_write_string(duk_hthread *thr, const char *d...
  function DUK_INTERNAL (line 41328) | DUK_INTERNAL void duk_debug_write_cstring(duk_hthread *thr, const char *...
  function DUK_INTERNAL (line 41336) | DUK_INTERNAL void duk_debug_write_hstring(duk_hthread *thr, duk_hstring ...
  function DUK_LOCAL (line 41345) | DUK_LOCAL void duk__debug_write_hstring_safe_top(duk_hthread *thr) {
  function DUK_INTERNAL (line 41350) | DUK_INTERNAL void duk_debug_write_buffer(duk_hthread *thr, const char *d...
  function DUK_INTERNAL (line 41354) | DUK_INTERNAL void duk_debug_write_hbuffer(duk_hthread *thr, duk_hbuffer ...
  function DUK_LOCAL (line 41362) | DUK_LOCAL void duk__debug_write_pointer_raw(duk_hthread *thr, void *ptr,...
  function DUK_INTERNAL (line 41380) | DUK_INTERNAL void duk_debug_write_pointer(duk_hthread *thr, void *ptr) {
  function DUK_INTERNAL (line 41385) | DUK_INTERNAL void duk_debug_write_heapptr(duk_hthread *thr, duk_heaphdr ...
  function DUK_INTERNAL (line 41390) | DUK_INTERNAL void duk_debug_write_hobject(duk_hthread *thr, duk_hobject ...
  function DUK_INTERNAL (line 41409) | DUK_INTERNAL void duk_debug_write_tval(duk_hthread *thr, duk_tval *tv) {
  function DUK_LOCAL (line 41500) | DUK_LOCAL void duk__debug_write_tval_heapptr(duk_hthread *thr, duk_tval ...
  function DUK_INTERNAL (line 41515) | DUK_INTERNAL void duk_debug_write_request(duk_hthread *thr, duk_small_ui...
  function DUK_INTERNAL (line 41521) | DUK_INTERNAL void duk_debug_write_reply(duk_hthread *thr) {
  function DUK_INTERNAL (line 41525) | DUK_INTERNAL void duk_debug_write_error_eom(duk_hthread *thr, duk_small_...
  function DUK_INTERNAL (line 41533) | DUK_INTERNAL void duk_debug_write_notify(duk_hthread *thr, duk_small_uin...
  function DUK_INTERNAL (line 41538) | DUK_INTERNAL void duk_debug_write_eom(duk_hthread *thr) {
  function DUK_INTERNAL (line 41553) | DUK_INTERNAL duk_uint_fast32_t duk_debug_curr_line(duk_hthread *thr) {
  function DUK_INTERNAL (line 41582) | DUK_INTERNAL void duk_debug_send_status(duk_hthread *thr) {
  function DUK_INTERNAL (line 41613) | DUK_INTERNAL void duk_debug_send_throw(duk_hthread *thr, duk_bool_t fata...
  function DUK_LOCAL (line 41671) | DUK_LOCAL duk_bool_t duk__debug_skip_dvalue(duk_hthread *thr) {
  function DUK_LOCAL (line 41745) | DUK_LOCAL void duk__debug_skip_to_eom(duk_hthread *thr) {
  function DUK_LOCAL (line 41753) | DUK_LOCAL duk_int32_t duk__debug_read_validate_csindex(duk_hthread *thr) {
  function DUK_LOCAL (line 41767) | DUK_LOCAL void duk__debug_handle_basic_info(duk_hthread *thr, duk_heap *...
  function DUK_LOCAL (line 41788) | DUK_LOCAL void duk__debug_handle_trigger_status(duk_hthread *thr, duk_he...
  function DUK_LOCAL (line 41797) | DUK_LOCAL void duk__debug_handle_pause(duk_hthread *thr, duk_heap *heap) {
  function DUK_LOCAL (line 41809) | DUK_LOCAL void duk__debug_handle_resume(duk_hthread *thr, duk_heap *heap) {
  function DUK_LOCAL (line 41817) | DUK_LOCAL void duk__debug_handle_step(duk_hthread *thr, duk_heap *heap, ...
  function DUK_LOCAL (line 41847) | DUK_LOCAL void duk__debug_handle_list_break(duk_hthread *thr, duk_heap *...
  function DUK_LOCAL (line 41859) | DUK_LOCAL void duk__debug_handle_add_break(duk_hthread *thr, duk_heap *h...
  function DUK_LOCAL (line 41879) | DUK_LOCAL void duk__debug_handle_del_break(duk_hthread *thr, duk_heap *h...
  function DUK_LOCAL (line 41894) | DUK_LOCAL void duk__debug_handle_get_var(duk_hthread *thr, duk_heap *hea...
  function DUK_LOCAL (line 41936) | DUK_LOCAL void duk__debug_handle_put_var(duk_hthread *thr, duk_heap *hea...
  function DUK_LOCAL (line 41973) | DUK_LOCAL void duk__debug_handle_get_call_stack(duk_hthread *thr, duk_he...
  function DUK_LOCAL (line 42026) | DUK_LOCAL void duk__debug_handle_get_locals(duk_hthread *thr, duk_heap *...
  function DUK_LOCAL (line 42068) | DUK_LOCAL void duk__debug_handle_eval(duk_hthread *thr, duk_heap *heap) {
  function DUK_LOCAL (line 42159) | DUK_LOCAL void duk__debug_handle_detach(duk_hthread *thr, duk_heap *heap) {
  function DUK_LOCAL (line 42170) | DUK_LOCAL void duk__debug_handle_apprequest(duk_hthread *thr, duk_heap *...
  function DUK_LOCAL (line 42254) | DUK_LOCAL void duk__debug_dump_heaphdr(duk_hthread *thr, duk_heap *heap,...
  function DUK_LOCAL (line 42329) | DUK_LOCAL void duk__debug_dump_heap_allocated(duk_hthread *thr, duk_heap...
  function DUK_LOCAL (line 42339) | DUK_LOCAL void duk__debug_dump_strtab(duk_hthread *thr, duk_heap *heap) {
  function DUK_LOCAL (line 42356) | DUK_LOCAL void duk__debug_handle_dump_heap(duk_hthread *thr, duk_heap *h...
  function DUK_LOCAL (line 42366) | DUK_LOCAL void duk__debug_handle_get_bytecode(duk_hthread *thr, duk_heap...
  function DUK_LOCAL (line 42547) | DUK_LOCAL void duk__debug_getinfo_flags_key(duk_hthread *thr, const char...
  function DUK_LOCAL (line 42552) | DUK_LOCAL void duk__debug_getinfo_prop_uint(duk_hthread *thr, const char...
  function DUK_LOCAL (line 42558) | DUK_LOCAL void duk__debug_getinfo_prop_int(duk_hthread *thr, const char ...
  function DUK_LOCAL (line 42564) | DUK_LOCAL void duk__debug_getinfo_prop_bool(duk_hthread *thr, const char...
  function DUK_LOCAL (line 42570) | DUK_LOCAL void duk__debug_getinfo_bitmask(duk_hthread *thr, const char *...
  function DUK_LOCAL (line 42592) | DUK_LOCAL duk_bool_t duk__debug_getprop_index(duk_hthread *thr, duk_heap...
  function DUK_LOCAL (line 42652) | DUK_LOCAL void duk__debug_handle_get_heap_obj_info(duk_hthread *thr, duk...
  function DUK_LOCAL (line 42858) | DUK_LOCAL void duk__debug_handle_get_obj_prop_desc(duk_hthread *thr, duk...
  function DUK_LOCAL (line 42901) | DUK_LOCAL void duk__debug_handle_get_obj_prop_desc_range(duk_hthread *th...
  function DUK_LOCAL (line 42951) | DUK_LOCAL void duk__debug_process_message(duk_hthread *thr) {
  function DUK_LOCAL (line 43097) | DUK_LOCAL void duk__check_resend_status(duk_hthread *thr) {
  function DUK_INTERNAL (line 43104) | DUK_INTERNAL duk_bool_t duk_debug_process_messages(duk_hthread *thr, duk...
  function DUK_INTERNAL (line 43231) | DUK_INTERNAL void duk_debug_halt_execution(duk_hthread *thr, duk_bool_t ...
  function DUK_INTERNAL (line 43298) | DUK_INTERNAL duk_small_int_t duk_debug_add_breakpoint(duk_hthread *thr, ...
  function DUK_INTERNAL (line 43326) | DUK_INTERNAL duk_bool_t duk_debug_remove_breakpoint(duk_hthread *thr, du...
  function DUK_INTERNAL (line 43373) | DUK_INTERNAL duk_bool_t duk_debug_is_attached(duk_heap *heap) {
  function DUK_INTERNAL (line 43377) | DUK_INTERNAL duk_bool_t duk_debug_is_paused(duk_heap *heap) {
  function DUK_INTERNAL (line 43381) | DUK_INTERNAL void duk_debug_set_paused(duk_heap *heap) {
  function DUK_INTERNAL (line 43396) | DUK_INTERNAL void duk_debug_clear_paused(duk_heap *heap) {
  function DUK_INTERNAL (line 43411) | DUK_INTERNAL void duk_debug_clear_step_state(duk_heap *heap) {
  function DUK_LOCAL (line 43487) | DUK_LOCAL void duk__err_augment_user(duk_hthread *thr, duk_small_uint_t ...
  function DUK_LOCAL (line 43582) | DUK_LOCAL void duk__add_traceback(duk_hthread *thr, duk_hthread *thr_cal...
  function DUK_LOCAL (line 43734) | DUK_LOCAL void duk__add_fileline(duk_hthread *thr, duk_hthread *thr_call...
  function DUK_LOCAL (line 43855) | DUK_LOCAL void duk__add_compiler_error_line(duk_hthread *thr) {
  function DUK_LOCAL (line 43895) | DUK_LOCAL void duk__err_augment_builtin_create(duk_hthread *thr, duk_hth...
  function DUK_INTERNAL (line 43952) | DUK_INTERNAL void duk_err_augment_error_create(duk_hthread *thr, duk_hth...
  function DUK_INTERNAL (line 44009) | DUK_INTERNAL void duk_err_augment_error_throw(duk_hthread *thr) {
  function DUK_LOCAL (line 44023) | DUK_LOCAL void duk__uncaught_minimal(duk_hthread *thr) {
  function DUK_LOCAL (line 44029) | DUK_LOCAL void duk__uncaught_readable(duk_hthread *thr) {
  function DUK_LOCAL (line 44041) | DUK_LOCAL void duk__uncaught_error_aware(duk_hthread *thr) {
  function DUK_INTERNAL (line 44053) | DUK_INTERNAL void duk_err_longjmp(duk_hthread *thr) {
  function DUK_LOCAL (line 44134) | DUK_LOCAL duk_bool_t duk__have_active_catcher(duk_hthread *thr) {
  function DUK_INTERNAL (line 44163) | DUK_INTERNAL duk_hobject *duk_error_prototype_from_code(duk_hthread *thr...
  function DUK_INTERNAL (line 44189) | DUK_INTERNAL void duk_err_check_debugger_integration(duk_hthread *thr) {
  function DUK_INTERNAL (line 44272) | DUK_INTERNAL void duk_err_check_debugger_integration(duk_hthread *thr) {
  function DUK_INTERNAL (line 44282) | DUK_INTERNAL void duk_err_setup_ljstate1(duk_hthread *thr, duk_small_uin...
  function DUK_INTERNAL (line 44323) | DUK_INTERNAL void duk_err_create_and_throw(duk_hthread *thr, duk_errcode...
  function DUK_INTERNAL (line 44454) | DUK_INTERNAL void duk_error_throw_from_negative_rc(duk_hthread *thr, duk...
  function DUK_INTERNAL (line 44483) | DUK_INTERNAL duk_hbuffer *duk_hbuffer_alloc(duk_heap *heap, duk_size_t s...
  function DUK_INTERNAL (line 44600) | DUK_INTERNAL void *duk_hbuffer_get_dynalloc_ptr(duk_heap *heap, void *ud) {
  function DUK_INTERNAL (line 44622) | DUK_INTERNAL void duk_hbuffer_resize(duk_hthread *thr, duk_hbuffer_dynam...
  function DUK_INTERNAL (line 44679) | DUK_INTERNAL void duk_hbuffer_reset(duk_hthread *thr, duk_hbuffer_dynami...
  function DUK_INTERNAL (line 44690) | DUK_INTERNAL duk_uint_t duk_hbufobj_clamp_bytelength(duk_hbufobj *h_bufo...
  function DUK_INTERNAL (line 44727) | DUK_INTERNAL void duk_free_hobject(duk_heap *heap, duk_hobject *h) {
  function DUK_INTERNAL (line 44759) | DUK_INTERNAL void duk_free_hbuffer(duk_heap *heap, duk_hbuffer *h) {
  function DUK_INTERNAL (line 44771) | DUK_INTERNAL void duk_free_hstring(duk_heap *heap, duk_hstring *h) {
  function DUK_INTERNAL (line 44788) | DUK_INTERNAL void duk_heap_free_heaphdr_raw(duk_heap *heap, duk_heaphdr ...
  function DUK_LOCAL (line 44821) | DUK_LOCAL void duk__free_allocated(duk_heap *heap) {
  function DUK_LOCAL (line 44840) | DUK_LOCAL void duk__free_finalize_list(duk_heap *heap) {
  function DUK_LOCAL (line 44855) | DUK_LOCAL void duk__free_stringtable(duk_heap *heap) {
  function DUK_LOCAL (line 44861) | DUK_LOCAL void duk__free_run_finalizers(duk_heap *heap) {
  function DUK_INTERNAL (line 44960) | DUK_INTERNAL void duk_heap_free(duk_heap *heap) {
  function DUK_LOCAL (line 45053) | DUK_LOCAL duk_bool_t duk__init_heap_strings(duk_heap *heap) {
  function DUK_LOCAL (line 45084) | DUK_LOCAL duk_bool_t duk__init_heap_strings(duk_heap *heap) {
  function DUK_LOCAL (line 45147) | DUK_LOCAL duk_bool_t duk__init_heap_thread(duk_heap *heap) {
  function DUK_LOCAL (line 45215) | DUK_LOCAL void duk__dump_type_sizes(void) {
  function DUK_LOCAL (line 45324) | DUK_LOCAL void duk__dump_type_limits(void) {
  function DUK_LOCAL (line 45370) | DUK_LOCAL void duk__dump_misc_options(void) {
  function DUK_LOCAL (line 45832) | DUK_LOCAL duk_ret_t duk__fake_global_finalizer(duk_context *ctx) {
  function DUK_LOCAL (line 45868) | DUK_LOCAL void duk__run_global_torture_finalizer(duk_hthread *thr) {
  function DUK_INTERNAL (line 45948) | DUK_INTERNAL void duk_heap_process_finalize_list(duk_heap *heap) {
  function DUK_LOCAL (line 46161) | DUK_LOCAL duk_ret_t duk__finalize_helper(duk_context *ctx, void *udata) {
  function DUK_INTERNAL (line 46196) | DUK_INTERNAL void duk_heap_run_finalizer(duk_heap *heap, duk_hobject *ob...
  function DUK_INTERNAL (line 46295) | DUK_INTERNAL duk_uint32_t duk_heap_hashstring(duk_heap *heap, const duk_...
  function DUK_INTERNAL (line 46351) | DUK_INTERNAL duk_uint32_t duk_heap_hashstring(duk_heap *heap, const duk_...
  function DUK_LOCAL (line 46402) | DUK_LOCAL void duk__mark_hstring(duk_heap *heap, duk_hstring *h) {
  function DUK_LOCAL (line 46412) | DUK_LOCAL void duk__mark_hobject(duk_heap *heap, duk_hobject *h) {
  function DUK_LOCAL (line 46540) | DUK_LOCAL void duk__mark_heaphdr(duk_heap *heap, duk_heaphdr *h) {
  function DUK_LOCAL (line 46591) | DUK_LOCAL void duk__mark_tval(duk_heap *heap, duk_tval *tv) {
  function DUK_LOCAL (line 46605) | DUK_LOCAL void duk__mark_roots_heap(duk_heap *heap) {
  function DUK_LOCAL (line 46641) | DUK_LOCAL void duk__mark_finalizable(duk_heap *heap) {
  function DUK_LOCAL (line 46706) | DUK_LOCAL void duk__mark_finalize_list(duk_heap *heap) {
  function DUK_LOCAL (line 46752) | DUK_LOCAL void duk__handle_temproot(duk_heap *heap, duk_heaphdr *hdr) {
  function DUK_LOCAL (line 46772) | DUK_LOCAL void duk__mark_temproots_by_heap_scan(duk_heap *heap) {
  function DUK_LOCAL (line 46826) | DUK_LOCAL void duk__finalize_refcounts(duk_heap *heap) {
  function DUK_LOCAL (line 46872) | DUK_LOCAL void duk__clear_finalize_list_flags(duk_heap *heap) {
  function DUK_LOCAL (line 46973) | DUK_LOCAL void duk__sweep_heap(duk_heap *heap, duk_int_t flags, duk_size...
  function DUK_LOCAL (line 47138) | DUK_LOCAL int duk__protected_compact_object(duk_context *ctx, void *udat...
  function DUK_LOCAL (line 47151) | DUK_LOCAL void duk__compact_object_list(duk_heap *heap, duk_hthread *thr...
  function DUK_LOCAL (line 47200) | DUK_LOCAL void duk__compact_objects(duk_heap *heap) {
  function DUK_LOCAL (line 47238) | DUK_LOCAL void duk__assert_heaphdr_flags(duk_heap *heap) {
  function DUK_LOCAL (line 47256) | DUK_LOCAL void duk__assert_valid_refcounts(duk_heap *heap) {
  function DUK_LOCAL (line 47281) | DUK_LOCAL void duk__clear_assert_refcounts(duk_heap *heap) {
  function DUK_LOCAL (line 47314) | DUK_LOCAL void duk__check_refcount_heaphdr(duk_heaphdr *hdr) {
  function DUK_LOCAL (line 47341) | DUK_LOCAL void duk__check_assert_refcounts(duk_heap *heap) {
  function DUK_INTERNAL (line 47379) | DUK_INTERNAL void duk_heap_mark_and_sweep(duk_heap *heap, duk_small_uint...
  function duk__check_voluntary_gc (line 47636) | void duk__check_voluntary_gc(duk_heap *heap) {
  function DUK_INTERNAL (line 47744) | DUK_INTERNAL void *duk_heap_mem_alloc_zeroed(duk_heap *heap, duk_size_t ...
  function DUK_INTERNAL (line 47758) | DUK_INTERNAL void *duk_heap_mem_alloc_checked(duk_hthread *thr, duk_size...
  function DUK_INTERNAL (line 47770) | DUK_INTERNAL void *duk_heap_mem_alloc_checked_zeroed(duk_hthread *thr, d...
  function DUK_INTERNAL (line 47786) | DUK_INTERNAL void *duk_heap_mem_realloc(duk_heap *heap, void *ptr, duk_s...
  function DUK_INTERNAL (line 47869) | DUK_INTERNAL void *duk_heap_mem_realloc_indirect(duk_heap *heap, duk_mem...
  function DUK_INTERNAL (line 47969) | DUK_INTERNAL void duk_heap_mem_free(duk_heap *heap, void *ptr) {
  function DUK_INTERNAL (line 47992) | DUK_INTERNAL void duk_heap_insert_into_heap_allocated(duk_heap *heap, du...
  function DUK_INTERNAL (line 48012) | DUK_INTERNAL void duk_heap_remove_from_heap_allocated(duk_heap *heap, du...
  function DUK_INTERNAL (line 48055) | DUK_INTERNAL void duk_heap_insert_into_finalize_list(duk_heap *heap, duk...
  function DUK_INTERNAL (line 48074) | DUK_INTERNAL void duk_heap_remove_from_finalize_list(duk_heap *heap, duk...
  function DUK_INTERNAL (line 48120) | DUK_INTERNAL duk_bool_t duk_heap_in_heap_allocated(duk_heap *heap, duk_h...
  function DUK_INTERNAL (line 48134) | DUK_INTERNAL void duk_heap_switch_thread(duk_heap *heap, duk_hthread *ne...
  function DUK_INTERNAL (line 48201) | DUK_INTERNAL void duk_hobject_refcount_finalize_norz(duk_heap *heap, duk...
  function DUK_INTERNAL (line 48366) | DUK_INTERNAL void duk_heaphdr_refcount_finalize_norz(duk_heap *heap, duk...
  function DUK_LOCAL (line 48425) | DUK_LOCAL void duk__refcount_free_pending(duk_heap *heap) {
  function duk__refcount_refzero_hobject (line 48472) | void duk__refcount_refzero_hobject(duk_heap *heap, duk_hobject *obj, duk...
  function duk_refzero_check_fast (line 48579) | void duk_refzero_check_fast(duk_hthread *thr) {
  function DUK_INTERNAL (line 48589) | DUK_INTERNAL void duk_refzero_check_slow(duk_hthread *thr) {
  function duk__refcount_refzero_hstring (line 48604) | void duk__refcount_refzero_hstring(duk_heap *heap, duk_hstring *str) {
  function duk__refcount_refzero_hbuffer (line 48619) | void duk__refcount_refzero_hbuffer(duk_heap *heap, duk_hbuffer *buf) {
  function duk__hstring_refzero_helper (line 48713) | void duk__hstring_refzero_helper(duk_hthread *thr, duk_hstring *h) {
  function duk__hbuffer_refzero_helper (line 48724) | void duk__hbuffer_refzero_helper(duk_hthread *thr, duk_hbuffer *h) {
  function duk__hobject_refzero_helper (line 48735) | void duk__hobject_refzero_helper(duk_hthread *thr, duk_hobject *h, duk_b...
  function duk__heaphdr_refzero_helper (line 48746) | void duk__heaphdr_refzero_helper(duk_hthread *thr, duk_heaphdr *h, duk_b...
  function duk_heaphdr_refzero (line 48788) | void duk_heaphdr_refzero(duk_hthread *thr, duk_heaphdr *h) {
  function duk_heaphdr_refzero_norz (line 48792) | void duk_heaphdr_refzero_norz(duk_hthread *thr, duk_heaphdr *h) {
  function duk_hstring_refzero (line 48796) | void duk_hstring_refzero(duk_hthread *thr, duk_hstring *h) {
  function duk_hbuffer_refzero (line 48800) | void duk_hbuffer_refzero(duk_hthread *thr, duk_hbuffer *h) {
  function duk_hobject_refzero (line 48804) | void duk_hobject_refzero(duk_hthread *thr, duk_hobject *h) {
  function duk_hobject_refzero_norz (line 48808) | void duk_hobject_refzero_norz(duk_hthread *thr, duk_hobject *h) {
  function DUK_INTERNAL (line 48813) | DUK_INTERNAL void duk_tval_incref(duk_tval *tv) {
  function DUK_INTERNAL (line 48826) | DUK_INTERNAL void duk_tval_decref(duk_hthread *thr, duk_tval *tv) {
  function DUK_INTERNAL (line 48846) | DUK_INTERNAL void duk_tval_decref_norz(duk_hthread *thr, duk_tval *tv) {
  function DUK_INTERNAL (line 48906) | DUK_INTERNAL void duk_heaphdr_incref(duk_heaphdr *h) {
  function DUK_INTERNAL (line 48914) | DUK_INTERNAL void duk_heaphdr_decref(duk_hthread *thr, duk_heaphdr *h) {
  function DUK_INTERNAL (line 48924) | DUK_INTERNAL void duk_heaphdr_decref_norz(duk_hthread *thr, duk_heaphdr ...
  function DUK_INTERNAL (line 48932) | DUK_INTERNAL void duk_hstring_decref(duk_hthread *thr, duk_hstring *h) {
  function DUK_INTERNAL (line 48937) | DUK_INTERNAL void duk_hstring_decref_norz(duk_hthread *thr, duk_hstring ...
  function DUK_INTERNAL (line 48942) | DUK_INTERNAL void duk_hbuffer_decref(duk_hthread *thr, duk_hbuffer *h) {
  function DUK_INTERNAL (line 48947) | DUK_INTERNAL void duk_hbuffer_decref_norz(duk_hthread *thr, duk_hbuffer ...
  function DUK_INTERNAL (line 48952) | DUK_INTERNAL void duk_hobject_decref(duk_hthread *thr, duk_hobject *h) {
  function DUK_INTERNAL (line 48957) | DUK_INTERNAL void duk_hobject_decref_norz(duk_hthread *thr, duk_hobject ...
  function DUK_INTERNAL (line 49001) | DUK_INTERNAL void duk_heap_strcache_string_remove(duk_heap *heap, duk_hs...
  function DUK_LOCAL (line 49026) | DUK_LOCAL const duk_uint8_t *duk__scan_forwards(const duk_uint8_t *p, co...
  function DUK_LOCAL (line 49042) | DUK_LOCAL const duk_uint8_t *duk__scan_backwards(const duk_uint8_t *p, c...
  function DUK_INTERNAL (line 49074) | DUK_INTERNAL duk_uint_fast32_t duk_heap_strcache_offset_char2byte(duk_ht...
  function DUK_INTERNAL (line 49322) | DUK_INTERNAL void duk_heap_strtable_dump(duk_heap *heap) {
  function DUK_LOCAL (line 49380) | DUK_LOCAL void duk__strtable_assert_checks(duk_heap *heap) {
  function DUK_LOCAL (line 49550) | DUK_LOCAL void duk__strtable_grow_inplace(duk_heap *heap) {
  function DUK_LOCAL (line 49665) | DUK_LOCAL void duk__strtable_shrink_inplace(duk_heap *heap) {
  function duk__strtable_resize_check (line 49749) | void duk__strtable_resize_check(duk_heap *heap) {
  function DUK_LOCAL (line 49809) | DUK_LOCAL void duk__strtable_resize_torture(duk_heap *heap) {
  function DUK_LOCAL (line 49832) | DUK_LOCAL duk_hstring *duk__strtable_do_intern(duk_heap *heap, const duk...
  function DUK_LOCAL (line 49955) | DUK_LOCAL duk_hstring *duk__strtab_romstring_lookup(duk_heap *heap, cons...
  function DUK_INTERNAL (line 49984) | DUK_INTERNAL duk_hstring *duk_heap_strtable_intern(duk_heap *heap, const...
  function DUK_INTERNAL (line 50043) | DUK_INTERNAL duk_hstring *duk_heap_strtable_intern_u32(duk_heap *heap, d...
  function DUK_INTERNAL (line 50070) | DUK_INTERNAL duk_hstring *duk_heap_strtable_intern_checked(duk_hthread *...
  function DUK_INTERNAL (line 50084) | DUK_INTERNAL duk_hstring *duk_heap_strtable_intern_u32_checked(duk_hthre...
  function DUK_INTERNAL (line 50106) | DUK_INTERNAL void duk_heap_strtable_unlink(duk_heap *heap, duk_hstring *...
  function DUK_INTERNAL (line 50157) | DUK_INTERNAL void duk_heap_strtable_unlink_prev(duk_heap *heap, duk_hstr...
  function DUK_INTERNAL (line 50220) | DUK_INTERNAL void duk_heap_strtable_free(duk_heap *heap) {
  function DUK_LOCAL (line 50284) | DUK_LOCAL void duk__init_object_parts(duk_heap *heap, duk_uint_t hobject...
  function DUK_LOCAL (line 50312) | DUK_LOCAL void *duk__hobject_alloc_init(duk_hthread *thr, duk_uint_t hob...
  function DUK_INTERNAL (line 50332) | DUK_INTERNAL duk_hobject *duk_hobject_alloc_unchecked(duk_heap *heap, du...
  function DUK_INTERNAL (line 50353) | DUK_INTERNAL duk_hobject *duk_hobject_alloc(duk_hthread *thr, duk_uint_t...
  function DUK_INTERNAL (line 50360) | DUK_INTERNAL duk_hcompfunc *duk_hcompfunc_alloc(duk_hthread *thr, duk_ui...
  function DUK_INTERNAL (line 50379) | DUK_INTERNAL duk_hnatfunc *duk_hnatfunc_alloc(duk_hthread *thr, duk_uint...
  function DUK_INTERNAL (line 50391) | DUK_INTERNAL duk_hbufobj *duk_hbufobj_alloc(duk_hthread *thr, duk_uint_t...
  function DUK_INTERNAL (line 50411) | DUK_INTERNAL duk_hthread *duk_hthread_alloc_unchecked(duk_heap *heap, du...
  function DUK_INTERNAL (line 50457) | DUK_INTERNAL duk_hthread *duk_hthread_alloc(duk_hthread *thr, duk_uint_t...
  function DUK_INTERNAL (line 50467) | DUK_INTERNAL duk_harray *duk_harray_alloc(duk_hthread *thr, duk_uint_t h...
  function DUK_INTERNAL (line 50477) | DUK_INTERNAL duk_hdecenv *duk_hdecenv_alloc(duk_hthread *thr, duk_uint_t...
  function DUK_INTERNAL (line 50493) | DUK_INTERNAL duk_hobjenv *duk_hobjenv_alloc(duk_hthread *thr, duk_uint_t...
  type duk_bool_t (line 50551) | typedef duk_bool_t (*duk__sort_compare_fn)(duk_hstring *a, duk_hstring *...
  function DUK_LOCAL (line 50553) | DUK_LOCAL duk_bool_t duk__sort_compare_es6(duk_hstring *a, duk_hstring *...
  function DUK_LOCAL (line 50595) | DUK_LOCAL void duk__sort_enum_keys_es6(duk_hthread *thr, duk_hobject *h_...
  function DUK_LOCAL (line 50681) | DUK_LOCAL void duk__sort_enum_keys_es6(duk_hthread *thr, duk_hobject *h_...
  function DUK_LOCAL (line 50748) | DUK_LOCAL void duk__add_enum_key(duk_context *ctx, duk_hstring *k) {
  function DUK_LOCAL (line 50757) | DUK_LOCAL void duk__add_enum_key_stridx(duk_context *ctx, duk_small_uint...
  function DUK_INTERNAL (line 51127) | DUK_INTERNAL duk_bool_t duk_hobject_enumerator_next(duk_context *ctx, du...
  function DUK_INTERNAL (line 51223) | DUK_INTERNAL duk_ret_t duk_hobject_get_enumerated_keys(duk_context *ctx,...
  function DUK_INTERNAL (line 51287) | DUK_INTERNAL duk_bool_t duk_hobject_prototype_chain_contains(duk_hthread...
  function DUK_INTERNAL (line 51318) | DUK_INTERNAL void duk_hobject_set_prototype_updref(duk_hthread *thr, duk...
  function DUK_INTERNAL (line 51347) | DUK_INTERNAL void duk_hobject_pc2line_pack(duk_hthread *thr, duk_compile...
  function DUK_LOCAL (line 51460) | DUK_LOCAL duk_uint_fast32_t duk__hobject_pc2line_query_raw(duk_hthread *...
  function DUK_INTERNAL (line 51558) | DUK_INTERNAL duk_uint_fast32_t duk_hobject_pc2line_query(duk_context *ct...
  function DUK_LOCAL (line 51671) | DUK_LOCAL duk_uint32_t duk__tval_number_to_arr_idx(duk_tval *tv) {
  function DUK_LOCAL (line 51694) | DUK_LOCAL duk_uint32_t duk__tval_fastint_to_arr_idx(duk_tval *tv) {
  function DUK_LOCAL (line 51720) | DUK_LOCAL duk_uint32_t duk__to_property_key(duk_context *ctx, duk_idx_t ...
  function DUK_LOCAL (line 51755) | DUK_LOCAL duk_uint32_t duk__push_tval_to_property_key(duk_context *ctx, ...
  function DUK_LOCAL (line 51761) | DUK_LOCAL duk_bool_t duk__key_is_lightfunc_ownprop(duk_hthread *thr, duk...
  function DUK_LOCAL (line 51768) | DUK_LOCAL duk_bool_t duk__key_is_plain_buf_ownprop(duk_hthread *thr, duk...
  function DUK_LOCAL (line 51791) | DUK_LOCAL duk_uint32_t duk__get_default_h_size(duk_uint32_t e_size) {
  function DUK_LOCAL (line 51822) | DUK_LOCAL duk_uint32_t duk__get_min_grow_e(duk_uint32_t e_size) {
  function DUK_LOCAL (line 51833) | DUK_LOCAL duk_uint32_t duk__get_min_grow_a(duk_uint32_t a_size) {
  function DUK_LOCAL (line 51844) | DUK_LOCAL duk_uint32_t duk__count_used_e_keys(duk_hthread *thr, duk_hobj...
  function DUK_LOCAL (line 51866) | DUK_LOCAL void duk__compute_a_stats(duk_hthread *thr, duk_hobject *obj, ...
  function DUK_LOCAL (line 51896) | DUK_LOCAL duk_bool_t duk__abandon_array_density_check(duk_uint32_t a_use...
  function DUK_LOCAL (line 51917) | DUK_LOCAL duk_bool_t duk__abandon_array_slow_check_required(duk_uint32_t...
  function DUK_INTERNAL (line 51947) | DUK_INTERNAL duk_bool_t duk_hobject_proxy_check(duk_hthread *thr, duk_ho...
  function DUK_INTERNAL (line 51995) | DUK_INTERNAL duk_hobject *duk_hobject_resolve_proxy_target(duk_hthread *...
  function DUK_LOCAL (line 52022) | DUK_LOCAL duk_bool_t duk__proxy_check_prop(duk_hthread *thr, duk_hobject...
  function DUK_INTERNAL (line 52117) | DUK_INTERNAL void duk_hobject_realloc_props(duk_hthread *thr,
  function DUK_LOCAL (line 52571) | DUK_LOCAL void duk__grow_props_for_new_entry_item(duk_hthread *thr, duk_...
  function DUK_LOCAL (line 52601) | DUK_LOCAL void duk__grow_props_for_array_item(duk_hthread *thr, duk_hobj...
  function DUK_LOCAL (line 52625) | DUK_LOCAL void duk__abandon_array_checked(duk_hthread *thr, duk_hobject ...
  function DUK_INTERNAL (line 52675) | DUK_INTERNAL void duk_hobject_compact_props(duk_hthread *thr, duk_hobjec...
  function DUK_INTERNAL (line 52738) | DUK_INTERNAL void duk_hobject_find_existing_entry(duk_heap *heap, duk_ho...
  function DUK_INTERNAL (line 52823) | DUK_INTERNAL duk_tval *duk_hobject_find_existing_entry_tval_ptr(duk_heap...
  function DUK_INTERNAL (line 52840) | DUK_INTERNAL duk_tval *duk_hobject_find_existing_entry_tval_ptr_and_attr...
  function DUK_INTERNAL (line 52860) | DUK_INTERNAL duk_tval *duk_hobject_find_existing_array_entry_tval_ptr(du...
  function DUK_LOCAL (line 52885) | DUK_LOCAL duk_bool_t duk__alloc_entry_checked(duk_hthread *thr, duk_hobj...
  function DUK_INTERNAL (line 52963) | DUK_INTERNAL duk_bool_t duk_hobject_get_internal_value(duk_heap *heap, d...
  function DUK_INTERNAL (line 52982) | DUK_INTERNAL duk_hstring *duk_hobject_get_internal_value_string(duk_heap...
  function DUK_LOCAL (line 53017) | DUK_LOCAL
  function DUK_LOCAL (line 53075) | DUK_LOCAL duk_bool_t duk__check_arguments_map_for_get(duk_hthread *thr, ...
  function DUK_LOCAL (line 53113) | DUK_LOCAL void duk__check_arguments_map_for_put(duk_hthread *thr, duk_ho...
  function DUK_LOCAL (line 53157) | DUK_LOCAL void duk__check_arguments_map_for_delete(duk_hthread *thr, duk...
  function DUK_LOCAL (line 53221) | DUK_LOCAL duk_bool_t duk__get_own_propdesc_raw(duk_hthread *thr, duk_hob...
  function DUK_INTERNAL (line 53524) | DUK_INTERNAL duk_bool_t duk_hobject_get_own_propdesc(duk_hthread *thr, d...
  function DUK_LOCAL (line 53553) | DUK_LOCAL duk_bool_t duk__get_propdesc(duk_hthread *thr, duk_hobject *ob...
  function DUK_LOCAL (line 53622) | DUK_LOCAL duk_tval *duk__getprop_shallow_fastpath_array_tval(duk_hthread...
  function DUK_LOCAL (line 53684) | DUK_LOCAL duk_bool_t duk__putprop_shallow_fastpath_array_tval(duk_hthrea...
  function DUK_LOCAL (line 53754) | DUK_LOCAL duk_bool_t duk__getprop_fastpath_bufobj_tval(duk_hthread *thr,...
  function DUK_LOCAL (line 53810) | DUK_LOCAL duk_bool_t duk__putprop_fastpath_bufobj_tval(duk_hthread *thr,...
  function DUK_INTERNAL (line 53878) | DUK_INTERNAL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *...
  function DUK_INTERNAL (line 54373) | DUK_INTERNAL duk_bool_t duk_hobject_hasprop(duk_hthread *thr, duk_tval *...
  function DUK_INTERNAL (line 54515) | DUK_INTERNAL duk_bool_t duk_hobject_hasprop_raw(duk_hthread *thr, duk_ho...
  function DUK_LOCAL (line 54539) | DUK_LOCAL duk_uint32_t duk__to_new_array_length_checked(duk_hthread *thr...
  function DUK_LOCAL (line 54596) | DUK_LOCAL
  function DUK_LOCAL (line 54783) | DUK_LOCAL duk_bool_t duk__handle_put_array_length(duk_hthread *thr, duk_...
  function DUK_INTERNAL (line 54885) | DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *...
  function DUK_INTERNAL (line 55806) | DUK_INTERNAL duk_bool_t duk_hobject_delprop_raw(duk_hthread *thr, duk_ho...
  function DUK_INTERNAL (line 55965) | DUK_INTERNAL duk_bool_t duk_hobject_delprop(duk_hthread *thr, duk_tval *...
  function DUK_INTERNAL (line 56169) | DUK_INTERNAL void duk_hobject_define_property_internal(duk_hthread *thr,...
  function DUK_INTERNAL (line 56294) | DUK_INTERNAL void duk_hobject_define_property_internal_arridx(duk_hthrea...
  function DUK_INTERNAL (line 56346) | DUK_INTERNAL duk_size_t duk_hobject_get_length(duk_hthread *thr, duk_hob...
  function DUK_INTERNAL (line 56385) | DUK_INTERNAL duk_bool_t duk_hobject_has_finalizer_fast_raw(duk_hobject *...
  function DUK_INTERNAL (line 56417) | DUK_INTERNAL void duk_hobject_object_get_own_property_descriptor(duk_con...
  function DUK_INTERNAL (line 56494) | DUK_INTERNAL
  function DUK_INTERNAL (line 56637) | DUK_INTERNAL
  function DUK_INTERNAL (line 57513) | DUK_INTERNAL duk_bool_t duk_hobject_object_ownprop_helper(duk_context *c...
  function DUK_INTERNAL (line 57548) | DUK_INTERNAL void duk_hobject_object_seal_freeze_helper(duk_hthread *thr...
  function DUK_INTERNAL (line 57609) | DUK_INTERNAL duk_bool_t duk_hobject_object_is_sealed_frozen_helper(duk_h...
  function DUK_INTERNAL (line 57683) | DUK_INTERNAL duk_ucodepoint_t duk_hstring_char_code_at_raw(duk_hthread *...
  function duk_size_t (line 57735) | duk_size_t duk__hstring_get_charlen_slowpath(duk_hstring *h) {
  function DUK_LOCAL (line 57762) | DUK_LOCAL duk_size_t duk__hstring_get_charlen_slowpath(duk_hstring *h) {
  function duk_size_t (line 57793) | duk_size_t duk_hstring_get_charlen(duk_hstring *h) {
  function duk_size_t (line 57806) | duk_size_t duk_hstring_get_charlen(duk_hstring *h) {
  function DUK_INTERNAL (line 57823) | DUK_INTERNAL duk_bool_t duk_hthread_init_stacks(duk_heap *heap, duk_hthr...
  function DUK_INTERNAL (line 57891) | DUK_INTERNAL void *duk_hthread_get_valstack_ptr(duk_heap *heap, void *ud) {
  function DUK_INTERNAL (line 57897) | DUK_INTERNAL void *duk_hthread_get_callstack_ptr(duk_heap *heap, void *u...
  function DUK_INTERNAL (line 57903) | DUK_INTERNAL void *duk_hthread_get_catchstack_ptr(duk_heap *heap, void *...
  function DUK_LOCAL (line 57943) | DUK_LOCAL void duk__duplicate_ram_global_object(duk_hthread *thr) {
  function DUK_INTERNAL (line 58040) | DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) {
  function DUK_LOCAL (line 58063) | DUK_LOCAL void duk__push_stridx(duk_context *ctx, duk_bitdecoder_ctx *bd) {
  function DUK_LOCAL (line 58071) | DUK_LOCAL void duk__push_string(duk_context *ctx, duk_bitdecoder_ctx *bd) {
  function DUK_LOCAL (line 58081) | DUK_LOCAL void duk__push_stridx_or_string(duk_context *ctx, duk_bitdecod...
  function DUK_LOCAL (line 58093) | DUK_LOCAL void duk__push_double(duk_context *ctx, duk_bitdecoder_ctx *bd) {
  function DUK_INTERNAL (line 58107) | DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) {
  function DUK_INTERNAL (line 58729) | DUK_INTERNAL void duk_hthread_copy_builtin_objects(duk_hthread *thr_from...
  function DUK_INTERNAL (line 58758) | DUK_INTERNAL void duk_hthread_terminate(duk_hthread *thr) {
  function DUK_INTERNAL (line 58787) | DUK_INTERNAL duk_uint_fast32_t duk_hthread_get_act_curr_pc(duk_hthread *...
  function DUK_INTERNAL (line 58803) | DUK_INTERNAL duk_uint_fast32_t duk_hthread_get_act_prev_pc(duk_hthread *...
  function DUK_INTERNAL (line 58823) | DUK_INTERNAL void duk_hthread_sync_currpc(duk_hthread *thr) {
  function DUK_INTERNAL (line 58838) | DUK_INTERNAL void duk_hthread_sync_and_null_currpc(duk_hthread *thr) {
  function duk__hthread_do_callstack_grow (line 58877) | void duk__hthread_do_callstack_grow(duk_hthread *thr) {
  function DUK_INTERNAL (line 58920) | DUK_INTERNAL void duk_hthread_callstack_grow(duk_hthread *thr) {
  function duk__hthread_do_callstack_shrink (line 58931) | void duk__hthread_do_callstack_shrink(duk_hthread *thr) {
  function DUK_INTERNAL (line 58971) | DUK_INTERNAL void duk_hthread_callstack_shrink_check(duk_hthread *thr) {
  function DUK_INTERNAL (line 58983) | DUK_INTERNAL void duk_hthread_callstack_unwind_norz(duk_hthread *thr, du...
  function DUK_INTERNAL (line 59172) | DUK_INTERNAL void duk_hthread_callstack_unwind(duk_hthread *thr, duk_siz...
  function duk__hthread_do_catchstack_grow (line 59177) | void duk__hthread_do_catchstack_grow(duk_hthread *thr) {
  function DUK_INTERNAL (line 59213) | DUK_INTERNAL void duk_hthread_catchstack_grow(duk_hthread *thr) {
  function duk__hthread_do_catchstack_shrink (line 59225) | void duk__hthread_do_catchstack_shrink(duk_hthread *thr) {
  function DUK_INTERNAL (line 59259) | DUK_INTERNAL void duk_hthread_catchstack_shrink_check(duk_hthread *thr) {
  function DUK_INTERNAL (line 59271) | DUK_INTERNAL void duk_hthread_catchstack_unwind_norz(duk_hthread *thr, d...
  function DUK_INTERNAL (line 59341) | DUK_INTERNAL void duk_hthread_catchstack_unwind(duk_hthread *thr, duk_si...
  function DUK_INTERNAL (line 59347) | DUK_INTERNAL void duk_hthread_valstack_torture_realloc(duk_hthread *thr) {
  function DUK_INTERNAL (line 59381) | DUK_INTERNAL void duk_hthread_callstack_torture_realloc(duk_hthread *thr) {
  function DUK_INTERNAL (line 59409) | DUK_INTERNAL void duk_hthread_catchstack_torture_realloc(duk_hthread *th...
  function DUK_INTERNAL (line 59444) | DUK_INTERNAL double duk_js_arith_mod(double d1, double d2) {
  function DUK_INTERNAL (line 59493) | DUK_INTERNAL double duk_js_arith_pow(double x, double y) {
  function DUK_LOCAL (line 59643) | DUK_LOCAL void duk__interrupt_fixup(duk_hthread *thr, duk_hthread *entry...
  function DUK_LOCAL (line 59682) | DUK_LOCAL void duk__create_arguments_object(duk_hthread *thr,
  function DUK_LOCAL (line 59937) | DUK_LOCAL void duk__handle_createargs_for_call(duk_hthread *thr,
  function DUK_LOCAL (line 59983) | DUK_LOCAL void duk__handle_bound_chain_for_call(duk_hthread *thr,
  function DUK_LOCAL (line 60100) | DUK_LOCAL void duk__handle_oldenv_for_call(duk_hthread *thr,
  function DUK_LOCAL (line 60131) | DUK_LOCAL void duk__update_func_caller_prop(duk_hthread *thr, duk_hobjec...
  function DUK_LOCAL (line 60236) | DUK_LOCAL void duk__coerce_effective_this_binding(duk_hthread *thr,
  function DUK_LOCAL (line 60292) | DUK_LOCAL duk_hobject *duk__nonbound_func_lookup(duk_context *ctx,
  function DUK_LOCAL (line 60357) | DUK_LOCAL void duk__adjust_valstack_and_top(duk_hthread *thr,
  function DUK_LOCAL (line 60426) | DUK_LOCAL void duk__safe_call_adjust_valstack(duk_hthread *thr, duk_idx_...
  function DUK_LOCAL (line 60497) | DUK_LOCAL duk_idx_t duk__get_idx_func(duk_hthread *thr, duk_idx_t num_st...
  function DUK_INTERNAL (line 60709) | DUK_INTERNAL void duk_handle_call_unprotected(duk_hthread *thr,
  function DUK_LOCAL (line 60720) | DUK_LOCAL void duk__handle_call_inner(duk_hthread *thr,
  function DUK_LOCAL (line 61309) | DUK_LOCAL void duk__handle_call_error(duk_hthread *thr,
  function DUK_LOCAL (line 61625) | DUK_LOCAL void duk__handle_safe_call_inner(duk_hthread *thr,
  function DUK_LOCAL (line 61739) | DUK_LOCAL void duk__handle_safe_call_error(duk_hthread *thr,
  function DUK_LOCAL (line 61826) | DUK_LOCAL void duk__handle_safe_call_shared(duk_hthread *thr,
  function DUK_INTERNAL (line 61900) | DUK_INTERNAL duk_bool_t duk_handle_ecma_call_setup(duk_hthread *thr,
  type duk__compiler_stkstate (line 62433) | typedef struct {
  function DUK_LOCAL (line 62748) | DUK_LOCAL void duk__recursion_increase(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 62757) | DUK_LOCAL void duk__recursion_decrease(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 62763) | DUK_LOCAL duk_bool_t duk__hstring_is_eval_or_arguments(duk_compiler_ctx ...
  function DUK_LOCAL (line 62769) | DUK_LOCAL duk_bool_t duk__hstring_is_eval_or_arguments_in_strict_mode(du...
  function DUK_LOCAL (line 62783) | DUK_LOCAL void duk__advance_helper(duk_compiler_ctx *comp_ctx, duk_small...
  function DUK_LOCAL (line 62842) | DUK_LOCAL void duk__advance_expect(duk_compiler_ctx *comp_ctx, duk_small...
  function DUK_LOCAL (line 62847) | DUK_LOCAL void duk__advance(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 62856) | DUK_LOCAL void duk__init_func_valstack_slots(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 62920) | DUK_LOCAL void duk__reset_func_for_pass2(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 62948) | DUK_LOCAL duk_int_t duk__cleanup_varmap(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 62999) | DUK_LOCAL void duk__convert_to_func_template(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 63437) | DUK_LOCAL duk_int_t duk__get_current_pc(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 63443) | DUK_LOCAL duk_compiler_instr *duk__get_instr_ptr(duk_compiler_ctx *comp_...
  function DUK_LOCAL (line 63452) | DUK_LOCAL void duk__emit(duk_compiler_ctx *comp_ctx, duk_instr_t ins) {
  function DUK_LOCAL (line 63525) | DUK_LOCAL void duk__update_lineinfo_currtoken(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 63544) | DUK_LOCAL void duk__emit_op_only(duk_compiler_ctx *comp_ctx, duk_small_u...
  function DUK_LOCAL (line 63810) | DUK_LOCAL void duk__emit_a_b(duk_compiler_ctx *comp_ctx, duk_small_uint_...
  function DUK_LOCAL (line 63817) | DUK_LOCAL void duk__emit_b_c(duk_compiler_ctx *comp_ctx, duk_small_uint_...
  function DUK_LOCAL (line 63825) | DUK_LOCAL void duk__emit_a(duk_compiler_ctx *comp_ctx, int op_flags, int...
  function DUK_LOCAL (line 63833) | DUK_LOCAL void duk__emit_b(duk_compiler_ctx *comp_ctx, duk_small_uint_t ...
  function DUK_LOCAL (line 63889) | DUK_LOCAL void duk__emit_bc(duk_compiler_ctx *comp_ctx, duk_small_uint_t...
  function DUK_LOCAL (line 63896) | DUK_LOCAL void duk__emit_abc(duk_compiler_ctx *comp_ctx, duk_small_uint_...
  function DUK_LOCAL (line 63922) | DUK_LOCAL void duk__emit_load_int32_raw(duk_compiler_ctx *comp_ctx, duk_...
  function DUK_LOCAL (line 63943) | DUK_LOCAL void duk__emit_load_int32(duk_compiler_ctx *comp_ctx, duk_reg_...
  function DUK_LOCAL (line 63951) | DUK_LOCAL void duk__emit_load_int32_noshuffle(duk_compiler_ctx *comp_ctx...
  function DUK_LOCAL (line 63955) | DUK_LOCAL void duk__emit_load_int32_noshuffle(duk_compiler_ctx *comp_ctx...
  function DUK_LOCAL (line 63964) | DUK_LOCAL void duk__emit_jump(duk_compiler_ctx *comp_ctx, duk_int_t targ...
  function DUK_LOCAL (line 63975) | DUK_LOCAL duk_int_t duk__emit_jump_empty(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 63986) | DUK_LOCAL void duk__insert_jump_entry(duk_compiler_ctx *comp_ctx, duk_in...
  function DUK_LOCAL (line 64021) | DUK_LOCAL void duk__patch_jump(duk_compiler_ctx *comp_ctx, duk_int_t jum...
  function DUK_LOCAL (line 64045) | DUK_LOCAL void duk__patch_jump_here(duk_compiler_ctx *comp_ctx, duk_int_...
  function DUK_LOCAL (line 64049) | DUK_LOCAL void duk__patch_trycatch(duk_compiler_ctx *comp_ctx, duk_int_t...
  function DUK_LOCAL (line 64087) | DUK_LOCAL void duk__emit_if_false_skip(duk_compiler_ctx *comp_ctx, duk_r...
  function DUK_LOCAL (line 64094) | DUK_LOCAL void duk__emit_if_true_skip(duk_compiler_ctx *comp_ctx, duk_re...
  function DUK_LOCAL (line 64101) | DUK_LOCAL void duk__emit_invalid(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 64112) | DUK_LOCAL void duk__peephole_optimize_bytecode(duk_compiler_ctx *comp_ct...
  function DUK_LOCAL (line 64190) | DUK_LOCAL void duk__dump_ispec(duk_compiler_ctx *comp_ctx, duk_ispec *x) {
  function DUK_LOCAL (line 64195) | DUK_LOCAL void duk__dump_ivalue(duk_compiler_ctx *comp_ctx, duk_ivalue *...
  function DUK_LOCAL (line 64210) | DUK_LOCAL void duk__ivalue_regconst(duk_ivalue *x, duk_regconst_t regcon...
  function DUK_LOCAL (line 64216) | DUK_LOCAL void duk__ivalue_plain_fromstack(duk_compiler_ctx *comp_ctx, d...
  function DUK_LOCAL (line 64222) | DUK_LOCAL void duk__ivalue_var_fromstack(duk_compiler_ctx *comp_ctx, duk...
  function DUK_LOCAL_DECL (line 64228) | DUK_LOCAL_DECL void duk__ivalue_var_hstring(duk_compiler_ctx *comp_ctx, ...
  function DUK_LOCAL (line 64234) | DUK_LOCAL void duk__copy_ispec(duk_compiler_ctx *comp_ctx, duk_ispec *sr...
  function DUK_LOCAL (line 64242) | DUK_LOCAL void duk__copy_ivalue(duk_compiler_ctx *comp_ctx, duk_ivalue *...
  function DUK_LOCAL (line 64255) | DUK_LOCAL duk_reg_t duk__alloctemps(duk_compiler_ctx *comp_ctx, duk_smal...
  function DUK_LOCAL (line 64273) | DUK_LOCAL duk_reg_t duk__alloctemp(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 64277) | DUK_LOCAL void duk__settemp_checkmax(duk_compiler_ctx *comp_ctx, duk_reg...
  function DUK_LOCAL (line 64285) | DUK_LOCAL duk_regconst_t duk__getconst(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 64331) | DUK_LOCAL duk_bool_t duk__const_needs_refcount(duk_compiler_ctx *comp_ct...
  function DUK_LOCAL (line 64366) | DUK_LOCAL
  function DUK_LOCAL (line 64538) | DUK_LOCAL void duk__ispec_toforcedreg(duk_compiler_ctx *comp_ctx, duk_is...
  function DUK_LOCAL (line 64548) | DUK_LOCAL void duk__ivalue_toplain_raw(duk_compiler_ctx *comp_ctx, duk_i...
  function DUK_LOCAL (line 64738) | DUK_LOCAL void duk__ivalue_toplain(duk_compiler_ctx *comp_ctx, duk_ivalu...
  function DUK_LOCAL (line 64743) | DUK_LOCAL void duk__ivalue_toplain_ignore(duk_compiler_ctx *comp_ctx, du...
  function DUK_LOCAL (line 64760) | DUK_LOCAL
  function DUK_LOCAL (line 64795) | DUK_LOCAL duk_reg_t duk__ivalue_toreg(duk_compiler_ctx *comp_ctx, duk_iv...
  function DUK_LOCAL (line 64800) | DUK_LOCAL duk_reg_t duk__ivalue_totemp(duk_compiler_ctx *comp_ctx, duk_i...
  function DUK_LOCAL (line 64805) | DUK_LOCAL void duk__ivalue_toforcedreg(duk_compiler_ctx *comp_ctx, duk_i...
  function DUK_LOCAL (line 64810) | DUK_LOCAL duk_regconst_t duk__ivalue_toregconst(duk_compiler_ctx *comp_c...
  function DUK_LOCAL (line 64814) | DUK_LOCAL duk_regconst_t duk__ivalue_totempconst(duk_compiler_ctx *comp_...
  function DUK_LOCAL (line 64830) | DUK_LOCAL duk_reg_t duk__lookup_active_register_binding(duk_compiler_ctx...
  function DUK_LOCAL (line 64912) | DUK_LOCAL duk_bool_t duk__lookup_lhs(duk_compiler_ctx *comp_ctx, duk_reg...
  function DUK_LOCAL (line 64944) | DUK_LOCAL void duk__add_label(duk_compiler_ctx *comp_ctx, duk_hstring *h...
  function DUK_LOCAL (line 65008) | DUK_LOCAL void duk__update_label_flags(duk_compiler_ctx *comp_ctx, duk_i...
  function DUK_LOCAL (line 65049) | DUK_LOCAL void duk__lookup_active_label(duk_compiler_ctx *comp_ctx, duk_...
  function DUK_LOCAL (line 65122) | DUK_LOCAL void duk__reset_labels_to_length(duk_compiler_ctx *comp_ctx, d...
  function DUK_LOCAL (line 65143) | DUK_LOCAL void duk__nud_array_literal(duk_compiler_ctx *comp_ctx, duk_iv...
  type duk__objlit_state (line 65287) | typedef struct {
  function DUK_LOCAL (line 65293) | DUK_LOCAL void duk__objlit_flush_keys(duk_compiler_ctx *comp_ctx, duk__o...
  function DUK_LOCAL (line 65316) | DUK_LOCAL duk_bool_t duk__objlit_load_key(duk_compiler_ctx *comp_ctx, du...
  function DUK_LOCAL (line 65335) | DUK_LOCAL void duk__nud_object_literal(duk_compiler_ctx *comp_ctx, duk_i...
  function DUK_LOCAL (line 65553) | DUK_LOCAL duk_int_t duk__parse_arguments(duk_compiler_ctx *comp_ctx, duk...
  function DUK_LOCAL (line 65597) | DUK_LOCAL duk_bool_t duk__expr_is_empty(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 65603) | DUK_LOCAL void duk__expr_nud(duk_compiler_ctx *comp_ctx, duk_ivalue *res) {
  function DUK_LOCAL (line 66108) | DUK_LOCAL void duk__expr_led(duk_compiler_ctx *comp_ctx, duk_ivalue *lef...
  function DUK_LOCAL (line 67057) | DUK_LOCAL duk_small_uint_t duk__expr_lbp(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 67101) | DUK_LOCAL void duk__expr(duk_compiler_ctx *comp_ctx, duk_ivalue *res, du...
  function DUK_LOCAL (line 67161) | DUK_LOCAL void duk__exprtop(duk_compiler_ctx *comp_ctx, duk_ivalue *res,...
  function DUK_LOCAL (line 67187) | DUK_LOCAL duk_reg_t duk__expr_toreg(duk_compiler_ctx *comp_ctx, duk_ival...
  function DUK_LOCAL (line 67194) | DUK_LOCAL duk_reg_t duk__expr_totemp(duk_compiler_ctx *comp_ctx, duk_iva...
  function DUK_LOCAL (line 67200) | DUK_LOCAL void duk__expr_toforcedreg(duk_compiler_ctx *comp_ctx, duk_iva...
  function DUK_LOCAL (line 67206) | DUK_LOCAL duk_regconst_t duk__expr_toregconst(duk_compiler_ctx *comp_ctx...
  function DUK_LOCAL (line 67212) | DUK_LOCAL duk_regconst_t duk__expr_totempconst(duk_compiler_ctx *comp_ct...
  function DUK_LOCAL (line 67218) | DUK_LOCAL void duk__expr_toplain(duk_compiler_ctx *comp_ctx, duk_ivalue ...
  function DUK_LOCAL (line 67223) | DUK_LOCAL void duk__expr_toplain_ignore(duk_compiler_ctx *comp_ctx, duk_...
  function DUK_LOCAL (line 67228) | DUK_LOCAL duk_reg_t duk__exprtop_toreg(duk_compiler_ctx *comp_ctx, duk_i...
  function DUK_LOCAL (line 67234) | DUK_LOCAL duk_reg_t duk__exprtop_totemp(duk_compiler_ctx *comp_ctx, duk_...
  function DUK_LOCAL (line 67240) | DUK_LOCAL void duk__exprtop_toforcedreg(duk_compiler_ctx *comp_ctx, duk_...
  function DUK_LOCAL (line 67246) | DUK_LOCAL duk_regconst_t duk__exprtop_toregconst(duk_compiler_ctx *comp_...
  function DUK_LOCAL (line 67252) | DUK_LOCAL void duk__exprtop_toplain_ignore(duk_compiler_ctx *comp_ctx, d...
  function DUK_LOCAL (line 67294) | DUK_LOCAL void duk__parse_var_decl(duk_compiler_ctx *comp_ctx, duk_ivalu...
  function DUK_LOCAL (line 67372) | DUK_LOCAL void duk__parse_var_stmt(duk_compiler_ctx *comp_ctx, duk_ivalu...
  function DUK_LOCAL (line 67389) | DUK_LOCAL void duk__parse_for_stmt(duk_compiler_ctx *comp_ctx, duk_ivalu...
  function DUK_LOCAL (line 67744) | DUK_LOCAL void duk__parse_switch_stmt(duk_compiler_ctx *comp_ctx, duk_iv...
  function DUK_LOCAL (line 67943) | DUK_LOCAL void duk__parse_if_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue...
  function DUK_LOCAL (line 67990) | DUK_LOCAL void duk__parse_do_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue...
  function DUK_LOCAL (line 68017) | DUK_LOCAL void duk__parse_while_stmt(duk_compiler_ctx *comp_ctx, duk_iva...
  function DUK_LOCAL (line 68050) | DUK_LOCAL void duk__parse_break_or_continue_stmt(duk_compiler_ctx *comp_...
  function DUK_LOCAL (line 68105) | DUK_LOCAL void duk__parse_return_stmt(duk_compiler_ctx *comp_ctx, duk_iv...
  function DUK_LOCAL (line 68208) | DUK_LOCAL void duk__parse_throw_stmt(duk_compiler_ctx *comp_ctx, duk_iva...
  function DUK_LOCAL (line 68225) | DUK_LOCAL void duk__parse_try_stmt(duk_compiler_ctx *comp_ctx, duk_ivalu...
  function DUK_LOCAL (line 68460) | DUK_LOCAL void duk__parse_with_stmt(duk_compiler_ctx *comp_ctx, duk_ival...
  function DUK_LOCAL (line 68500) | DUK_LOCAL duk_int_t duk__stmt_label_site(duk_compiler_ctx *comp_ctx, duk...
  function DUK_LOCAL (line 68523) | DUK_LOCAL void duk__parse_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *r...
  function DUK_LOCAL (line 69044) | DUK_LOCAL void duk__parse_stmts(duk_compiler_ctx *comp_ctx, duk_bool_t a...
  function DUK_LOCAL (line 69132) | DUK_LOCAL void duk__init_varmap_and_prologue_for_pass2(duk_compiler_ctx ...
  function DUK_LOCAL (line 69460) | DUK_LOCAL void duk__parse_func_body(duk_compiler_ctx *comp_ctx, duk_bool...
  function DUK_LOCAL (line 69736) | DUK_LOCAL void duk__parse_func_formals(duk_compiler_ctx *comp_ctx) {
  function DUK_LOCAL (line 69784) | DUK_LOCAL void duk__parse_func_like_raw(duk_compiler_ctx *comp_ctx, duk_...
  function DUK_LOCAL (line 69905) | DUK_LOCAL duk_int_t duk__parse_func_like_fnum(duk_compiler_ctx *comp_ctx...
  function DUK_LOCAL (line 70035) | DUK_LOCAL duk_ret_t duk__js_compile_raw(duk_context *ctx, void *udata) {
  function DUK_INTERNAL (line 70185) | DUK_INTERNAL void duk_js_compile(duk_hthread *thr, const duk_uint8_t *sr...
  function DUK_LOCAL (line 70343) | DUK_LOCAL void duk__push_tvals_incref_only(duk_hthread *thr, duk_tval *t...
  function duk_double_t (line 70374) | duk_double_t duk__compute_mod(duk_double_t d1, duk_double_t d2) {
  function duk_double_t (line 70379) | duk_double_t duk__compute_exp(duk_double_t d1, duk_double_t d2) {
  function duk__vm_arith_add (line 70384) | void duk__vm_arith_add(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv_y,...
  function duk__vm_bitwise_binary_op (line 70652) | void duk__vm_bitwise_binary_op(duk_hthread *thr, duk_tval *tv_x, duk_tva...
  function duk__vm_arith_unary_op (line 70782) | void duk__vm_arith_unary_op(duk_hthread *thr, duk_idx_t idx_src, duk_idx...
  function duk__vm_bitwise_not (line 70862) | void duk__vm_bitwise_not(duk_hthread *thr, duk_uint_fast_t idx_src, duk_...
  function duk__vm_logical_not (line 70897) | void duk__vm_logical_not(duk_hthread *thr, duk_idx_t idx_src, duk_idx_t ...
  function duk__prepost_incdec_reg_helper (line 70928) | void duk__prepost_incdec_reg_helper(duk_hthread *thr, duk_tval *tv_dst, ...
  function duk__prepost_incdec_var_helper (line 71005) | void duk__prepost_incdec_var_helper(duk_hthread *thr, duk_small_uint_t i...
  function DUK_LOCAL (line 71089) | DUK_LOCAL void duk__reconfig_valstack_ecma_return(duk_hthread *thr, duk_...
  function DUK_LOCAL (line 71125) | DUK_LOCAL void duk__reconfig_valstack_ecma_catcher(duk_hthread *thr, duk...
  function DUK_LOCAL (line 71160) | DUK_LOCAL void duk__set_catcher_regs(duk_hthread *thr, duk_size_t cat_id...
  function DUK_LOCAL (line 71176) | DUK_LOCAL void duk__handle_catch(duk_hthread *thr, duk_size_t cat_idx, d...
  function DUK_LOCAL (line 71283) | DUK_LOCAL void duk__handle_finally(duk_hthread *thr, duk_size_t cat_idx,...
  function DUK_LOCAL (line 71310) | DUK_LOCAL void duk__handle_label(duk_hthread *thr, duk_size_t cat_idx, d...
  function DUK_LOCAL (line 71343) | DUK_LOCAL void duk__handle_yield(duk_hthread *thr, duk_hthread *resumer,...
  function DUK_LOCAL (line 71364) | DUK_LOCAL
  function DUK_LOCAL (line 71767) | DUK_LOCAL void duk__handle_break_or_continue(duk_hthread *thr,
  function DUK_LOCAL (line 71840) | DUK_LOCAL duk_small_uint_t duk__handle_return(duk_hthread *thr,
  function DUK_LOCAL (line 72032) | DUK_LOCAL void duk__interrupt_handle_debugger(duk_hthread *thr, duk_bool...
  function DUK_COLD (line 72208) | DUK_COLD duk_small_uint_t duk__executor_interrupt(duk_hthread *thr) {
  function DUK_INTERNAL (line 75538) | DUK_INTERNAL duk_bool_t duk_js_toboolean(duk_tval *tv) {
  function DUK_LOCAL (line 75633) | DUK_LOCAL duk_double_t duk__tonumber_string_raw(duk_hthread *thr) {
  function DUK_INTERNAL (line 75674) | DUK_INTERNAL duk_double_t duk_js_tonumber(duk_hthread *thr, duk_tval *tv) {
  function DUK_INTERNAL (line 75751) | DUK_INTERNAL duk_double_t duk_js_tointeger_number(duk_double_t x) {
  function DUK_INTERNAL (line 75781) | DUK_INTERNAL duk_double_t duk_js_tointeger(duk_hthread *thr, duk_tval *t...
  function DUK_LOCAL (line 75792) | DUK_LOCAL duk_double_t duk__toint32_touint32_helper(duk_double_t x, duk_...
  function DUK_INTERNAL (line 75833) | DUK_INTERNAL duk_int32_t duk_js_toint32(duk_hthread *thr, duk_tval *tv) {
  function DUK_INTERNAL (line 75851) | DUK_INTERNAL duk_uint32_t duk_js_touint32(duk_hthread *thr, duk_tval *tv) {
  function DUK_INTERNAL (line 75869) | DUK_INTERNAL duk_uint16_t duk_js_touint16(duk_hthread *thr, duk_tval *tv) {
  function DUK_LOCAL (line 75901) | DUK_LOCAL duk_bool_t duk__js_equals_number(duk_double_t x, duk_double_t ...
  function DUK_LOCAL (line 75939) | DUK_LOCAL duk_bool_t duk__js_samevalue_number(duk_double_t x, duk_double...
  function DUK_INTERNAL (line 76004) | DUK_INTERNAL duk_bool_t duk_js_equals_helper(duk_hthread *thr, duk_tval ...
  function DUK_INTERNAL (line 76206) | DUK_INTERNAL duk_small_int_t duk_js_data_compare(const duk_uint8_t *buf1...
  function DUK_INTERNAL (line 76236) | DUK_INTERNAL duk_small_int_t duk_js_string_compare(duk_hstring *h1, duk_...
  function DUK_INTERNAL (line 76260) | DUK_INTERNAL duk_small_int_t duk_js_buffer_compare(duk_heap *heap, duk_h...
  function DUK_LOCAL (line 76275) | DUK_LOCAL duk_bool_t duk__compare_fastint(duk_bool_t retval, duk_int64_t...
  function DUK_LOCAL (line 76286) | DUK_LOCAL duk_bool_t duk__compare_number(duk_bool_t retval, duk_double_t...
  function DUK_LOCAL (line 76337) | DUK_LOCAL duk_bool_t duk__compare_number(duk_bool_t retval, duk_double_t...
  function DUK_INTERNAL (line 76382) | DUK_INTERNAL duk_bool_t duk_js_compare_helper(duk_hthread *thr, duk_tval...
  function DUK_INTERNAL (line 76500) | DUK_INTERNAL duk_bool_t duk_js_instanceof(duk_hthread *thr, duk_tval *tv...
  function DUK_INTERNAL (line 76673) | DUK_INTERNAL duk_bool_t duk_js_in(duk_hthread *thr, duk_tval *tv_x, duk_...
  function DUK_INTERNAL (line 76722) | DUK_INTERNAL duk_small_uint_t duk_js_typeof_stridx(duk_tval *tv_x) {
  function DUK_INTERNAL (line 76805) | DUK_INTERNAL duk_uarridx_t duk_js_to_arrayindex_string(const duk_uint8_t...
  function DUK_INTERNAL (line 76876) | DUK_INTERNAL duk_uarridx_t duk_js_to_arrayindex_hstring_fast_known(duk_h...
  function DUK_INTERNAL (line 76898) | DUK_INTERNAL duk_uarridx_t duk_js_to_arrayindex_hstring_fast(duk_hstring...
  type duk__id_lookup_result (line 76944) | typedef struct {
  function DUK_LOCAL (line 76978) | DUK_LOCAL void duk__inc_data_inner_refcounts(duk_hthread *thr, duk_hcomp...
  function DUK_INTERNAL (line 77028) | DUK_INTERNAL
  function DUK_INTERNAL (line 77405) | DUK_INTERNAL
  function DUK_INTERNAL (line 77464) | DUK_INTERNAL
  function DUK_INTERNAL (line 77517) | DUK_INTERNAL void duk_js_close_environment_record(duk_hthread *thr, duk_...
  function DUK_LOCAL (line 77636) | DUK_LOCAL
  function DUK_LOCAL (line 77687) | DUK_LOCAL
  function DUK_LOCAL (line 77741) | DUK_LOCAL
  function DUK_INTERNAL (line 77997) | DUK_INTERNAL
  function DUK_LOCAL (line 78051) | DUK_LOCAL
  function DUK_INTERNAL (line 78113) | DUK_INTERNAL
  function DUK_INTERNAL (line 78121) | DUK_INTERNAL
  function DUK_LOCAL (line 78145) | DUK_LOCAL
  function DUK_INTERNAL (line 78242) | DUK_INTERNAL
  function DUK_INTERNAL (line 78251) | DUK_INTERNAL
  function DUK_LOCAL (line 78280) | DUK_LOCAL
  function DUK_INTERNAL (line 78328) | DUK_INTERNAL
  function DUK_INTERNAL (line 78336) | DUK_INTERNAL
  function DUK_LOCAL (line 78394) | DUK_LOCAL
  function DUK_INTERNAL (line 78623) | DUK_INTERNAL
  function DUK_LOCAL (line 78840) | DUK_LOCAL void duk__fill_lexer_buffer(duk_lexer_ctx *lex_ctx, duk_small_...
  function DUK_LOCAL (line 78980) | DUK_LOCAL void duk__advance_bytes(duk_lexer_ctx *lex_ctx, duk_small_uint...
  function DUK_LOCAL (line 79008) | DUK_LOCAL void duk__init_lexer_window(duk_lexer_ctx *lex_ctx) {
  function DUK_LOCAL (line 79013) | DUK_LOCAL duk_codepoint_t duk__read_char(duk_lexer_ctx *lex_ctx) {
  function DUK_LOCAL (line 79141) | DUK_LOCAL void duk__advance_bytes(duk_lexer_ctx *lex_ctx, duk_small_uint...
  function DUK_LOCAL (line 79164) | DUK_LOCAL void duk__init_lexer_window(duk_lexer_ctx *lex_ctx) {
  function DUK_LOCAL (line 79170) | DUK_LOCAL void duk__advance_chars(duk_lexer_ctx *lex_ctx, duk_small_uint...
  function DUK_LOCAL (line 79179) | DUK_LOCAL void duk__initbuffer(duk_lexer_ctx *lex_ctx) {
  function DUK_LOCAL (line 79196) | DUK_LOCAL void duk__appendbuffer(duk_lexer_ctx *lex_ctx, duk_codepoint_t...
  function DUK_LOCAL (line 79211) | DUK_LOCAL void duk__appendbuffer_ascii(duk_lexer_ctx *lex_ctx, duk_codep...
  function DUK_LOCAL (line 79225) | DUK_LOCAL duk_hstring *duk__internbuffer(duk_lexer_ctx *lex_ctx, duk_idx...
  function DUK_INTERNAL (line 79239) | DUK_INTERNAL void duk_lexer_initctx(duk_lexer_ctx *lex_ctx) {
  function DUK_INTERNAL (line 79257) | DUK_INTERNAL void duk_lexer_getpoint(duk_lexer_ctx *lex_ctx, duk_lexer_p...
  function DUK_INTERNAL (line 79262) | DUK_INTERNAL void duk_lexer_setpoint(duk_lexer_ctx *lex_ctx, duk_lexer_p...
  function DUK_LOCAL (line 79277) | DUK_LOCAL duk_codepoint_t duk__hexval_validate(duk_codepoint_t x) {
  function DUK_LOCAL (line 79294) | DUK_LOCAL duk_codepoint_t duk__hexval(duk_codepoint_t x) {
  function DUK_LOCAL (line 79306) | DUK_LOCAL duk_bool_t duk__is_hex_digit(duk_codepoint_t x) {
  function DUK_LOCAL (line 79316) | DUK_LOCAL duk_codepoint_t duk__lexer_parse_escape(duk_lexer_ctx *lex_ctx...
  function DUK_LOCAL (line 79414) | DUK_LOCAL duk_codepoint_t duk__lexer_parse_legacy_octal(duk_lexer_ctx *l...
  function DUK_LOCAL (line 79472) | DUK_LOCAL void duk__lexer_parse_string_literal(duk_lexer_ctx *lex_ctx, d...
  function DUK_LOCAL (line 79610) | DUK_LOCAL void duk__lexer_skip_to_endofline(duk_lexer_ctx *lex_ctx) {
  function DUK_INTERNAL (line 79686) | DUK_INTERNAL
  function DUK_INTERNAL (line 80489) | DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_r...
  function DUK_LOCAL (line 80863) | DUK_LOCAL
  function DUK_INTERNAL (line 80881) | DUK_INTERNAL void duk_lexer_parse_re_ranges(duk_lexer_ctx *lex_ctx, duk_...
  type duk__exp_limits (line 81163) | typedef struct {
  type duk__bigint (line 81204) | typedef struct {
  function DUK_LOCAL (line 81210) | DUK_LOCAL void duk__bi_print(const char *name, duk__bigint *x) {
  function DUK_LOCAL (line 81230) | DUK_LOCAL duk_small_int_t duk__bi_is_valid(duk__bigint *x) {
  function DUK_LOCAL (line 81237) | DUK_LOCAL void duk__bi_normalize(duk__bigint *x) {
  function DUK_LOCAL (line 81252) | DUK_LOCAL void duk__bi_copy(duk__bigint *x, duk__bigint *y) {
  function DUK_LOCAL (line 81263) | DUK_LOCAL void duk__bi_set_small(duk__bigint *x, duk_uint32_t v) {
  function DUK_LOCAL (line 81277) | DUK_LOCAL int duk__bi_compare(duk__bigint *x, duk__bigint *y) {
  function DUK_LOCAL (line 81315) | DUK_LOCAL void duk__bi_add(duk__bigint *x, duk__bigint *y, duk__bigint *...
  function DUK_LOCAL (line 81350) | DUK_LOCAL void duk__bi_add(duk__bigint *x, duk__bigint *y, duk__bigint *...
  function DUK_LOCAL (line 81403) | DUK_LOCAL void duk__bi_add_small(duk__bigint *x, duk__bigint *y, duk_uin...
  function DUK_LOCAL (line 81417) | DUK_LOCAL void duk__bi_add_copy(duk__bigint *x, duk__bigint *y, duk__big...
  function DUK_LOCAL (line 81425) | DUK_LOCAL void duk__bi_sub(duk__bigint *x, duk__bigint *y, duk__bigint *...
  function DUK_LOCAL (line 81455) | DUK_LOCAL void duk__bi_sub(duk__bigint *x, duk__bigint *y, duk__bigint *...
  function DUK_LOCAL (line 81499) | DUK_LOCAL void duk__bi_sub_small(duk__bigint *x, duk__bigint *y, duk_uin...
  function DUK_LOCAL (line 81513) | DUK_LOCAL void duk__bi_sub_copy(duk__bigint *x, duk__bigint *y, duk__big...
  function DUK_LOCAL (line 81519) | DUK_LOCAL void duk__bi_mul(duk__bigint *x, duk__bigint *y, duk__bigint *...
  function DUK_LOCAL (line 81633) | DUK_LOCAL void duk__bi_mul_small(duk__bigint *x, duk__bigint *y, duk_uin...
  function DUK_LOCAL (line 81646) | DUK_LOCAL void duk__bi_mul_copy(duk__bigint *x, duk__bigint *y, duk__big...
  function DUK_LOCAL (line 81652) | DUK_LOCAL void duk__bi_mul_small_copy(duk__bigint *x, duk_uint32_t y, du...
  function DUK_LOCAL (line 81657) | DUK_LOCAL int duk__bi_is_even(duk__bigint *x) {
  function DUK_LOCAL (line 81662) | DUK_LOCAL int duk__bi_is_zero(duk__bigint *x) {
  function DUK_LOCAL (line 81673) | DUK_LOCAL duk_small_int_t duk__bi_is_2to52(duk__bigint *x) {
  function DUK_LOCAL (line 81680) | DUK_LOCAL void duk__bi_twoexp(duk__bigint *x, duk_small_int_t y) {
  function DUK_LOCAL (line 81692) | DUK_LOCAL void duk__bi_exp_small(duk__bigint *x, duk_small_int_t b, duk_...
  type duk__numconv_stringify_ctx (line 81759) | typedef struct {
  function DUK_LOCAL (line 81794) | DUK_LOCAL duk_size_t duk__dragon4_format_uint32(duk_uint8_t *buf, duk_ui...
  function DUK_LOCAL (line 81827) | DUK_LOCAL void duk__dragon4_prepare(duk__numconv_stringify_ctx *nc_ctx) {
  function DUK_LOCAL (line 81969) | DUK_LOCAL void duk__dragon4_scale(duk__numconv_stringify_ctx *nc_ctx) {
  function DUK_LOCAL (line 82074) | DUK_LOCAL void duk__dragon4_generate(duk__numconv_stringify_ctx *nc_ctx) {
  function DUK_LOCAL (line 82249) | DUK_LOCAL duk_small_int_t duk__dragon4_fixed_format_round(duk__numconv_s...
  function DUK_LOCAL (line 82320) | DUK_LOCAL void duk__dragon4_convert_and_push(duk__numconv_stringify_ctx ...
  function DUK_LOCAL (line 82468) | DUK_LOCAL void duk__dragon4_double_to_ctx(duk__numconv_stringify_ctx *nc...
  function DUK_LOCAL (line 82513) | DUK_LOCAL void duk__dragon4_ctx_to_double(duk__numconv_stringify_ctx *nc...
  function DUK_INTERNAL (line 82662) | DUK_INTERNAL void duk_numconv_stringify(duk_context *ctx, duk_small_int_...
  function DUK_INTERNAL (line 82865) | DUK_INTERNAL void duk_numconv_parse(duk_context *ctx, duk_small_int_t ra...
  type duk__re_disjunction_info (line 83436) | typedef struct {
  function DUK_LOCAL (line 83471) | DUK_LOCAL duk_uint32_t duk__encode_i32(duk_int32_t x) {
  function DUK_LOCAL (line 83482) | DUK_LOCAL duk_uint32_t duk__insert_u32(duk_re_compiler_ctx *re_ctx, duk_...
  function DUK_LOCAL (line 83491) | DUK_LOCAL void duk__append_u32(duk_re_compiler_ctx *re_ctx, duk_uint32_t...
  function DUK_LOCAL (line 83495) | DUK_LOCAL void duk__append_7bit(duk_re_compiler_ctx *re_ctx, duk_uint32_...
  function DUK_LOCAL (line 83505) | DUK_LOCAL void duk__append_2bytes(duk_re_compiler_ctx *re_ctx, duk_uint8...
  function DUK_LOCAL (line 83510) | DUK_LOCAL duk_uint32_t duk__insert_i32(duk_re_compiler_ctx *re_ctx, duk_...
  function DUK_LOCAL (line 83514) | DUK_LOCAL void duk__append_reop(duk_re_compiler_ctx *re_ctx, duk_uint32_...
  function DUK_LOCAL (line 83520) | DUK_LOCAL void duk__append_i32(duk_re_compiler_ctx *re_ctx, duk_int32_t ...
  function DUK_LOCAL (line 83526) | DUK_LOCAL void duk__append_u16_list(duk_re_compiler_ctx *re_ctx, const d...
  function DUK_LOCAL (line 83533) | DUK_LOCAL void duk__insert_slice(duk_re_compiler_ctx *re_ctx, duk_uint32...
  function DUK_LOCAL (line 83537) | DUK_LOCAL void duk__append_slice(duk_re_compiler_ctx *re_ctx, duk_uint32...
  function DUK_LOCAL (line 83541) | DUK_LOCAL void duk__remove_slice(duk_re_compiler_ctx *re_ctx, duk_uint32...
  function DUK_LOCAL (line 83558) | DUK_LOCAL duk_uint32_t duk__insert_jump_offset(duk_re_compiler_ctx *re_c...
  function DUK_LOCAL (line 83622) | DUK_LOCAL duk_uint32_t duk__append_jump_offset(duk_re_compiler_ctx *re_c...
  function DUK_LOCAL (line 83645) | DUK_LOCAL void duk__generate_ranges(void *userdata, duk_codepoint_t r1, ...
  function DUK_LOCAL (line 83757) | DUK_LOCAL void duk__append_range_atom_matcher(duk_re_compiler_ctx *re_ct...
  function DUK_LOCAL (line 83768) | DUK_LOCAL void duk__parse_disjunction(duk_re_compiler_ctx *re_ctx, duk_b...
  function DUK_LOCAL (line 84250) | DUK_LOCAL duk_uint32_t duk__parse_regexp_flags(duk_hthread *thr, duk_hst...
  function DUK_LOCAL (line 84317) | DUK_LOCAL void duk__create_escaped_source(duk_hthread *thr, int idx_patt...
  function DUK_INTERNAL (line 84379) | DUK_INTERNAL void duk_regexp_compile(duk_hthread *thr) {
  function DUK_INTERNAL (line 84499) | DUK_INTERNAL void duk_regexp_create_instance(duk_hthread *thr) {
  function DUK_LOCAL (line 84569) | DUK_LOCAL duk_uint32_t duk__bc_get_u32(duk_re_matcher_ctx *re_ctx, const...
  function DUK_LOCAL (line 84573) | DUK_LOCAL duk_int32_t duk__bc_get_i32(duk_re_matcher_ctx *re_ctx, const ...
  function DUK_LOCAL (line 84585) | DUK_LOCAL const duk_uint8_t *duk__utf8_backtrack(duk_hthread *thr, const...
  function DUK_LOCAL (line 84615) | DUK_LOCAL const duk_uint8_t *duk__utf8_advance(duk_hthread *thr, const d...
  function DUK_LOCAL (line 84654) | DUK_LOCAL duk_codepoint_t duk__inp_get_cp(duk_re_matcher_ctx *re_ctx, co...
  function DUK_LOCAL (line 84667) | DUK_LOCAL const duk_uint8_t *duk__inp_backtrack(duk_re_matcher_ctx *re_c...
  function DUK_LOCAL (line 84672) | DUK_LOCAL duk_codepoint_t duk__inp_get_prev_cp(duk_re_matcher_ctx *re_ct...
  function DUK_LOCAL (line 84689) | DUK_LOCAL const duk_uint8_t *duk__match_regexp(duk_re_matcher_ctx *re_ct...
  function DUK_LOCAL (line 85224) | DUK_LOCAL void duk__regexp_match_helper(duk_hthread *thr, duk_small_int_...
  function DUK_INTERNAL (line 85552) | DUK_INTERNAL void duk_regexp_match(duk_hthread *thr) {
  function DUK_INTERNAL (line 85559) | DUK_INTERNAL void duk_regexp_match_force_global(duk_hthread *thr) {
  type duk__test_double_union (line 85581) | typedef union {
  type duk__test_u32_union (line 85604) | typedef union {
  function DUK_LOCAL (line 85655) | DUK_LOCAL duk_uint_t duk__selftest_types(void) {
  function DUK_LOCAL (line 85690) | DUK_LOCAL duk_uint_t duk__selftest_packed_tval(void) {
  function DUK_LOCAL (line 85706) | DUK_LOCAL duk_uint_t duk__selftest_twos_complement(void) {
  function DUK_LOCAL (line 85727) | DUK_LOCAL duk_uint_t duk__selftest_byte_order(void) {
  function DUK_LOCAL (line 85755) | DUK_LOCAL duk_uint_t duk__selftest_bswap_macros(void) {
  function DUK_LOCAL (line 85807) | DUK_LOCAL duk_uint_t duk__selftest_double_union_size(void) {
  function DUK_LOCAL (line 85821) | DUK_LOCAL duk_uint_t duk__selftest_double_aliasing(void) {
  function DUK_LOCAL (line 85862) | DUK_LOCAL duk_uint_t duk__selftest_double_zero_sign(void) {
  function DUK_LOCAL (line 85880) | DUK_LOCAL duk_uint_t duk__selftest_double_rounding(void) {
  function DUK_LOCAL (line 85951) | DUK_LOCAL duk_uint_t duk__selftest_fmod(void) {
  function DUK_LOCAL (line 85993) | DUK_LOCAL duk_uint_t duk__selftest_struct_align(void) {
  function DUK_LOCAL (line 86019) | DUK_LOCAL duk_uint_t duk__selftest_64bit_arithmetic(void) {
  function DUK_LOCAL (line 86041) | DUK_LOCAL duk_uint_t duk__selftest_cast_double_to_small_uint(void) {
  function DUK_LOCAL (line 86077) | DUK_LOCAL duk_uint_t duk__selftest_cast_double_to_uint32(void) {
  function DUK_LOCAL (line 86108) | DUK_LOCAL duk_uint_t duk__selftest_alloc_funcs(duk_alloc_function alloc_...
  function DUK_INTERNAL (line 86157) | DUK_INTERNAL duk_uint_t duk_selftest_run_tests(duk_alloc_function alloc_...
  function duk_tval_set_number_chkfast_fast (line 86216) | void duk_tval_set_number_chkfast_fast(duk_tval *tv, duk_double_t x) {
  function duk_tval_set_number_chkfast_slow (line 86259) | void duk_tval_set_number_chkfast_slow(duk_tval *tv, duk_double_t x) {
  function duk_double_t (line 86268) | duk_double_t duk_tval_get_number_packed(duk_tval *tv) {
  function duk_double_t (line 86294) | duk_double_t duk_tval_get_number_unpacked(duk_tval *tv) {
  function duk_double_t (line 86318) | duk_double_t duk_tval_get_number_unpacked_fastint(duk_tval *tv) {
  function DUK_INTERNAL (line 92488) | DUK_INTERNAL duk_uint32_t duk_bd_decode(duk_bitdecoder_ctx *ctx, duk_sma...
  function DUK_INTERNAL (line 92533) | DUK_INTERNAL duk_small_uint_t duk_bd_decode_flag(duk_bitdecoder_ctx *ctx) {
  function DUK_INTERNAL (line 92540) | DUK_INTERNAL duk_uint32_t duk_bd_decode_flagged(duk_bitdecoder_ctx *ctx,...
  function DUK_INTERNAL (line 92549) | DUK_INTERNAL duk_int32_t duk_bd_decode_flagged_signed(duk_bitdecoder_ctx...
  function DUK_INTERNAL (line 92554) | DUK_INTERNAL duk_uint32_t duk_bd_decode_varuint(duk_bitdecoder_ctx *ctx) {
  function DUK_INTERNAL (line 92596) | DUK_INTERNAL duk_small_uint_t duk_bd_decode_bitpacked_string(duk_bitdeco...
  function DUK_INTERNAL (line 92650) | DUK_INTERNAL void duk_be_encode(duk_bitencoder_ctx *ctx, duk_uint32_t da...
  function DUK_INTERNAL (line 92675) | DUK_INTERNAL void duk_be_finish(duk_bitencoder_ctx *ctx) {
  function DUK_LOCAL (line 92697) | DUK_LOCAL void duk__bw_update_ptrs(duk_hthread *thr, duk_bufwriter_ctx *...
  function DUK_INTERNAL (line 92711) | DUK_INTERNAL void duk_bw_init(duk_hthread *thr, duk_bufwriter_ctx *bw_ct...
  function DUK_INTERNAL (line 92722) | DUK_INTERNAL void duk_bw_init_pushbuf(duk_hthread *thr, duk_bufwriter_ct...
  function DUK_INTERNAL (line 92737) | DUK_INTERNAL duk_uint8_t *duk_bw_resize(duk_hthread *thr, duk_bufwriter_...
  function DUK_INTERNAL (line 92775) | DUK_INTERNAL void duk_bw_compact(duk_hthread *thr, duk_bufwriter_ctx *bw...
  function DUK_INTERNAL (line 92787) | DUK_INTERNAL void duk_bw_write_raw_slice(duk_hthread *thr, duk_bufwriter...
  function DUK_INTERNAL (line 92804) | DUK_INTERNAL void duk_bw_write_ensure_slice(duk_hthread *thr, duk_bufwri...
  function DUK_INTERNAL (line 92816) | DUK_INTERNAL void duk_bw_insert_raw_bytes(duk_hthread *thr, duk_bufwrite...
  function DUK_INTERNAL (line 92840) | DUK_INTERNAL void duk_bw_insert_ensure_bytes(duk_hthread *thr, duk_bufwr...
  function DUK_INTERNAL (line 92851) | DUK_INTERNAL void duk_bw_insert_raw_slice(duk_hthread *thr, duk_bufwrite...
  function DUK_INTERNAL (line 92888) | DUK_INTERNAL void duk_bw_insert_ensure_slice(duk_hthread *thr, duk_bufwr...
  function DUK_INTERNAL (line 92904) | DUK_INTERNAL duk_uint8_t *duk_bw_insert_raw_area(duk_hthread *thr, duk_b...
  function DUK_INTERNAL (line 92922) | DUK_INTERNAL duk_uint8_t *duk_bw_insert_ensure_area(duk_hthread *thr, du...
  function DUK_INTERNAL (line 92932) | DUK_INTERNAL void duk_bw_remove_raw_slice(duk_hthread *thr, duk_bufwrite...
  function duk_uint16_t (line 92967) | duk_uint16_t duk_raw_read_u16_be(duk_uint8_t **p) {
  function duk_uint32_t (line 92979) | duk_uint32_t duk_raw_read_u32_be(duk_uint8_t **p) {
  function duk_double_t (line 92991) | duk_double_t duk_raw_read_double_be(duk_uint8_t **p) {
  function duk_raw_write_u16_be (line 93009) | void duk_raw_write_u16_be(duk_uint8_t **p, duk_uint16_t val) {
  function duk_raw_write_u32_be (line 93020) | void duk_raw_write_u32_be(duk_uint8_t **p, duk_uint32_t val) {
  function duk_raw_write_double_be (line 93031) | void duk_raw_write_double_be(duk_uint8_t **p, duk_double_t val) {
  function DUK_INTERNAL (line 93063) | DUK_INTERNAL duk_uint32_t duk_util_hashbytes(const duk_uint8_t *data, du...
  function DUK_INTERNAL (line 93138) | DUK_INTERNAL void duk_util_tinyrandom_prepare_seed(duk_hthread *thr) {
  function DUK_INTERNAL (line 93142) | DUK_INTERNAL duk_double_t duk_util_tinyrandom_get_double(duk_hthread *th...
  function duk_uint64_t (line 93168) | duk_uint64_t duk__rnd_splitmix64(duk_uint64_t *x) {
  function duk_uint64_t (line 93176) | duk_uint64_t duk__rnd_rotl(const duk_uint64_t x, duk_small_uint_t k) {
  function duk_uint64_t (line 93180) | duk_uint64_t duk__xoroshiro128plus(duk_uint64_t *s) {
  function DUK_INTERNAL (line 93195) | DUK_INTERNAL void duk_util_tinyrandom_prepare_seed(duk_hthread *thr) {
  function DUK_INTERNAL (line 93210) | DUK_INTERNAL duk_double_t duk_util_tinyrandom_get_double(duk_hthread *th...

FILE: ext/duktape/duktape-2.1.0/src/duktape.h
  type duk_thread_state (line 200) | struct duk_thread_state
  type duk_memory_functions (line 201) | struct duk_memory_functions
  type duk_function_list_entry (line 202) | struct duk_function_list_entry
  type duk_number_list_entry (line 203) | struct duk_number_list_entry
  type duk_time_components (line 204) | struct duk_time_components
  type duk_thread_state (line 209) | typedef struct duk_thread_state duk_thread_state;
  type duk_memory_functions (line 210) | typedef struct duk_memory_functions duk_memory_functions;
  type duk_function_list_entry (line 211) | typedef struct duk_function_list_entry duk_function_list_entry;
  type duk_number_list_entry (line 212) | typedef struct duk_number_list_entry duk_number_list_entry;
  type duk_time_components (line 213) | typedef struct duk_time_components duk_time_components;
  type duk_ret_t (line 215) | typedef duk_ret_t (*duk_c_function)(duk_context *ctx);
  type duk_codepoint_t (line 221) | typedef duk_codepoint_t (*duk_map_char_function) (void *udata, duk_codep...
  type duk_ret_t (line 222) | typedef duk_ret_t (*duk_safe_call_function) (duk_context *ctx, void *uda...
  type duk_size_t (line 223) | typedef duk_size_t (*duk_debug_read_function) (void *udata, char *buffer...
  type duk_size_t (line 224) | typedef duk_size_t (*duk_debug_write_function) (void *udata, const char ...
  type duk_size_t (line 225) | typedef duk_size_t (*duk_debug_peek_function) (void *udata);
  type duk_idx_t (line 228) | typedef duk_idx_t (*duk_debug_request_function) (duk_context *ctx, void ...
  type duk_thread_state (line 231) | struct duk_thread_state {
  type duk_memory_functions (line 239) | struct duk_memory_functions {
  type duk_function_list_entry (line 246) | struct duk_function_list_entry {
  type duk_number_list_entry (line 252) | struct duk_number_list_entry {
  type duk_time_components (line 257) | struct duk_time_components {

FILE: ext/gmock/include/gmock/gmock-actions.h
  function namespace (line 49) | namespace testing {
  function Clear (line 171) | static void Clear() {
  function IsSet (line 177) | static bool IsSet() { return value_ != NULL; }
  function Exists (line 181) | static bool Exists() {
  function T (line 188) | static T Get() {
  function Clear (line 208) | static void Clear() {
  function IsSet (line 213) | static bool IsSet() { return address_ != NULL; }
  function Exists (line 217) | static bool Exists() {
  function T (line 224) | static T& Get() {
  function Get (line 239) | static void Get() {}
  type typename (line 255) | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple;
  function virtual (line 258) | virtual ~ActionInterface() {}
  type typename (line 283) | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple;
  function impl_ (line 287) | impl_(NULL) {}
  function explicit (line 291) | explicit Action(ActionInterface<F>* impl) : impl_(impl) {}
  function impl_ (line 294) | Action(const Action& action) : impl_(action.impl_) {}
  function Result (line 312) | Result Perform(const ArgumentTuple& args) const {
  type typename (line 366) | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple;
  function explicit (line 368) | explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {}
  function virtual (line 370) | virtual Result Perform(const ArgumentTuple& args) {
  function namespace (line 404) | namespace internal {
  function class (line 511) | class ReturnNullAction {
  function class (line 523) | class ReturnVoidAction {
  type typename (line 545) | typedef typename Function<F>::Result Result;
  type typename (line 560) | typedef typename Function<F>::ArgumentTuple ArgumentTuple;
  function explicit (line 562) | explicit Impl(T& ref) : ref_(ref) {}
  function virtual (line 564) | virtual Result Perform(const ArgumentTuple&) {
  type typename (line 593) | typedef typename Function<F>::Result Result;
  type typename (line 609) | typedef typename Function<F>::ArgumentTuple ArgumentTuple;
  function explicit (line 611) | explicit Impl(const T& value) : value_(value) {}
  function virtual (line 613) | virtual Result Perform(const ArgumentTuple&) {
  function class (line 629) | class DoDefaultAction {
  type typename (line 786) | typedef typename internal::Function<F>::Result Result;
  function ostream (line 846) | ostream* os) {
  type typename (line 872) | typedef typename Function<F>::ArgumentTuple ArgumentTuple;
  type typename (line 873) | typedef typename Function<F>::MakeResultVoid VoidResult;
  function virtual (line 878) | virtual Result Perform(const ArgumentTuple& args) {
  type internal (line 928) | typedef internal::IgnoredValue Unused;
  function PolymorphicAction (line 948) | inline PolymorphicAction<internal::ReturnNullAction> ReturnNull() {
  function PolymorphicAction (line 953) | inline PolymorphicAction<internal::ReturnVoidAction> Return() {
  function internal (line 972) | inline internal::DoDefaultAction DoDefault() {

FILE: ext/gmock/include/gmock/gmock-cardinalities.h
  function namespace (line 46) | namespace testing {

FILE: ext/gmock/include/gmock/gmock-generated-actions.h
  function namespace (line 44) | namespace testing {
  function R (line 193) | R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4,
  function R (line 201) | R InvokeMethod(Class* obj_ptr,
  function R (line 216) | R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4,
  function R (line 224) | R InvokeMethod(Class* obj_ptr,
  function R (line 239) | R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4,
  function R (line 247) | R InvokeMethod(Class* obj_ptr,
  function R (line 265) | R Invoke(Function function, const ::std::tr1::tuple<A1, A2, A3, A4,
  function R (line 274) | R InvokeMethod(Class* obj_ptr,
  function R (line 300) | R Call(Function function) { return function(); }
  function R (line 316) | R Call(Function function, A1 a1) { return function(a1); }
  function R (line 320) | R Call(Function function, A1 a1, A2 a2) {
  function R (line 326) | R Call(Function function, A1 a1, A2 a2, A3 a3) {
  function R (line 333) | R Call(Function function, A1 a1, A2 a2, A3 a3, A4 a4) {
  type typename (line 419) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 420) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 432) | typedef Result type();
  type typename (line 433) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 434) | static SelectedArgs Select(const ArgumentTuple& /* args */) {
  type Result (line 444) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1));
  type typename (line 445) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 446) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 456) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1),
  type typename (line 458) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 459) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 469) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1),
  type typename (line 471) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 472) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 483) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1),
  type typename (line 486) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 487) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 499) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1),
  type typename (line 502) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 503) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 515) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1),
  type typename (line 519) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 520) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 532) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1),
  type typename (line 536) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 537) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 549) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1),
  type typename (line 554) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 555) | static SelectedArgs Select(const ArgumentTuple& args) {
  type Result (line 568) | typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1),
  type typename (line 573) | typedef typename Function<type>::ArgumentTuple SelectedArgs;
  function SelectedArgs (line 574) | static SelectedArgs Select(const ArgumentTuple& args) {
  function explicit (line 590) | explicit WithArgsAction(const InnerAction& action) : action_(action) {}
  type typename (line 600) | typedef typename Function<F>::A
Copy disabled (too large) Download .json
Condensed preview — 1854 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (29,783K chars).
[
  {
    "path": ".gitignore",
    "chars": 371,
    "preview": "# Object files\n*.o\n*.lo\n*.obj\n\n# Compiled libraries\n*.so\n*.dll\n*.dylib\n*.a\n*.la\n*.lib\n\n# Executables\n*.exe\n*.out\n\n# Byte"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 4328,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "License.txt",
    "chars": 37800,
    "preview": "Licensing Information User Manual\n\nMySQL Router 8.0\n     _______________________________________________________________"
  },
  {
    "path": "README.txt",
    "chars": 7945,
    "preview": "This repository is frozen\n=========================\n\nNewer versions of MySQL Router 8.0 can be found in the MySQL Server"
  },
  {
    "path": "cmake/Coverage.cmake",
    "chars": 3902,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/FindGMock.cmake",
    "chars": 3286,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/FindLibEvent2.cmake",
    "chars": 5341,
    "preview": "# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you can redi"
  },
  {
    "path": "cmake/FindMySQL.cmake",
    "chars": 5368,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/HarnessTesting.cmake",
    "chars": 2603,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/Plugin.cmake",
    "chars": 6509,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/TextUtils.cmake",
    "chars": 1665,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/cmake_parse_arguments.cmake",
    "chars": 2223,
    "preview": "\n# Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.\n# \n# This program is free software; you "
  },
  {
    "path": "cmake/compile_flags.cmake",
    "chars": 1867,
    "preview": "# Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.\n# \n# This program is free software; you c"
  },
  {
    "path": "cmake/compiler.cmake",
    "chars": 4305,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/configure.cmake",
    "chars": 9119,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/docs.cmake",
    "chars": 1688,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/gmocktest.cmake",
    "chars": 2210,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/install_layout.cmake",
    "chars": 23846,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/libutils.cmake",
    "chars": 12588,
    "preview": "# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/mysqlx_protobuf.cmake",
    "chars": 2775,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/packaging.cmake",
    "chars": 3473,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/platform.cmake",
    "chars": 2163,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/protobuf.cmake",
    "chars": 4494,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/settings.cmake",
    "chars": 1973,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/ssl.cmake",
    "chars": 10918,
    "preview": "# Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/testing.cmake",
    "chars": 13134,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "cmake/version.cmake",
    "chars": 2529,
    "preview": "# Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n#\n# This program is free software; you ca"
  },
  {
    "path": "config.h.in",
    "chars": 3117,
    "preview": "/*\n  Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.\n\n  This program is free software; you "
  },
  {
    "path": "doc/doxygen.cfg.in",
    "chars": 1719,
    "preview": "# Generated from doc/doxygen.cfg.in\n\n# This file describes the settings to be used by Doxygen for MySQL Router.\n\nDOXYFIL"
  },
  {
    "path": "doc/router_doxygen.css",
    "chars": 338,
    "preview": ".fragment {\n  font-size: 80% !important;\n}\n\n.textblock, .memitem {\n  width: 600px !important;\n}\n\n.memdoc p {\n}\n\n.devnote"
  },
  {
    "path": "doc/router_footer.html",
    "chars": 660,
    "preview": "<!-- HTML footer for doxygen 1.8.9.1-->\n<!-- start footer part -->\n<!--BEGIN GENERATE_TREEVIEW-->\n<div id=\"nav-path\" cla"
  },
  {
    "path": "doc/router_header.html",
    "chars": 1976,
    "preview": "<!-- HTML header for doxygen 1.8.9.1-->\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.or"
  },
  {
    "path": "doc/sample_mysqlrouter.conf",
    "chars": 1039,
    "preview": "\n# MySQL Router sample configuration\n#\n# The following is a sample configuration file which shows\n# most of the plugins "
  },
  {
    "path": "ext/RAPIDJSON-README",
    "chars": 1340,
    "preview": "Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.\n\nThis program is free software; you can red"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/LICENSE.txt",
    "chars": 1172,
    "preview": "===============\nDuktape license\n===============\n\n(http://opensource.org/licenses/MIT)\n\nCopyright (c) 2013-2017 by Duktap"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/README.rst",
    "chars": 5126,
    "preview": "=======\nDuktape\n=======\n\nDuktape is a small and portable Ecmascript E5/E5.1 implementation.  It is\nintended to be easily"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/README.rst",
    "chars": 605,
    "preview": "==============\nDuktape extras\n==============\n\nExtra modules and utilities.  Extras provide functionality that doesn't\nco"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/alloc-pool/Makefile",
    "chars": 1312,
    "preview": "# For manual testing; say 'make' in extras/alloc-pool and run ./test.\n\nDEFS=\n#DEFS+='-DDUK_ALLOC_POOL_DEBUG'\n\n.PHONY: te"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/alloc-pool/README.rst",
    "chars": 1687,
    "preview": "=====================================\nPool allocator for low memory targets\n=====================================\n\nA sim"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/alloc-pool/duk_alloc_pool.c",
    "chars": 10799,
    "preview": "/*\n *  Pool allocator for low memory targets.\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/alloc-pool/duk_alloc_pool.h",
    "chars": 6867,
    "preview": "#if !defined(DUK_ALLOC_POOL_H_INCLUDED)\n#define DUK_ALLOC_POOL_H_INCLUDED\n\n#include \"duktape.h\"\n\n/* Pointer compression "
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/alloc-pool/ptrcomp.yaml",
    "chars": 492,
    "preview": "DUK_USE_REFCOUNT16: true\nDUK_USE_STRHASH16: true\nDUK_USE_STRLEN16: true\nDUK_USE_BUFLEN16: true\nDUK_USE_OBJSIZES16: true\n"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/alloc-pool/ptrcomp_fixup.h",
    "chars": 100,
    "preview": "/* To provide declarations for inline pointer compression functions. */\n#include \"duk_alloc_pool.h\"\n"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/alloc-pool/test.c",
    "chars": 2922,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include \"duktape.h\"\n#include \"duk_alloc_pool.h\"\n\nvoid my_fatal(const char *msg) "
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/console/Makefile",
    "chars": 519,
    "preview": "# For manual testing; say 'make' in extras/print-alert and run ./test.\n\n.PHONY: test\ntest:\n\tgcc -std=c99 -Wall -Wextra -"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/console/README.rst",
    "chars": 1113,
    "preview": "=========================\nMinimal 'console' binding\n=========================\n\nDuktape doesn't provide a ``console`` bin"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/console/duk_console.c",
    "chars": 4962,
    "preview": "/*\n *  Minimal 'console' binding.\n *\n *  https://github.com/DeveloperToolsWG/console-object/blob/master/api.md\n *  https"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/console/duk_console.h",
    "chars": 316,
    "preview": "#if !defined(DUK_CONSOLE_H_INCLUDED)\n#define DUK_CONSOLE_H_INCLUDED\n\n#include \"duktape.h\"\n\n/* Use a proxy wrapper to mak"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/console/test.c",
    "chars": 598,
    "preview": "#include <stdio.h>\n#include \"duktape.h\"\n#include \"duk_console.h\"\n\nint main(int argc, char *argv[]) {\n\tduk_context *ctx;\n"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/Makefile",
    "chars": 199,
    "preview": "# For manual testing; say 'make' in extras/duk-v1-compat and run ./test.\n\n.PHONY: test\ntest:\n\tgcc -std=c99 -Wall -Wextra"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/README.rst",
    "chars": 673,
    "preview": "================================\nDuktape V1 compatibility helpers\n================================\n\nProvides helpers for"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/duk_v1_compat.c",
    "chars": 2977,
    "preview": "#include <stdio.h>\n#include \"duktape.h\"\n#include \"duk_v1_compat.h\"\n\n/*\n *  duk_dump_context_{stdout,stderr}()\n */\n\nvoid "
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/duk_v1_compat.h",
    "chars": 1231,
    "preview": "#if !defined(DUK_V1_COMPAT_INCLUDED)\n#define DUK_V1_COMPAT_INCLUDED\n\n#include \"duktape.h\"\n\n/* Straight flag rename */\n#i"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/test.c",
    "chars": 3431,
    "preview": "#include <stdio.h>\n#include \"duktape.h\"\n#include \"duk_v1_compat.h\"\n\nstatic duk_ret_t my_print(duk_context *ctx) {\n\tduk_p"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/test_compile1.js",
    "chars": 136,
    "preview": "// File to compile, no error\nprint('Hello from test_compile1.js');\nprint(new Error('test error for traceback (shows file"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/test_compile2.js",
    "chars": 78,
    "preview": "// File to compile, syntax error\nprint('Hello from test_compile2.js');\n= y +;\n"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/test_eval1.js",
    "chars": 135,
    "preview": "// File to eval, no error\nprint('Hello from test_eval1.js');\nprint(new Error('test error for traceback (shows filename)'"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/duk-v1-compat/test_eval2.js",
    "chars": 159,
    "preview": "// File to eval, throws error\nprint('Hello from test_eval2.js');\nprint(new Error('test error for traceback (shows filena"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/logging/Makefile",
    "chars": 733,
    "preview": "# For manual testing; say 'make' in extras/logging and run ./test.\n.PHONY: test\ntest:\n\tgcc -std=c99 -Wall -Wextra -otest"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/logging/README.rst",
    "chars": 1301,
    "preview": "========================================\nDuktape 1.x compatible logging framework\n======================================"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/logging/duk_logging.c",
    "chars": 11284,
    "preview": "/*\n *  Logging support\n */\n\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include \"duktape.h\"\n#include \"du"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/logging/duk_logging.h",
    "chars": 674,
    "preview": "#if !defined(DUK_LOGGING_H_INCLUDED)\n#define DUK_LOGGING_H_INCLUDED\n\n#include \"duktape.h\"\n\n/* Log levels */\n#define DUK_"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/logging/test.c",
    "chars": 1572,
    "preview": "#include <stdio.h>\n#include \"duktape.h\"\n#include \"duk_logging.h\"\n\nstatic duk_ret_t init_logging(duk_context *ctx, void *"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/minimal-printf/Makefile",
    "chars": 188,
    "preview": "# Just for manual testing\n.PHONY: test\ntest: duk_minimal_printf.c\n\tgcc -std=c99 -Wall -Wextra -fno-stack-protector -m32 "
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/minimal-printf/README.rst",
    "chars": 3300,
    "preview": "==============================================\nMinimal sprintf/sscanf replacement for Duktape\n=========================="
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/minimal-printf/duk_minimal_printf.c",
    "chars": 7606,
    "preview": "/*\n *  Minimal vsnprintf(), snprintf(), sprintf(), and sscanf() for Duktape.\n *  The supported conversion formats narrow"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/minimal-printf/duk_minimal_printf.h",
    "chars": 515,
    "preview": "#if !defined(DUK_MINIMAL_PRINTF_H_INCLUDED)\n#define DUK_MINIMAL_PRINTF_H_INCLUDED\n\n#include <stdarg.h>  /* va_list etc *"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/minimal-printf/test.c",
    "chars": 5039,
    "preview": "#include <stdio.h>\n#include <string.h>\n#include \"duk_minimal_printf.h\"\n\nchar buffer[32];\n\nstatic void init_buffer(void) "
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-duktape/Makefile",
    "chars": 1000,
    "preview": "# For manual testing; say 'make' in extras/module-duktape and run ./test.\n# There's test coverage in tests/ecmascript, s"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-duktape/README.rst",
    "chars": 1139,
    "preview": "===============================================\nDuktape 1.x compatible module loading framework\n========================"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-duktape/duk_module_duktape.c",
    "chars": 17421,
    "preview": "/*\n *  Duktape 1.x compatible module loading framework\n */\n\n#include \"duktape.h\"\n#include \"duk_module_duktape.h\"\n\n/* (v)"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-duktape/duk_module_duktape.h",
    "chars": 425,
    "preview": "#if !defined(DUK_MODULE_DUKTAPE_H_INCLUDED)\n#define DUK_MODULE_DUKTAPE_H_INCLUDED\n\n#include \"duktape.h\"\n\n/* Maximum leng"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-duktape/test.c",
    "chars": 1176,
    "preview": "#include <stdio.h>\n#include <string.h>\n#include \"duktape.h\"\n#include \"duk_module_duktape.h\"\n\nstatic duk_ret_t handle_pri"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-node/Makefile",
    "chars": 1612,
    "preview": "# For manual testing; say 'make' in extras/module-node and run ./test.\n\n.PHONY: test\ntest:\n\tgcc -std=c99 -Wall -Wextra -"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-node/README.rst",
    "chars": 3332,
    "preview": "=====================================\nNode.js-like module loading framework\n=====================================\n\nThis "
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-node/duk_module_node.c",
    "chars": 9085,
    "preview": "/*\n *  Node.js-like module loading framework for Duktape\n *\n *  https://nodejs.org/api/modules.html\n */\n\n#include \"dukta"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-node/duk_module_node.h",
    "chars": 296,
    "preview": "#if !defined(DUK_MODULE_NODE_H_INCLUDED)\n#define DUK_MODULE_NODE_H_INCLUDED\n\n#include \"duktape.h\"\n\nDUK_EXTERNAL_DECL duk"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/module-node/test.c",
    "chars": 2925,
    "preview": "#include <stdio.h>\n#include <string.h>\n#include \"duktape.h\"\n#include \"duk_module_node.h\"\n\nstatic duk_ret_t cb_resolve_mo"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/print-alert/Makefile",
    "chars": 264,
    "preview": "# For manual testing; say 'make' in extras/print-alert and run ./test.\n.PHONY: test\ntest:\n\tgcc -std=c99 -Wall -Wextra -o"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/print-alert/README.rst",
    "chars": 1004,
    "preview": "===================================================\nDuktape 1.x compatible print() and alert() bindings\n================"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/print-alert/duk_print_alert.c",
    "chars": 3762,
    "preview": "/*\n *  Duktape 1.x compatible print() and alert() bindings.\n */\n\n#include <stdio.h>\n#include <string.h>\n#include \"duktap"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/print-alert/duk_print_alert.h",
    "chars": 241,
    "preview": "#if !defined(DUK_PRINT_ALERT_H_INCLUDED)\n#define DUK_PRINT_ALERT_H_INCLUDED\n\n#include \"duktape.h\"\n\n/* No flags at the mo"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/extras/print-alert/test.c",
    "chars": 582,
    "preview": "#include <stdio.h>\n#include \"duktape.h\"\n#include \"duk_print_alert.h\"\n\nint main(int argc, char *argv[]) {\n\tduk_context *c"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/licenses/commonjs.txt",
    "chars": 138,
    "preview": "CommonJS specification snapshots are included in the references/\ndirectory.  CommonJS is under the MIT license: http://w"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/licenses/lua.txt",
    "chars": 63,
    "preview": "Lua is under the MIT license: http://www.lua.org/license.html.\n"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/licenses/murmurhash2.txt",
    "chars": 1082,
    "preview": "The MIT License\n\nCopyright (c) <year> <copyright holders>\n\nPermission is hereby granted, free of charge, to any person o"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/licenses/splitmix64.txt",
    "chars": 326,
    "preview": "/*  Written in 2015 by Sebastiano Vigna (vigna@acm.org)\n\nTo the extent possible under law, the author has dedicated all "
  },
  {
    "path": "ext/duktape/duktape-2.1.0/licenses/xoroshiro128plus.txt",
    "chars": 345,
    "preview": "/*  Written in 2016 by David Blackman and Sebastiano Vigna (vigna@acm.org)\n\nTo the extent possible under law, the author"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/src/duk_config.h",
    "chars": 120520,
    "preview": "/*\n *  duk_config.h configuration header generated by genconfig.py.\n *\n *  Git commit: 1f1f51a4f9595ffe8def0e9ba45b20f14"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/src/duk_source_meta.json",
    "chars": 48134,
    "preview": "{\n    \"comment\": \"Metadata for Duktape sources\", \n    \"duk_version_string\": \"2.1.0\", \n    \"type\": \"duk_source_meta\", \n  "
  },
  {
    "path": "ext/duktape/duktape-2.1.0/src/duktape.c",
    "chars": 3462444,
    "preview": "/*\n *  Single source autogenerated distributable for Duktape 2.1.0.\n *\n *  Git commit 1f1f51a4f9595ffe8def0e9ba45b20f146"
  },
  {
    "path": "ext/duktape/duktape-2.1.0/src/duktape.h",
    "chars": 64836,
    "preview": "/*\n *  Duktape public API for Duktape 2.1.0.\n *\n *  See the API reference for documentation on call semantics.  The expo"
  },
  {
    "path": "ext/gmock/CHANGES",
    "chars": 5563,
    "preview": "Changes for 1.7.0:\n\n* All new improvements in Google Test 1.7.0.\n* New feature: matchers DoubleNear(), FloatNear(),\n  Na"
  },
  {
    "path": "ext/gmock/CMakeLists.txt",
    "chars": 6755,
    "preview": "########################################################################\n# CMake build script for Google Mock.\n#\n# To ru"
  },
  {
    "path": "ext/gmock/CONTRIBUTORS",
    "chars": 1369,
    "preview": "# This file contains a list of people who've made non-trivial\n# contribution to the Google C++ Mocking Framework project"
  },
  {
    "path": "ext/gmock/LICENSE",
    "chars": 1475,
    "preview": "Copyright 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmod"
  },
  {
    "path": "ext/gmock/Makefile.am",
    "chars": 7289,
    "preview": "# Automake file\n\n# Nonstandard package files for distribution.\nEXTRA_DIST = LICENSE\n\n# We may need to build our internal"
  },
  {
    "path": "ext/gmock/README",
    "chars": 14173,
    "preview": "Google C++ Mocking Framework\n============================\n\nhttp://code.google.com/p/googlemock/\n\nOverview\n--------\n\nGoog"
  },
  {
    "path": "ext/gmock/build-aux/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "ext/gmock/configure.ac",
    "chars": 6254,
    "preview": "m4_include(gtest/m4/acx_pthread.m4)\n\nAC_INIT([Google C++ Mocking Framework],\n        [1.7.0],\n        [googlemock@google"
  },
  {
    "path": "ext/gmock/include/gmock/gmock-actions.h",
    "chars": 37132,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/include/gmock/gmock-cardinalities.h",
    "chars": 5820,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/include/gmock/gmock-generated-actions.h",
    "chars": 105123,
    "preview": "// This file was GENERATED by a script.  DO NOT EDIT BY HAND!!!\n\n// Copyright 2007, Google Inc.\n// All rights reserved.\n"
  },
  {
    "path": "ext/gmock/include/gmock/gmock-generated-actions.h.pump",
    "chars": 27476,
    "preview": "$$ -*- mode: c++; -*-\n$$ This is a Pump source file.  Please use Pump to convert it to\n$$ gmock-generated-actions.h.\n$$\n"
  },
  {
    "path": "ext/gmock/include/gmock/gmock-generated-function-mockers.h",
    "chars": 43374,
    "preview": "// This file was GENERATED by command:\n//     pump.py gmock-generated-function-mockers.h.pump\n// DO NOT EDIT BY HAND!!!\n"
  },
  {
    "path": "ext/gmock/include/gmock/gmock-generated-function-mockers.h.pump",
    "chars": 8571,
    "preview": "$$ -*- mode: c++; -*-\n$$ This is a Pump source file.  Please use Pump to convert it to\n$$ gmock-generated-function-mocke"
  },
  {
    "path": "ext/gmock/include/gmock/gmock-generated-matchers.h",
    "chars": 86544,
    "preview": "// This file was GENERATED by command:\n//     pump.py gmock-generated-matchers.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// Copy"
  },
  {
    "path": "ext/gmock/include/gmock/gmock-generated-matchers.h.pump",
    "chars": 21765,
    "preview": "$$ -*- mode: c++; -*-\n$$ This is a Pump source file.  Please use Pump to convert it to\n$$ gmock-generated-actions.h.\n$$\n"
  },
  {
    "path": "ext/gmock/include/gmock/gmock-generated-nice-strict.h",
    "chars": 16184,
    "preview": "// This file was GENERATED by command:\n//     pump.py gmock-generated-nice-strict.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// C"
  },
  {
    "path": "ext/gmock/include/gmock/gmock-generated-nice-strict.h.pump",
    "chars": 6034,
    "preview": "$$ -*- mode: c++; -*-\n$$ This is a Pump source file.  Please use Pump to convert it to\n$$ gmock-generated-nice-strict.h."
  },
  {
    "path": "ext/gmock/include/gmock/gmock-matchers.h",
    "chars": 144416,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/include/gmock/gmock-more-actions.h",
    "chars": 8851,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/include/gmock/gmock-more-matchers.h",
    "chars": 2393,
    "preview": "// Copyright 2013, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/include/gmock/gmock-spec-builders.h",
    "chars": 67386,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/include/gmock/gmock.h",
    "chars": 3638,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/include/gmock/internal/gmock-generated-internal-utils.h",
    "chars": 11456,
    "preview": "// This file was GENERATED by command:\n//     pump.py gmock-generated-internal-utils.h.pump\n// DO NOT EDIT BY HAND!!!\n\n/"
  },
  {
    "path": "ext/gmock/include/gmock/internal/gmock-generated-internal-utils.h.pump",
    "chars": 4930,
    "preview": "$$ -*- mode: c++; -*-\n$$ This is a Pump source file.  Please use Pump to convert it to\n$$ gmock-generated-function-mocke"
  },
  {
    "path": "ext/gmock/include/gmock/internal/gmock-internal-utils.h",
    "chars": 19896,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/include/gmock/internal/gmock-port.h",
    "chars": 3511,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/make/Makefile",
    "chars": 3673,
    "preview": "# A sample Makefile for building both Google Mock and Google Test and\n# using them in user tests.  This file is self-con"
  },
  {
    "path": "ext/gmock/msvc/2005/gmock.sln",
    "chars": 1786,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 9.00\r\n# Visual Studio 2005\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-0"
  },
  {
    "path": "ext/gmock/msvc/2005/gmock.vcproj",
    "chars": 3993,
    "preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"8.00\"\r\n\tName=\""
  },
  {
    "path": "ext/gmock/msvc/2005/gmock_config.vsprops",
    "chars": 341,
    "preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioPropertySheet\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"8.00\"\r\n\t"
  },
  {
    "path": "ext/gmock/msvc/2005/gmock_main.vcproj",
    "chars": 3992,
    "preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"8.00\"\r\n\tName=\""
  },
  {
    "path": "ext/gmock/msvc/2005/gmock_test.vcproj",
    "chars": 4251,
    "preview": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"8.00\"\r\n\tName=\""
  },
  {
    "path": "ext/gmock/msvc/2010/gmock.sln",
    "chars": 1795,
    "preview": "\r\nMicrosoft Visual Studio Solution File, Format Version 11.00\r\n# Visual C++ Express 2010\r\nProject(\"{8BC9CEB8-8B4A-11D0-"
  },
  {
    "path": "ext/gmock/msvc/2010/gmock.vcxproj",
    "chars": 4670,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "ext/gmock/msvc/2010/gmock_config.props",
    "chars": 688,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "ext/gmock/msvc/2010/gmock_main.vcxproj",
    "chars": 4915,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "ext/gmock/msvc/2010/gmock_test.vcxproj",
    "chars": 5400,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"4.0\" xmlns=\"http://schemas.microso"
  },
  {
    "path": "ext/gmock/scripts/fuse_gmock_files.py",
    "chars": 8606,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2009, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and bi"
  },
  {
    "path": "ext/gmock/scripts/generator/LICENSE",
    "chars": 11386,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "ext/gmock/scripts/generator/README",
    "chars": 1349,
    "preview": "\nThe Google Mock class generator is an application that is part of cppclean.\nFor more information about cppclean, see th"
  },
  {
    "path": "ext/gmock/scripts/generator/README.cppclean",
    "chars": 4216,
    "preview": "Goal:\n-----\n  CppClean attempts to find problems in C++ source that slow development\n  in large code bases, for example "
  },
  {
    "path": "ext/gmock/scripts/generator/cpp/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "ext/gmock/scripts/generator/cpp/ast.py",
    "chars": 62296,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2007 Neal Norwitz\n# Portions Copyright 2007 Google Inc.\n#\n# Licensed under the Apach"
  },
  {
    "path": "ext/gmock/scripts/generator/cpp/gmock_class.py",
    "chars": 8241,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2008 Google Inc.  All Rights Reserved.\n#\n# Licensed under the Apache License, Versio"
  },
  {
    "path": "ext/gmock/scripts/generator/cpp/gmock_class_test.py",
    "chars": 8135,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2009 Neal Norwitz All Rights Reserved.\n# Portions Copyright 2009 Google Inc. All Rig"
  },
  {
    "path": "ext/gmock/scripts/generator/cpp/keywords.py",
    "chars": 2004,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2007 Neal Norwitz\n# Portions Copyright 2007 Google Inc.\n#\n# Licensed under the Apach"
  },
  {
    "path": "ext/gmock/scripts/generator/cpp/tokenize.py",
    "chars": 9703,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2007 Neal Norwitz\n# Portions Copyright 2007 Google Inc.\n#\n# Licensed under the Apach"
  },
  {
    "path": "ext/gmock/scripts/generator/cpp/utils.py",
    "chars": 1153,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2007 Neal Norwitz\n# Portions Copyright 2007 Google Inc.\n#\n# Licensed under the Apach"
  },
  {
    "path": "ext/gmock/scripts/generator/gmock_gen.py",
    "chars": 1091,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2008 Google Inc. All Rights Reserved.\n#\n# Licensed under the Apache License, Version"
  },
  {
    "path": "ext/gmock/scripts/gmock-config.in",
    "chars": 11167,
    "preview": "#!/bin/sh\n\n# These variables are automatically filled in by the configure script.\nname=\"@PACKAGE_TARNAME@\"\nversion=\"@PAC"
  },
  {
    "path": "ext/gmock/scripts/gmock_doctor.py",
    "chars": 23590,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2008, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and bi"
  },
  {
    "path": "ext/gmock/scripts/upload.py",
    "chars": 51024,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2007 Google Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");"
  },
  {
    "path": "ext/gmock/scripts/upload_gmock.py",
    "chars": 2833,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2009, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and bi"
  },
  {
    "path": "ext/gmock/src/gmock-all.cc",
    "chars": 2150,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/src/gmock-cardinalities.cc",
    "chars": 5305,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/src/gmock-internal-utils.cc",
    "chars": 6702,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/src/gmock-matchers.cc",
    "chars": 18510,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/src/gmock-spec-builders.cc",
    "chars": 30226,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/src/gmock.cc",
    "chars": 6962,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/src/gmock_main.cc",
    "chars": 2593,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-actions_test.cc",
    "chars": 39642,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-cardinalities_test.cc",
    "chars": 12327,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-generated-actions_test.cc",
    "chars": 40838,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-generated-function-mockers_test.cc",
    "chars": 18153,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-generated-internal-utils_test.cc",
    "chars": 5438,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-generated-matchers_test.cc",
    "chars": 42428,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-internal-utils_test.cc",
    "chars": 22492,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-matchers_test.cc",
    "chars": 169327,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-more-actions_test.cc",
    "chars": 23864,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-nice-strict_test.cc",
    "chars": 13052,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-port_test.cc",
    "chars": 2020,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock-spec-builders_test.cc",
    "chars": 69687,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_all_test.cc",
    "chars": 2363,
    "preview": "// Copyright 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_ex_test.cc",
    "chars": 3167,
    "preview": "// Copyright 2013, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_leak_test.py",
    "chars": 4384,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2009, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and bi"
  },
  {
    "path": "ext/gmock/test/gmock_leak_test_.cc",
    "chars": 3273,
    "preview": "// Copyright 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_link2_test.cc",
    "chars": 1951,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_link_test.cc",
    "chars": 1951,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_link_test.h",
    "chars": 19022,
    "preview": "// Copyright 2009, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_output_test.py",
    "chars": 5999,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2008, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and bi"
  },
  {
    "path": "ext/gmock/test/gmock_output_test_.cc",
    "chars": 8186,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_output_test_golden.txt",
    "chars": 11892,
    "preview": "[ RUN      ] GMockOutputTest.ExpectedCall\n\nFILE:#: EXPECT_CALL(foo_, Bar2(0, _)) invoked\nStack trace:\n\nFILE:#: Mock func"
  },
  {
    "path": "ext/gmock/test/gmock_stress_test.cc",
    "chars": 9327,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_test.cc",
    "chars": 6325,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gmock/test/gmock_test_utils.py",
    "chars": 3684,
    "preview": "#!/usr/bin/env python\n#\n# Copyright 2006, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source and bi"
  },
  {
    "path": "ext/gtest/CHANGES",
    "chars": 6645,
    "preview": "Changes for 1.7.0:\n\n* New feature: death tests are supported on OpenBSD and in iOS\n  simulator now.\n* New feature: Googl"
  },
  {
    "path": "ext/gtest/CMakeLists.txt",
    "chars": 9606,
    "preview": "########################################################################\n# CMake build script for Google Test.\n#\n# To ru"
  },
  {
    "path": "ext/gtest/CONTRIBUTORS",
    "chars": 1351,
    "preview": "# This file contains a list of people who've made non-trivial\n# contribution to the Google C++ Testing Framework project"
  },
  {
    "path": "ext/gtest/LICENSE",
    "chars": 1475,
    "preview": "Copyright 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmod"
  },
  {
    "path": "ext/gtest/Makefile.am",
    "chars": 9739,
    "preview": "# Automake file\n\nACLOCAL_AMFLAGS = -I m4\n\n# Nonstandard package files for distribution\nEXTRA_DIST = \\\n  CHANGES \\\n  CONT"
  },
  {
    "path": "ext/gtest/README",
    "chars": 16090,
    "preview": "Google C++ Testing Framework\n============================\n\nhttp://code.google.com/p/googletest/\n\nOverview\n--------\n\nGoog"
  },
  {
    "path": "ext/gtest/build-aux/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "ext/gtest/cmake/internal_utils.cmake",
    "chars": 9548,
    "preview": "# Defines functions and macros useful for building Google Test and\n# Google Mock.\n#\n# Note:\n#\n# - This file will be run "
  },
  {
    "path": "ext/gtest/codegear/gtest.cbproj",
    "chars": 10621,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Prope"
  },
  {
    "path": "ext/gtest/codegear/gtest.groupproj",
    "chars": 2059,
    "preview": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <ProjectGuid>{c1d923e0-6c"
  },
  {
    "path": "ext/gtest/codegear/gtest_all.cc",
    "chars": 1903,
    "preview": "// Copyright 2009, Google Inc.\r\n// All rights reserved.\r\n//\r\n// Redistribution and use in source and binary forms, with "
  },
  {
    "path": "ext/gtest/codegear/gtest_link.cc",
    "chars": 2033,
    "preview": "// Copyright 2009, Google Inc.\r\n// All rights reserved.\r\n//\r\n// Redistribution and use in source and binary forms, with "
  },
  {
    "path": "ext/gtest/codegear/gtest_main.cbproj",
    "chars": 8660,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Prope"
  },
  {
    "path": "ext/gtest/codegear/gtest_unittest.cbproj",
    "chars": 8776,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Prope"
  },
  {
    "path": "ext/gtest/configure.ac",
    "chars": 2574,
    "preview": "m4_include(m4/acx_pthread.m4)\n\n# At this point, the Xcode project assumes the version string will be three\n# integers se"
  },
  {
    "path": "ext/gtest/include/gtest/gtest-death-test.h",
    "chars": 11523,
    "preview": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gtest/include/gtest/gtest-message.h",
    "chars": 9186,
    "preview": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gtest/include/gtest/gtest-param-test.h",
    "chars": 75864,
    "preview": "// This file was GENERATED by command:\n//     pump.py gtest-param-test.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// Copyright 20"
  },
  {
    "path": "ext/gtest/include/gtest/gtest-param-test.h.pump",
    "chars": 18796,
    "preview": "$$ -*- mode: c++; -*-\n$var n = 50  $$ Maximum length of Values arguments we want to support.\n$var maxtuple = 10  $$ Maxi"
  },
  {
    "path": "ext/gtest/include/gtest/gtest-printers.h",
    "chars": 31609,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gtest/include/gtest/gtest-spi.h",
    "chars": 9952,
    "preview": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  },
  {
    "path": "ext/gtest/include/gtest/gtest-test-part.h",
    "chars": 6509,
    "preview": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or "
  }
]

// ... and 1654 more files (download for full content)

About this extraction

This page contains the full source code of the mysql/mysql-router GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1854 files (27.1 MB), approximately 7.2M tokens, and a symbol index with 18479 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!