/*
@licstart  The following is the entire license notice for the
JavaScript code in this file.

Copyright (C) 1997-2019 by Dimitri van Heesch

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

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.

@licend  The above is the entire license notice
for the JavaScript code in this file
*/
var NAVTREE =
[
  [ "Arm NN", "index.html", [
    [ "Quick Start Guide", "quickstart.html", "quickstart" ],
    [ "Arm NN Operators", "operator_list.html", [
      [ "Arm NN Operators", "operator_list.html#S5_1_operator_list", null ]
    ] ],
    [ "Build Guides", "buildguides.html", "buildguides" ],
    [ "Contribution Guides", "contribguides.html", "contribguides" ],
    [ "Software Components", "swtools.html", "swtools" ],
    [ "Frequently asked questions", "md_docs__f_a_q.html", null ],
    [ "How to use the Android NDK to build Arm NN", "md_shim__build_guide_shim_support_library.html", null ],
    [ "Contribution Guidelines", "md__c_o_n_t_r_i_b_u_t_i_n_g.html", null ],
    [ "Namespaces", "namespaces.html", [
      [ "Namespace List", "namespaces.html", "namespaces_dup" ],
      [ "Namespace Members", "namespacemembers.html", [
        [ "All", "namespacemembers.html", "namespacemembers_dup" ],
        [ "Functions", "namespacemembers_func.html", "namespacemembers_func" ],
        [ "Variables", "namespacemembers_vars.html", null ],
        [ "Typedefs", "namespacemembers_type.html", null ],
        [ "Enumerations", "namespacemembers_enum.html", null ]
      ] ]
    ] ],
    [ "Classes", "annotated.html", [
      [ "Class List", "annotated.html", "annotated_dup" ],
      [ "Class Index", "classes.html", null ],
      [ "Class Hierarchy", "hierarchy.html", "hierarchy" ],
      [ "Class Members", "functions.html", [
        [ "All", "functions.html", "functions_dup" ],
        [ "Functions", "functions_func.html", "functions_func" ],
        [ "Variables", "functions_vars.html", "functions_vars" ],
        [ "Typedefs", "functions_type.html", "functions_type" ],
        [ "Enumerations", "functions_enum.html", null ],
        [ "Enumerator", "functions_eval.html", null ],
        [ "Related Functions", "functions_rela.html", null ]
      ] ]
    ] ],
    [ "Files", "files.html", [
      [ "File List", "files.html", "files_dup" ],
      [ "File Members", "globals.html", [
        [ "All", "globals.html", "globals_dup" ],
        [ "Functions", "globals_func.html", null ],
        [ "Variables", "globals_vars.html", null ],
        [ "Typedefs", "globals_type.html", null ],
        [ "Macros", "globals_defs.html", null ]
      ] ]
    ] ],
    [ "Examples", "examples.html", "examples" ]
  ] ]
];

var NAVTREEINDEX =
[
"_abs_8hpp.html",
"_broadcast_to_layer_8cpp.html",
"_cl_fully_connected_workload_8hpp.html",
"_cl_subtraction_workload_8cpp_source.html",
"_create_workload_8hpp.html",
"_fill_8cpp.html#a88bebdfe6309aa2cd6831cfa73c296f0",
"_heap_profiling_8hpp.html",
"_layers_fwd_8hpp.html#af44c8ebb1b55f4c42cc301d0bf030aa5",
"_neon_arg_min_max_workload_8cpp.html#a61d1f39297fec6e3062e4047dc5f236e",
"_neon_multiplication_workload_8cpp.html#ad512520e809bfed4fbd3db9fbc241263",
"_network_8hpp.html#a839ad76f1f52a70b540805b231f05d9c",
"_quantize_operator_8cpp.html#a0c01e0628e152677de40807856e20d15",
"_ref_prelu_workload_8hpp.html",
"_serializer_utils_8hpp.html#a1c88cccaeb232c6fe8022c7006bb21bc",
"_tensor_utils_8hpp.html#a9ef6d3649c5d3aa16a9839e3e2ad659b",
"_types_8hpp.html#a56943a0946e5f15e5e58054b8e7a04a4a3d6c9ac08ada31c184094bbc67afe00d",
"_verification_helpers_8hpp.html#a479b2821a7a2cbb8fa8eb7f60a47065d",
"classarmnn_1_1_base_workload.html#aaff95a48875d8fb4a616352906660ca9",
"classarmnn_1_1_cl_import_sub_tensor_handle.html#a19aa18d78d5ac31e3a3c8f782f0e8606",
"classarmnn_1_1_cl_tensor_decorator.html#a2c1e7969fd5c12de69807bf645758f4c",
"classarmnn_1_1_dot_attribute_set.html",
"classarmnn_1_1_gpu_fsa_memory_manager_1_1_pool.html#ab91dc804181f48b0b445ac1299c36c05",
"classarmnn_1_1_i_gpu_acc_tuned_parameters.html#a45a36d69dc436c159d724481d5e9d34a",
"classarmnn_1_1_input_layer.html#a55eb3d90093b47ba36a4c6467bbb975d",
"classarmnn_1_1_layer_with_parameters.html",
"classarmnn_1_1_neon_exp_workload.html",
"classarmnn_1_1_neon_tensor_handle.html#a19aa18d78d5ac31e3a3c8f782f0e8606",
"classarmnn_1_1_optimizer_options_opaque.html#a58fbf98b638ebabb8bad26760f20a554",
"classarmnn_1_1_q_a_symm_s8_decoder.html",
"classarmnn_1_1_ref_layer_support.html#a227f01f31ce42d62f160d49d5d044a3b",
"classarmnn_1_1_resize_layer.html#a65ca562c882ad619684445a1402f415a",
"classarmnn_1_1_tensor_info.html#a71975fcec1464d639f1a78f73164d1bd",
"classarmnn_1_1experimental_1_1_i_working_mem_handle.html#a43a1da35a1d1d6f78f656717736ad99c",
"classarmnn_onnx_parser_1_1_i_onnx_parser.html#aed9ec6b80a244474caefd93f4c24df2f",
"files.html",
"opaque_2src_2armnn__external__delegate_8cpp_source.html",
"structarmnn_1_1_convolution2d_descriptor.html#aa3c6a77a963a98ccb8ea7b8fd008a8c1",
"structarmnn_1_1_layer_type_of_impl_3_01_layer_type_1_1_arg_min_max_01_4.html#ae7ce1387512f9a73af3a57ab6fea3cd5",
"structarmnn_1_1_lstm_input_params_info.html#ac81393ef433b0c7c337f9f0d55f41ae4",
"structarmnn_1_1_program_builder.html#a169393e6b66f77283aed49c72b0b6478",
"structarmnn_1_1_runtime_impl.html#a67c5b82a7e34c291702233eb716cf96f",
"structarmnn_1_1_views_descriptor.html#ab78e6fe963508c1ac5c00d04bb3361a3"
];

var SYNCONMSG = 'click to disable panel synchronisation';
var SYNCOFFMSG = 'click to enable panel synchronisation';