/*
 * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the License); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************************************************************************************
 * Model: keyword_spotting_ds_dnn_large_clustered_int8
 * Source: https://github.com/ARM-software/ML-zoo/blob/22.02/MODEL_LIST.md
 * Hexdump: python3 -c 'import numpy;i=numpy.load("input.npy");i.tofile("input.bin");' && xxd -i input.bin > input.h
 ******************************************************************************************************************/

unsigned char inputData[] __attribute__((aligned(16), section("input_data_sec"))) = {
    0xe5, 0x4f, 0x7a, 0xab, 0x06, 0xef, 0x6e, 0xfa, 0x67, 0x82, 0xf3, 0x06, 0x49, 0x79, 0xe2, 0x0e, 0x1d, 0x6e, 0x6f,
    0x6f, 0xd2, 0xb5, 0x02, 0xc2, 0x40, 0xb5, 0xf9, 0x31, 0xc8, 0x9c, 0xd8, 0x0c, 0xe3, 0x0f, 0x1c, 0x5a, 0xb5, 0x56,
    0x7e, 0x09, 0xd7, 0x13, 0x9b, 0xf6, 0x34, 0xa7, 0x41, 0x91, 0x75, 0x67, 0xa1, 0x17, 0x4a, 0x8a, 0x86, 0x49, 0xe7,
    0xbf, 0x78, 0x40, 0x44, 0x0e, 0xaf, 0xa4, 0x3d, 0x24, 0x76, 0x9a, 0xef, 0x5e, 0x7b, 0xfc, 0x7a, 0x09, 0x13, 0x08,
    0xdf, 0xef, 0x13, 0x7a, 0x25, 0x06, 0x98, 0x6a, 0xd0, 0xea, 0xbd, 0xd9, 0x4c, 0x6b, 0xec, 0xee, 0xa1, 0x49, 0xd6,
    0x44, 0x57, 0x88, 0x8e, 0x62, 0xf8, 0xc8, 0x8d, 0xfe, 0x80, 0x79, 0xc1, 0x57, 0x09, 0x82, 0xcc, 0xa7, 0x19, 0x9a,
    0x58, 0xc5, 0x97, 0xe6, 0x13, 0xd1, 0xd1, 0x13, 0x35, 0xd0, 0x1e, 0x3b, 0x8f, 0x67, 0x7d, 0xa3, 0x1a, 0x69, 0xad,
    0xc8, 0xf1, 0x76, 0x02, 0x7e, 0x45, 0xf6, 0x59, 0x95, 0xd8, 0xa3, 0x9d, 0x83, 0xfd, 0x48, 0x74, 0x8b, 0x86, 0x1f,
    0xad, 0x5b, 0x4d, 0xe8, 0xb6, 0x39, 0xae, 0x5a, 0x95, 0xbf, 0xc2, 0x9f, 0x80, 0xae, 0x67, 0x71, 0xb9, 0x79, 0xbf,
    0x3a, 0xf8, 0xe1, 0x4d, 0xf9, 0x5b, 0x6b, 0xe5, 0xf8, 0xe0, 0xdf, 0x7c, 0x8c, 0x25, 0x98, 0xf2, 0x82, 0xbb, 0xd8,
    0x45, 0xe6, 0xc7, 0x78, 0x11, 0x48, 0x95, 0x85, 0xbd, 0xdf, 0x38, 0x46, 0x7c, 0xa3, 0x59, 0x53, 0xc1, 0xeb, 0x59,
    0xe9, 0x75, 0x2f, 0x7c, 0x68, 0x6a, 0x00, 0xf0, 0x5b, 0x61, 0x36, 0xbf, 0x33, 0x23, 0x80, 0xe3, 0xf5, 0xaa, 0x2d,
    0x68, 0x98, 0x2f, 0x48, 0xa3, 0xbc, 0x64, 0xd9, 0x68, 0xed, 0x39, 0xc1, 0x18, 0x31, 0x15, 0x88, 0xfe, 0x72, 0x60,
    0x59, 0xd0, 0xde, 0x73, 0x61, 0x76, 0xfc, 0x9e, 0x9c, 0x80, 0xce, 0xea, 0x51, 0xfe, 0x90, 0x71, 0x3f, 0xa1, 0xcb,
    0xc4, 0x79, 0x48, 0x61, 0x5b, 0xe0, 0xe2, 0x98, 0xe4, 0x6c, 0x3a, 0x28, 0xca, 0xc2, 0x5f, 0x8b, 0x8d, 0x1e, 0x75,
    0x9a, 0xde, 0x20, 0x9c, 0x67, 0x36, 0x14, 0x37, 0xf6, 0xf2, 0x08, 0xc9, 0xbd, 0x21, 0xf8, 0x54, 0x01, 0x34, 0xd4,
    0x8d, 0xef, 0xb8, 0xe4, 0xc0, 0x14, 0x4e, 0xad, 0x25, 0x5e, 0x14, 0x4f, 0x7c, 0x6d, 0x9f, 0xc8, 0x35, 0xa6, 0xbc,
    0x12, 0x52, 0xa0, 0x22, 0xe4, 0xf8, 0xfc, 0x95, 0x8f, 0x43, 0x0b, 0x7b, 0xf9, 0xc4, 0xc5, 0xc0, 0xf3, 0x44, 0x06,
    0x30, 0x38, 0x57, 0x1f, 0xf9, 0x02, 0x4f, 0x64, 0x7c, 0xfd, 0xed, 0x8f, 0xbb, 0xad, 0xae, 0x2b, 0xef, 0xe3, 0xfe,
    0xd7, 0xc9, 0x3d, 0x19, 0x76, 0x18, 0x1d, 0x12, 0xd7, 0xa2, 0xac, 0xb8, 0x5d, 0xbf, 0xc1, 0x7e, 0xd6, 0x41, 0x57,
    0x9b, 0xeb, 0x12, 0x1f, 0xa9, 0x79, 0x9c, 0x3a, 0xd1, 0x7f, 0x94, 0x0a, 0x52, 0xe1, 0xbf, 0x6e, 0xb5, 0x3d, 0xe5,
    0xbe, 0x22, 0xc4, 0xcb, 0xf1, 0x0c, 0x32, 0xeb, 0x98, 0xdf, 0x00, 0xea, 0x14, 0xf0, 0xa5, 0x2f, 0x21, 0x41, 0xf8,
    0xee, 0xf6, 0x10, 0x0f, 0x7e, 0x8a, 0xe3, 0x2b, 0xb7, 0x42, 0xdb, 0x88, 0x97, 0xd4, 0x3f, 0x0c, 0x52, 0x6d, 0x2e,
    0xed, 0x76, 0x37, 0xca, 0xaf, 0xfb, 0x9d, 0xb1, 0x1c, 0x6b, 0xb5, 0x71, 0xee, 0x72, 0xc1, 0xb6, 0x0f, 0x3a, 0xf3,
    0x38, 0x3b, 0xa3, 0x75, 0xbd, 0xf0, 0xf6, 0x86, 0x1a, 0xbc, 0x1c, 0x6a, 0x43, 0xe5, 0xcb, 0x7d, 0xd4, 0xf0, 0x5b,
    0xbe, 0xb1, 0x69, 0x1f, 0x1b, 0x9c, 0xdf, 0x19, 0xa3, 0x2e, 0xd6, 0x9b, 0xed, 0x90, 0x92};
