/*
 * 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_dnn_medium_int8
 * Source: https://github.com/ARM-software/ML-zoo/tree/22.02/models/keyword_spotting/dnn_medium/tflite_int8
 * 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"))) = {
    0xd5, 0xd6, 0xf2, 0x8b, 0x69, 0xf6, 0x5a, 0x0c, 0xd1, 0xeb, 0xcd, 0x8a, 0xdb, 0x04, 0xd2, 0x8b, 0x3a, 0x79,
    0x85, 0x5e, 0x44, 0x96, 0x44, 0x4c, 0x1c, 0x79, 0xf2, 0xa7, 0x8c, 0xf8, 0x41, 0x5b, 0xf6, 0xf8, 0x0e, 0xc8,
    0xad, 0xab, 0xe6, 0x54, 0x41, 0xbc, 0x8e, 0x44, 0x42, 0xca, 0x9a, 0x8b, 0x0f, 0xc0, 0xc5, 0x24, 0x3c, 0x55,
    0xc5, 0x6e, 0x9b, 0x98, 0x7f, 0x54, 0xad, 0x8d, 0x6c, 0x04, 0xa4, 0xbb, 0x29, 0xb8, 0xf6, 0x94, 0xac, 0x1c,
    0x66, 0x9f, 0x81, 0x95, 0x1d, 0x8e, 0xe1, 0xf1, 0x7c, 0xa7, 0x12, 0x03, 0x9f, 0x3c, 0x02, 0x29, 0x70, 0x83,
    0x81, 0x89, 0xa1, 0x71, 0x61, 0x26, 0xfb, 0x34, 0x82, 0x28, 0x3e, 0xf4, 0xf5, 0x72, 0x92, 0xcc, 0xf9, 0x90,
    0xc9, 0x9f, 0x7a, 0xf9, 0x95, 0x21, 0x03, 0x2d, 0x8f, 0x28, 0xe8, 0x77, 0x4b, 0xa6, 0x04, 0x44, 0x1e, 0xfa,
    0x43, 0x3e, 0x62, 0x51, 0x34, 0x0d, 0x6a, 0x05, 0xf0, 0x04, 0xf1, 0x6d, 0xa7, 0xec, 0xd6, 0x1b, 0xc6, 0x87,
    0x0a, 0xc9, 0x71, 0x72, 0x23, 0x0d, 0xad, 0xf7, 0x16, 0x08, 0xa7, 0xc8, 0xe5, 0x2a, 0xd8, 0x71, 0x75, 0xa2,
    0xab, 0x1b, 0xe3, 0xf0, 0xd2, 0xc8, 0xf2, 0x4b, 0x4b, 0xad, 0xf5, 0x34, 0x00, 0xe6, 0x26, 0x68, 0x24, 0x76,
    0x21, 0x90, 0xc5, 0x35, 0x6c, 0x3e, 0x7a, 0xf1, 0x53, 0xee, 0x90, 0x47, 0x4b, 0xf2, 0xfa, 0xa7, 0x76, 0x31,
    0x10, 0xbd, 0xf0, 0x04, 0x59, 0x45, 0x86, 0x0c, 0x6b, 0x72, 0xb5, 0x59, 0x0c, 0x05, 0x67, 0xfc, 0x8c, 0x80,
    0x82, 0x86, 0xbb, 0xbe, 0xbf, 0x5f, 0x80, 0x6e, 0x17, 0x2f, 0x6c, 0x5b, 0x7b, 0x04, 0xe3, 0x42, 0xbf, 0xf4,
    0xac, 0x03, 0xdd, 0x18, 0x11, 0x61, 0xe8, 0x6f, 0x58, 0xc8, 0xa0, 0xef, 0x8e, 0x16, 0x2f, 0xc5};
