diff --git a/Include/arm_nn_types.h b/Include/arm_nn_types.h index affc1d5f..24038873 100644 --- a/Include/arm_nn_types.h +++ b/Include/arm_nn_types.h @@ -22,8 +22,8 @@ * Description: Public header file to contain the CMSIS-NN structs for the * TensorFlowLite micro compliant functions * - * $Date: 26 March 2024 - * $Revision: V.3.1.0 + * $Date: 11 April 2024 + * $Revision: V.3.2.0 * * Target : Arm(R) M-Profile Architecture * -------------------------------------------------------------------- */ @@ -31,6 +31,7 @@ #ifndef ARM_NN_TYPES_H #define ARM_NN_TYPES_H +#include #include /** @@ -70,6 +71,13 @@ typedef struct int32_t size; /**< Buffer size */ } cmsis_nn_context; +/** CMSIS-NN object used to hold bias data for int16 variants. */ +typedef struct +{ + const void *data; /**< Pointer to bias data */ + const bool is_int32_bias; /**< Indicate type of bias data. True means int32 else int64 */ +} cmsis_nn_bias_data; + /** CMSIS-NN object to contain the dimensions of the tensors */ typedef struct { diff --git a/Include/arm_nnfunctions.h b/Include/arm_nnfunctions.h index 43211177..5e8c5bd5 100644 --- a/Include/arm_nnfunctions.h +++ b/Include/arm_nnfunctions.h @@ -21,9 +21,8 @@ * Title: arm_nnfunctions.h * Description: Public header file for CMSIS NN Library * - * $Date: 10 April 2024 - * $Revision: V.15.2.0 - + * $Date: 23 April 2024 + * $Revision: V.16.0.0 * * Target : Arm(R) M-Profile Architecture * -------------------------------------------------------------------- */ @@ -250,7 +249,8 @@ int32_t arm_convolve_wrapper_s8_get_buffer_size_dsp(const cmsis_nn_conv_params * * spatial filter dimensions * @param[in] filter_data Filter data pointer. Data type: int8 * @param[in] bias_dims Bias tensor dimensions. Format: [C_OUT] - * @param[in] bias_data Bias data pointer. Data type: int64 + * @param[in] bias_data Struct with optional bias data pointer. Bias data type can be int64 or int32 depending + * flag in struct. * @param[in] output_dims Output tensor dimensions. Format: [N, H, W, C_OUT] * @param[out] output_data Output data pointer. Data type: int16 * @@ -267,7 +267,7 @@ arm_cmsis_nn_status arm_convolve_wrapper_s16(const cmsis_nn_context *ctx, const cmsis_nn_dims *filter_dims, const int8_t *filter_data, const cmsis_nn_dims *bias_dims, - const int64_t *bias_data, + const cmsis_nn_bias_data *bias_data, const cmsis_nn_dims *output_dims, int16_t *output_data); @@ -521,7 +521,8 @@ int32_t arm_transpose_conv_s8_get_buffer_size_mve(const cmsis_nn_dims *input_dim * spatial filter dimensions * @param[in] filter_data Filter data pointer. Data type: int8 * @param[in] bias_dims Bias tensor dimensions. Format: [C_OUT] - * @param[in] bias_data Optional bias data pointer. Data type: int64 + * @param[in] bias_data Struct with optional bias data pointer. Bias data type can be int64 or int32 depending + * flag in struct. * @param[in] output_dims Output tensor dimensions. Format: [N, H, W, C_OUT] * @param[out] output_data Output data pointer. Data type: int16 * @@ -542,7 +543,7 @@ arm_cmsis_nn_status arm_convolve_s16(const cmsis_nn_context *ctx, const cmsis_nn_dims *filter_dims, const int8_t *filter_data, const cmsis_nn_dims *bias_dims, - const int64_t *bias_data, + const cmsis_nn_bias_data *bias_data, const cmsis_nn_dims *output_dims, int16_t *output_data); diff --git a/Include/arm_nnsupportfunctions.h b/Include/arm_nnsupportfunctions.h index 6e0305f0..d739f512 100644 --- a/Include/arm_nnsupportfunctions.h +++ b/Include/arm_nnsupportfunctions.h @@ -21,8 +21,8 @@ * Title: arm_nnsupportfunctions.h * Description: Public header file of support functions for CMSIS NN Library * - * $Date: 16 April 2024 - * $Revision: V.20.3.0 + * $Date: 23 April 2024 + * $Revision: V.21.0.0 * * Target : Arm(R) M-Profile Architecture * -------------------------------------------------------------------- */ @@ -264,12 +264,14 @@ int8_t *arm_nn_mat_mult_s8(const int8_t *input_row, * @param[in] input_a pointer to operand A * @param[in] input_b pointer to operand B, always consists of 2 vectors. * @param[in] output_ch number of rows of A - * @param[in] out_shift pointer to per output channel requantization shift parameter. - * @param[in] out_mult pointer to per output channel requantization multiplier parameter. + * @param[in] out_shift pointer to per output channel requantization shift parameter. + * @param[in] out_mult pointer to per output channel requantization multiplier parameter. * @param[in] activation_min minimum value to clamp the output to. Range : int16 * @param[in] activation_max maximum value to clamp the output to. Range : int16 * @param[in] num_col_a number of columns of A - * @param[in] output_bias per output channel bias. Range : int64 + * @param[in] bias_data pointer to struct with bias vector. The length of this vector is equal to the number + * of output columns (or RHS input rows). The vector can be int32 or int64 indicated by a + * flag in the struct. * @param[in,out] out_0 pointer to output * @return The function returns one of the two * 1. The incremented output pointer for a successful operation or @@ -288,7 +290,7 @@ int16_t *arm_nn_mat_mult_kernel_s16(const int8_t *input_a, const int32_t activation_min, const int32_t activation_max, const int32_t num_col_a, - const int64_t *const output_bias, + const cmsis_nn_bias_data *const bias_data, int16_t *out_0); /** @@ -497,8 +499,9 @@ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s8(const int8_t *lhs, * * @param[in] lhs Pointer to the LHS input matrix * @param[in] rhs Pointer to the RHS input matrix - * @param[in] bias Pointer to the bias vector. The length of this vector is equal to the number of - * output columns (or RHS input rows) + * @param[in] bias_data Pointer to struct with bias vector. The length of this vector is equal to the number + * of output columns (or RHS input rows). The vector can be int32 or int64 indicated by a + * flag in the struct. * @param[out] dst Pointer to the output matrix with "m" rows and "n" columns * @param[in] dst_multipliers Pointer to the multipliers vector needed for the per-channel requantization. * The length of this vector is equal to the number of output columns (or RHS input @@ -519,7 +522,7 @@ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s8(const int8_t *lhs, */ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s16(const int16_t *lhs, const int8_t *rhs, - const int64_t *bias, + const cmsis_nn_bias_data *bias_data, int16_t *dst, const int32_t *dst_multipliers, const int32_t *dst_shifts, diff --git a/Source/ConvolutionFunctions/arm_convolve_s16.c b/Source/ConvolutionFunctions/arm_convolve_s16.c index 08e21663..addfbb55 100644 --- a/Source/ConvolutionFunctions/arm_convolve_s16.c +++ b/Source/ConvolutionFunctions/arm_convolve_s16.c @@ -21,8 +21,8 @@ * Title: arm_convolve_s16.c * Description: s16 version of convolution. * - * $Date: 22 March 2024 - * $Revision: V.3.0.0 + * $Date: 22 April 2024 + * $Revision: V.4.0.0 * * Target : Arm(R) M-Profile Architecture * @@ -55,7 +55,7 @@ arm_cmsis_nn_status arm_convolve_s16(const cmsis_nn_context *ctx, const cmsis_nn_dims *filter_dims, const int8_t *filter_data, const cmsis_nn_dims *bias_dims, - const int64_t *bias_data, + const cmsis_nn_bias_data *bias_data, const cmsis_nn_dims *output_dims, int16_t *output_data) { @@ -200,6 +200,9 @@ arm_cmsis_nn_status arm_convolve_s16(const cmsis_nn_context *ctx, im2col = buffer_a; #else // #if defined(ARM_MATH_MVEI) + const int64_t *bias_s64 = (const int64_t *)bias_data->data; + const int32_t *bias_s32 = (const int32_t *)bias_data->data; + const bool is_int32_bias = bias_data->is_int32_bias; const int8_t *ker_a = filter_data; int i; @@ -235,6 +238,7 @@ arm_cmsis_nn_status arm_convolve_s16(const cmsis_nn_context *ctx, uint16_t col_count = rhs_cols; #endif + while (col_count) { int8_t ker_a1 = *ker_a++; @@ -242,21 +246,35 @@ arm_cmsis_nn_status arm_convolve_s16(const cmsis_nn_context *ctx, sum += ker_a1 * ip_b1; col_count--; } - if (bias_data) + + if (is_int32_bias) { - int32_t reduced_multiplier = REDUCE_MULTIPLIER(output_mult[i]); - int64_t acc_64 = sum + bias_data[i]; - sum = arm_nn_requantize_s64(acc_64, reduced_multiplier, output_shift[i]); + if (bias_s32) + { + sum += bias_s32[i]; + } + + sum = arm_nn_requantize(sum, output_mult[i], output_shift[i]); } else { - sum = arm_nn_requantize(sum, output_mult[i], output_shift[i]); + int64_t acc_64 = sum; + + if (bias_s64) + { + acc_64 += bias_s64[i]; + } + + int32_t reduced_multiplier = REDUCE_MULTIPLIER(output_mult[i]); + sum = arm_nn_requantize_s64(acc_64, reduced_multiplier, output_shift[i]); } + sum = MAX(sum, out_activation_min); sum = MIN(sum, out_activation_max); *out++ = (int16_t)sum; } lhs_rows = 0; + #endif // #if defined(ARM_MATH_MVEI) } diff --git a/Source/ConvolutionFunctions/arm_convolve_wrapper_s16.c b/Source/ConvolutionFunctions/arm_convolve_wrapper_s16.c index 0d6d8832..479154fb 100644 --- a/Source/ConvolutionFunctions/arm_convolve_wrapper_s16.c +++ b/Source/ConvolutionFunctions/arm_convolve_wrapper_s16.c @@ -22,8 +22,8 @@ * Description: s16 convolution layer wrapper function with the main purpose to call the optimal kernel available in * cmsis-nn to perform the convolution. * - * $Date: 12 March 2024 - * $Revision: V.2.2.0 + * $Date: 23 April 2024 + * $Revision: V.3.0.0 * * Target : Arm(R) M-Profile Architecture * @@ -55,7 +55,7 @@ arm_cmsis_nn_status arm_convolve_wrapper_s16(const cmsis_nn_context *ctx, const cmsis_nn_dims *filter_dims, const int8_t *filter_data, const cmsis_nn_dims *bias_dims, - const int64_t *bias_data, + const cmsis_nn_bias_data *bias_data, const cmsis_nn_dims *output_dims, int16_t *output_data) { diff --git a/Source/ConvolutionFunctions/arm_nn_mat_mult_kernel_s16.c b/Source/ConvolutionFunctions/arm_nn_mat_mult_kernel_s16.c index 9e9c5337..8cb0b481 100644 --- a/Source/ConvolutionFunctions/arm_nn_mat_mult_kernel_s16.c +++ b/Source/ConvolutionFunctions/arm_nn_mat_mult_kernel_s16.c @@ -22,8 +22,8 @@ * Title: arm_nn_mat_mult_kernel_s16.c * Description: Matrix-multiplication function for 16 bits convolution * - * $Date: 22 March 2024 - * $Revision: V.2.0.0 + * $Date: 12 April 2024 + * $Revision: V.3.0.0 * * Target : Arm(R) M-Profile Architecture * -------------------------------------------------------------------- */ @@ -54,18 +54,20 @@ int16_t *arm_nn_mat_mult_kernel_s16(const int8_t *input_a, const int32_t activation_min, const int32_t activation_max, const int32_t num_col_a, - const int64_t *const output_bias, + const cmsis_nn_bias_data *const bias_data, int16_t *out_0) { #if !defined(ARM_MATH_MVEI) - const int32_t num_col_a_fast = num_col_a > MAX_COL_COUNT ? MAX_COL_COUNT : num_col_a; + const int64_t *bias_s64 = (const int64_t *)bias_data->data; + const int32_t *bias_s32 = (const int32_t *)bias_data->data; + const bool is_int32_bias = bias_data->is_int32_bias; + + const int32_t num_col_a_fast = is_int32_bias ? num_col_a : (num_col_a > MAX_COL_COUNT ? MAX_COL_COUNT : num_col_a); const int32_t num_col_a_slow = num_col_a - MAX_COL_COUNT; int16_t *out_1 = out_0 + output_ch; - const int64_t *bias = output_bias; int32_t row_count = output_ch / 2; const int8_t *ip_a0 = input_a; - int32_t reduced_multiplier; /* This loop over rows in A */ while (row_count) @@ -83,11 +85,6 @@ int16_t *arm_nn_mat_mult_kernel_s16(const int8_t *input_a, int32_t ch_1_out_0 = 0; int32_t ch_1_out_1 = 0; - int64_t ch_0_out_0_s64 = 0; - int64_t ch_0_out_1_s64 = 0; - int64_t ch_1_out_0_s64 = 0; - int64_t ch_1_out_1_s64 = 0; - #if defined(ARM_MATH_DSP) uint16_t col_count = num_col_a_fast / 4; @@ -135,65 +132,104 @@ int16_t *arm_nn_mat_mult_kernel_s16(const int8_t *input_a, col_count--; } - ch_0_out_0_s64 = ch_0_out_0; - ch_0_out_1_s64 = ch_0_out_1; - ch_1_out_0_s64 = ch_1_out_0; - ch_1_out_1_s64 = ch_1_out_1; - - if (num_col_a > MAX_COL_COUNT) + if (is_int32_bias) { - col_count = num_col_a_slow; - while (col_count) + if (bias_s32) { - int8_t a0 = *ip_a0++; - int16_t b0 = *ip_b0++; - int8_t a1 = *ip_a1++; - int16_t b1 = *ip_b1++; - - ch_0_out_0_s64 += a0 * b0; - ch_0_out_1_s64 += a0 * b1; - ch_1_out_0_s64 += a1 * b0; - ch_1_out_1_s64 += a1 * b1; - col_count--; + ch_0_out_0 += *bias_s32; + ch_0_out_1 += *bias_s32++; + ch_1_out_0 += *bias_s32; + ch_1_out_1 += *bias_s32++; } - } - if (bias) - { - ch_0_out_0_s64 += *bias; - ch_0_out_1_s64 += *bias++; - ch_1_out_0_s64 += *bias; - ch_1_out_1_s64 += *bias++; + ch_0_out_0 = arm_nn_requantize(ch_0_out_0, *out_mult, *out_shift); + ch_0_out_1 = arm_nn_requantize(ch_0_out_1, *out_mult, *out_shift); + out_mult++; + out_shift++; + + ch_0_out_0 = MAX(ch_0_out_0, activation_min); + ch_0_out_0 = MIN(ch_0_out_0, activation_max); + *out_0++ = (int16_t)ch_0_out_0; + + ch_0_out_1 = MAX(ch_0_out_1, activation_min); + ch_0_out_1 = MIN(ch_0_out_1, activation_max); + *out_1++ = (int16_t)ch_0_out_1; + + ch_1_out_0 = arm_nn_requantize(ch_1_out_0, *out_mult, *out_shift); + ch_1_out_1 = arm_nn_requantize(ch_1_out_1, *out_mult, *out_shift); + out_mult++; + out_shift++; + + ch_1_out_0 = MAX(ch_1_out_0, activation_min); + ch_1_out_0 = MIN(ch_1_out_0, activation_max); + *out_0++ = (int16_t)ch_1_out_0; + + ch_1_out_1 = MAX(ch_1_out_1, activation_min); + ch_1_out_1 = MIN(ch_1_out_1, activation_max); + *out_1++ = (int16_t)ch_1_out_1; } + else + { + int64_t ch_0_out_0_s64 = ch_0_out_0; + int64_t ch_0_out_1_s64 = ch_0_out_1; + int64_t ch_1_out_0_s64 = ch_1_out_0; + int64_t ch_1_out_1_s64 = ch_1_out_1; + + if (num_col_a > MAX_COL_COUNT) + { + col_count = num_col_a_slow; + while (col_count) + { + int8_t a0 = *ip_a0++; + int16_t b0 = *ip_b0++; + int8_t a1 = *ip_a1++; + int16_t b1 = *ip_b1++; + + ch_0_out_0_s64 += a0 * b0; + ch_0_out_1_s64 += a0 * b1; + ch_1_out_0_s64 += a1 * b0; + ch_1_out_1_s64 += a1 * b1; + col_count--; + } + } + + if (bias_s64) + { + ch_0_out_0_s64 += *bias_s64; + ch_0_out_1_s64 += *bias_s64++; + ch_1_out_0_s64 += *bias_s64; + ch_1_out_1_s64 += *bias_s64++; + } - reduced_multiplier = REDUCE_MULTIPLIER(*out_mult); - ch_0_out_0 = arm_nn_requantize_s64(ch_0_out_0_s64, reduced_multiplier, *out_shift); - ch_0_out_1 = arm_nn_requantize_s64(ch_0_out_1_s64, reduced_multiplier, *out_shift); - out_mult++; - out_shift++; + int32_t reduced_multiplier = REDUCE_MULTIPLIER(*out_mult); + ch_0_out_0 = arm_nn_requantize_s64(ch_0_out_0_s64, reduced_multiplier, *out_shift); + ch_0_out_1 = arm_nn_requantize_s64(ch_0_out_1_s64, reduced_multiplier, *out_shift); + out_mult++; + out_shift++; - reduced_multiplier = REDUCE_MULTIPLIER(*out_mult); - ch_1_out_0 = arm_nn_requantize_s64(ch_1_out_0_s64, reduced_multiplier, *out_shift); - ch_1_out_1 = arm_nn_requantize_s64(ch_1_out_1_s64, reduced_multiplier, *out_shift); + reduced_multiplier = REDUCE_MULTIPLIER(*out_mult); + ch_1_out_0 = arm_nn_requantize_s64(ch_1_out_0_s64, reduced_multiplier, *out_shift); + ch_1_out_1 = arm_nn_requantize_s64(ch_1_out_1_s64, reduced_multiplier, *out_shift); - ch_0_out_0 = MAX(ch_0_out_0, activation_min); - ch_0_out_0 = MIN(ch_0_out_0, activation_max); - *out_0++ = (int16_t)ch_0_out_0; + ch_0_out_0 = MAX(ch_0_out_0, activation_min); + ch_0_out_0 = MIN(ch_0_out_0, activation_max); + *out_0++ = (int16_t)ch_0_out_0; - ch_0_out_1 = MAX(ch_0_out_1, activation_min); - ch_0_out_1 = MIN(ch_0_out_1, activation_max); - *out_1++ = (int16_t)ch_0_out_1; + ch_0_out_1 = MAX(ch_0_out_1, activation_min); + ch_0_out_1 = MIN(ch_0_out_1, activation_max); + *out_1++ = (int16_t)ch_0_out_1; - ch_1_out_0 = MAX(ch_1_out_0, activation_min); - ch_1_out_0 = MIN(ch_1_out_0, activation_max); - *out_0++ = (int16_t)ch_1_out_0; + ch_1_out_0 = MAX(ch_1_out_0, activation_min); + ch_1_out_0 = MIN(ch_1_out_0, activation_max); + *out_0++ = (int16_t)ch_1_out_0; - ch_1_out_1 = MAX(ch_1_out_1, activation_min); - ch_1_out_1 = MIN(ch_1_out_1, activation_max); - *out_1++ = (int16_t)ch_1_out_1; + ch_1_out_1 = MAX(ch_1_out_1, activation_min); + ch_1_out_1 = MIN(ch_1_out_1, activation_max); + *out_1++ = (int16_t)ch_1_out_1; - out_mult++; - out_shift++; + out_mult++; + out_shift++; + } /* Skip row */ ip_a0 += num_col_a; @@ -209,8 +245,6 @@ int16_t *arm_nn_mat_mult_kernel_s16(const int8_t *input_a, int32_t ch_0_out_0 = 0; int32_t ch_0_out_1 = 0; - int64_t ch_0_out_0_s64 = 0; - int64_t ch_0_out_1_s64 = 0; #if defined(ARM_MATH_DSP) uint16_t col_count = num_col_a_fast >> 2; @@ -247,43 +281,67 @@ int16_t *arm_nn_mat_mult_kernel_s16(const int8_t *input_a, col_count--; } - ch_0_out_0_s64 = ch_0_out_0; - ch_0_out_1_s64 = ch_0_out_1; - - if (num_col_a > MAX_COL_COUNT) + if (is_int32_bias) { - col_count = num_col_a_slow; - while (col_count) + if (bias_s32) { - int8_t a0 = *ip_a0++; - int16_t b0 = *ip_b0++; - int16_t b1 = *ip_b1++; - - ch_0_out_0_s64 += a0 * b0; - ch_0_out_1_s64 += a0 * b1; - col_count--; + ch_0_out_0 += *bias_s32; + ch_0_out_1 += *bias_s32++; } - } - if (bias) - { - ch_0_out_0_s64 += *bias; - ch_0_out_1_s64 += *bias++; + ch_0_out_0 = arm_nn_requantize(ch_0_out_0, *out_mult, *out_shift); + ch_0_out_1 = arm_nn_requantize(ch_0_out_1, *out_mult, *out_shift); + out_mult++; + out_shift++; + + ch_0_out_0 = MAX(ch_0_out_0, activation_min); + ch_0_out_0 = MIN(ch_0_out_0, activation_max); + *out_0++ = (int16_t)ch_0_out_0; + + ch_0_out_1 = MAX(ch_0_out_1, activation_min); + ch_0_out_1 = MIN(ch_0_out_1, activation_max); + *out_1++ = (int16_t)ch_0_out_1; } + else + { + int64_t ch_0_out_0_s64 = ch_0_out_0; + int64_t ch_0_out_1_s64 = ch_0_out_1; + + if (num_col_a > MAX_COL_COUNT) + { + col_count = num_col_a_slow; + while (col_count) + { + int8_t a0 = *ip_a0++; + int16_t b0 = *ip_b0++; + int16_t b1 = *ip_b1++; + + ch_0_out_0_s64 += a0 * b0; + ch_0_out_1_s64 += a0 * b1; + col_count--; + } + } - reduced_multiplier = REDUCE_MULTIPLIER(*out_mult); - ch_0_out_0 = arm_nn_requantize_s64(ch_0_out_0_s64, reduced_multiplier, *out_shift); - ch_0_out_1 = arm_nn_requantize_s64(ch_0_out_1_s64, reduced_multiplier, *out_shift); + if (bias_s64) + { + ch_0_out_0_s64 += *bias_s64; + ch_0_out_1_s64 += *bias_s64++; + } - ch_0_out_0 = MAX(ch_0_out_0, activation_min); - ch_0_out_0 = MIN(ch_0_out_0, activation_max); - *out_0++ = (int16_t)ch_0_out_0; + int32_t reduced_multiplier = REDUCE_MULTIPLIER(*out_mult); + ch_0_out_0 = arm_nn_requantize_s64(ch_0_out_0_s64, reduced_multiplier, *out_shift); + ch_0_out_1 = arm_nn_requantize_s64(ch_0_out_1_s64, reduced_multiplier, *out_shift); - ch_0_out_1 = MAX(ch_0_out_1, activation_min); - ch_0_out_1 = MIN(ch_0_out_1, activation_max); - *out_1++ = (int16_t)ch_0_out_1; - out_mult++; - out_shift++; + ch_0_out_0 = MAX(ch_0_out_0, activation_min); + ch_0_out_0 = MIN(ch_0_out_0, activation_max); + *out_0++ = (int16_t)ch_0_out_0; + + ch_0_out_1 = MAX(ch_0_out_1, activation_min); + ch_0_out_1 = MIN(ch_0_out_1, activation_max); + *out_1++ = (int16_t)ch_0_out_1; + out_mult++; + out_shift++; + } } out_0 += output_ch; @@ -299,7 +357,7 @@ int16_t *arm_nn_mat_mult_kernel_s16(const int8_t *input_a, (void)activation_min; (void)activation_max; (void)num_col_a; - (void)output_bias; + (void)bias_data; (void)out_0; return NULL; diff --git a/Source/NNSupportFunctions/arm_nn_mat_mult_nt_t_s16.c b/Source/NNSupportFunctions/arm_nn_mat_mult_nt_t_s16.c index 78972d5b..02279c7f 100644 --- a/Source/NNSupportFunctions/arm_nn_mat_mult_nt_t_s16.c +++ b/Source/NNSupportFunctions/arm_nn_mat_mult_nt_t_s16.c @@ -21,7 +21,7 @@ * Title: arm_nn_mat_mult_nt_t_s16 * Description: Matrix multiplication support function with the right-hand-side (rhs) matrix transposed * - * $Date: 2 April 2024 + * $Date: 11 April 2024 * $Revision: V.1.0.0 * * Target : Arm(R) M-Profile Architecture @@ -47,7 +47,7 @@ */ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s16(const int16_t *lhs, const int8_t *rhs, - const int64_t *bias, + const cmsis_nn_bias_data *bias_data, int16_t *dst, const int32_t *dst_multipliers, const int32_t *dst_shifts, @@ -63,11 +63,14 @@ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s16(const int16_t *lhs, const uint32x4_t scatter_offset = { 0, (uint32_t)rhs_rows_offset, (uint32_t)rhs_rows_offset * 2, (uint32_t)rhs_rows_offset * 3}; - const int32_t rhs_cols_fast = rhs_cols > MAX_COL_COUNT ? MAX_COL_COUNT : rhs_cols; + const int64_t *bias_s64 = (const int64_t *)bias_data->data; + const int32_t *bias_s32 = (const int32_t *)bias_data->data; + const bool is_int32_bias = bias_data->is_int32_bias; + + const int32_t rhs_cols_fast = is_int32_bias ? rhs_cols : (rhs_cols > MAX_COL_COUNT ? MAX_COL_COUNT : rhs_cols); const int32_t rhs_cols_slow = rhs_cols - MAX_COL_COUNT; int i_items = 0; - for (; i_items <= (lhs_rows - 4); i_items += 4) { for (int i = 0; i < rhs_rows; i++) @@ -77,11 +80,6 @@ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s16(const int16_t *lhs, int32_t acc_n2 = 0; int32_t acc_n3 = 0; - int64_t acc_n0_s64 = 0; - int64_t acc_n1_s64 = 0; - int64_t acc_n2_s64 = 0; - int64_t acc_n3_s64 = 0; - const int16_t *ip_row_0 = lhs; const int16_t *ip_row_1 = lhs + rhs_cols; const int16_t *ip_row_2 = lhs + (2 * rhs_cols); @@ -131,50 +129,75 @@ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s16(const int16_t *lhs, : [cnt] "r"(rhs_cols_fast) : "q0", "q1", "q2", "q3", "q4", "memory", "r14"); #endif - acc_n0_s64 = acc_n0; - acc_n1_s64 = acc_n1; - acc_n2_s64 = acc_n2; - acc_n3_s64 = acc_n3; - if (rhs_cols > MAX_COL_COUNT) + if (is_int32_bias) { - ip_row_0 = lhs + MAX_COL_COUNT; - ip_row_1 = lhs + rhs_cols + MAX_COL_COUNT; - ip_row_2 = lhs + (2 * rhs_cols) + MAX_COL_COUNT; - ip_row_3 = lhs + (3 * rhs_cols) + MAX_COL_COUNT; - col_base = rhs + i * rhs_cols + MAX_COL_COUNT; + int32x4_t result; - for (int j = 0; j < rhs_cols_slow; j++) + if (bias_s32) { - int8_t col = col_base[j]; - acc_n0_s64 += ip_row_0[j] * col; - acc_n1_s64 += ip_row_1[j] * col; - acc_n2_s64 += ip_row_2[j] * col; - acc_n3_s64 += ip_row_3[j] * col; + acc_n0 += bias_s32[i]; + acc_n1 += bias_s32[i]; + acc_n2 += bias_s32[i]; + acc_n3 += bias_s32[i]; } - } - if (bias) - { - acc_n0_s64 += bias[i]; - acc_n1_s64 += bias[i]; - acc_n2_s64 += bias[i]; - acc_n3_s64 += bias[i]; + int32x4_t res = {acc_n0, acc_n1, acc_n2, acc_n3}; + + result = arm_requantize_mve(res, dst_multipliers[i], dst_shifts[i]); + + result = vmaxq_s32(result, vdupq_n_s32(activation_min)); + result = vminq_s32(result, vdupq_n_s32(activation_max)); + + vstrhq_scatter_offset_s32(dst, scatter_offset, result); } + else + { + int64_t acc_n0_s64 = acc_n0; + int64_t acc_n1_s64 = acc_n1; + int64_t acc_n2_s64 = acc_n2; + int64_t acc_n3_s64 = acc_n3; + + if (rhs_cols > MAX_COL_COUNT) + { + ip_row_0 = lhs + MAX_COL_COUNT; + ip_row_1 = lhs + rhs_cols + MAX_COL_COUNT; + ip_row_2 = lhs + (2 * rhs_cols) + MAX_COL_COUNT; + ip_row_3 = lhs + (3 * rhs_cols) + MAX_COL_COUNT; + col_base = rhs + i * rhs_cols + MAX_COL_COUNT; + + for (int j = 0; j < rhs_cols_slow; j++) + { + int8_t col = col_base[j]; + acc_n0_s64 += ip_row_0[j] * col; + acc_n1_s64 += ip_row_1[j] * col; + acc_n2_s64 += ip_row_2[j] * col; + acc_n3_s64 += ip_row_3[j] * col; + } + } + + if (bias_s64) + { + acc_n0_s64 += bias_s64[i]; + acc_n1_s64 += bias_s64[i]; + acc_n2_s64 += bias_s64[i]; + acc_n3_s64 += bias_s64[i]; + } - int32_t reduced_multiplier = REDUCE_MULTIPLIER(dst_multipliers[i]); - int32_t shift = dst_shifts[i]; + int32_t reduced_multiplier = REDUCE_MULTIPLIER(dst_multipliers[i]); + int32_t shift = dst_shifts[i]; - acc_n0 = arm_nn_requantize_s64(acc_n0_s64, reduced_multiplier, shift); - acc_n1 = arm_nn_requantize_s64(acc_n1_s64, reduced_multiplier, shift); - acc_n2 = arm_nn_requantize_s64(acc_n2_s64, reduced_multiplier, shift); - acc_n3 = arm_nn_requantize_s64(acc_n3_s64, reduced_multiplier, shift); - int32x4_t res = {acc_n0, acc_n1, acc_n2, acc_n3}; + acc_n0 = arm_nn_requantize_s64(acc_n0_s64, reduced_multiplier, shift); + acc_n1 = arm_nn_requantize_s64(acc_n1_s64, reduced_multiplier, shift); + acc_n2 = arm_nn_requantize_s64(acc_n2_s64, reduced_multiplier, shift); + acc_n3 = arm_nn_requantize_s64(acc_n3_s64, reduced_multiplier, shift); + int32x4_t res = {acc_n0, acc_n1, acc_n2, acc_n3}; - res = vmaxq_s32(res, vdupq_n_s32(activation_min)); - res = vminq_s32(res, vdupq_n_s32(activation_max)); + res = vmaxq_s32(res, vdupq_n_s32(activation_min)); + res = vminq_s32(res, vdupq_n_s32(activation_max)); - vstrhq_scatter_offset_s32(dst, scatter_offset, res); + vstrhq_scatter_offset_s32(dst, scatter_offset, res); + } dst++; } @@ -182,63 +205,135 @@ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s16(const int16_t *lhs, dst += (3 * rhs_rows); } - for (; i_items < lhs_rows; i_items++) + if (is_int32_bias) { - for (int i = 0; i < rhs_rows; i++) + + for (; i_items < lhs_rows; i_items++) { - int32_t acc_n0 = 0; - int64_t acc_n0_s64 = 0; - const int16_t *ip_row_0 = lhs; - const int8_t *col_base = rhs + i * rhs_cols; + int32_t acc[4]; + const int32_t *multipliers = dst_multipliers; + const int32_t *shifts = dst_shifts; + for (int i = 0; i < rhs_rows; i++) + { + int32_t acc_n0 = 0; + const int16_t *ip_row_0 = lhs; + const int8_t *col_base = rhs + i * rhs_cols; #if defined(ARM_MATH_AUTOVECTORIZE) - for (int j = 0; j < rhs_cols_fast; j++) - { - int8_t col = col_base[j]; - acc_n0 += ip_row_0[j] * col; - } + for (int j = 0; j < rhs_cols; j++) + { + int32_t col = col_base[j]; + acc_n0 += ip_row_0[j] * col; + } #else - __ASM volatile(" .p2align 2 \n" - " wlstp.32 lr, %[cnt], 1f \n" - " mov %[out0], 0 \n" - "2: \n" - " vldrb.s32 q0, [%[col]], #4 \n" - " vldrh.s32 q1, [%[row0]], #8 \n" - " vmlava.s32 %[out0], q0, q1 \n" - " letp lr, 2b \n" - "1: \n" - : [col] "+l"(col_base), [row0] "+l"(ip_row_0), [out0] "=Te"(acc_n0) - : [cnt] "r"(rhs_cols_fast) - : "q0", "q1", "memory", "r14"); + __ASM volatile(" .p2align 2 \n" + " wlstp.32 lr, %[cnt], 1f \n" + " mov %[out0], 0 \n" + "2: \n" + " vldrb.s32 q0, [%[col]], #4 \n" + " vldrh.s32 q1, [%[row0]], #8 \n" + " vmlava.s32 %[out0], q0, q1 \n" + " letp lr, 2b \n" + "1: \n" + : [col] "+l"(col_base), [row0] "+l"(ip_row_0), [out0] "=Te"(acc_n0) + : [cnt] "r"(rhs_cols) + : "q0", "q1", "memory", "r14"); #endif - acc_n0_s64 = acc_n0; + if (bias_s32) + { + acc_n0 += bias_s32[i]; + } - if (rhs_cols > MAX_COL_COUNT) - { - ip_row_0 = lhs + MAX_COL_COUNT; - col_base = rhs + i * rhs_cols + MAX_COL_COUNT; + const int32_t index = i & 0x3; + acc[index] = acc_n0; - for (int j = 0; j < rhs_cols_slow; j++) + if (index == 3) { - int8_t col = col_base[j]; - acc_n0_s64 += ip_row_0[j] * col; + int32x4_t res = vldrwq_s32(acc); + res = arm_requantize_mve_32x4(res, vldrwq_s32(multipliers), vldrwq_s32(shifts)); + multipliers += 4; + shifts += 4; + res = vmaxq_s32(res, vdupq_n_s32(activation_min)); + res = vminq_s32(res, vdupq_n_s32(activation_max)); + vstrhq_s32(dst, res); + dst += 4; } } + lhs += rhs_cols; - if (bias) + const int32_t tail_rows = rhs_rows & 0x3; + for (int i = 0; i < tail_rows; i++) { - acc_n0_s64 += bias[i]; + int32_t acc_n0 = acc[i]; + acc_n0 = arm_nn_requantize(acc_n0, multipliers[i], shifts[i]); + acc_n0 = MAX(acc_n0, activation_min); + acc_n0 = MIN(acc_n0, activation_max); + *dst++ = (int16_t)acc_n0; } + } + } + else + { - int32_t reduced_multiplier = REDUCE_MULTIPLIER(dst_multipliers[i]); - int32_t shift = dst_shifts[i]; + for (; i_items < lhs_rows; i_items++) + { + for (int i = 0; i < rhs_rows; i++) + { + int32_t acc_n0 = 0; + int64_t acc_n0_s64 = 0; + const int16_t *ip_row_0 = lhs; + const int8_t *col_base = rhs + i * rhs_cols; - acc_n0 = arm_nn_requantize_s64(acc_n0_s64, reduced_multiplier, shift); - acc_n0 = MAX(acc_n0, activation_min); - acc_n0 = MIN(acc_n0, activation_max); - *dst++ = (int16_t)acc_n0; + #if defined(ARM_MATH_AUTOVECTORIZE) + for (int j = 0; j < rhs_cols_fast; j++) + { + int8_t col = col_base[j]; + acc_n0 += ip_row_0[j] * col; + } + #else + __ASM volatile(" .p2align 2 \n" + " wlstp.32 lr, %[cnt], 1f \n" + " mov %[out0], 0 \n" + "2: \n" + " vldrb.s32 q0, [%[col]], #4 \n" + " vldrh.s32 q1, [%[row0]], #8 \n" + " vmlava.s32 %[out0], q0, q1 \n" + " letp lr, 2b \n" + "1: \n" + : [col] "+l"(col_base), [row0] "+l"(ip_row_0), [out0] "=Te"(acc_n0) + : [cnt] "r"(rhs_cols_fast) + : "q0", "q1", "memory", "r14"); + #endif + + acc_n0_s64 = acc_n0; + + if (rhs_cols > MAX_COL_COUNT) + { + ip_row_0 = lhs + MAX_COL_COUNT; + col_base = rhs + i * rhs_cols + MAX_COL_COUNT; + + for (int j = 0; j < rhs_cols_slow; j++) + { + int8_t col = col_base[j]; + acc_n0_s64 += ip_row_0[j] * col; + } + } + + if (bias_s64) + { + acc_n0_s64 += bias_s64[i]; + } + + int32_t reduced_multiplier = REDUCE_MULTIPLIER(dst_multipliers[i]); + int32_t shift = dst_shifts[i]; + + acc_n0 = arm_nn_requantize_s64(acc_n0_s64, reduced_multiplier, shift); + acc_n0 = MAX(acc_n0, activation_min); + acc_n0 = MIN(acc_n0, activation_max); + *dst++ = (int16_t)acc_n0; + } + lhs += rhs_cols; } - lhs += rhs_cols; } #else @@ -249,7 +344,7 @@ arm_cmsis_nn_status arm_nn_mat_mult_nt_t_s16(const int16_t *lhs, (void)dst; (void)activation_min; (void)activation_max; - (void)bias; + (void)bias_data; (void)lhs_rows; (void)lhs_rows; (void)rhs_rows; diff --git a/Tests/UnitTest/README.md b/Tests/UnitTest/README.md index 3b7cafd3..3ebf8a35 100644 --- a/Tests/UnitTest/README.md +++ b/Tests/UnitTest/README.md @@ -159,7 +159,7 @@ Current progress: | Operator | Old | New | Notes | --- | --- | --- | --- -| convolution | x | | +| convolution | x | x | New version only supports 16x8 | fully_connected | x | | | lstm | x | x | Only new version supporting 16x8 | svdf | x | | @@ -197,4 +197,4 @@ The following settings are used. ``` python -m yapf --in-place --style='{based_on_style:pep8,column_limit:120,indent_width:4}' *.py -``` \ No newline at end of file +``` diff --git a/Tests/UnitTest/RefactoredTestGen/Lib/op_conv.py b/Tests/UnitTest/RefactoredTestGen/Lib/op_conv.py new file mode 100644 index 00000000..5653e516 --- /dev/null +++ b/Tests/UnitTest/RefactoredTestGen/Lib/op_conv.py @@ -0,0 +1,216 @@ +# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# +# 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. +# +import Lib.op_utils +import math + +from tensorflow.lite.python.interpreter import Interpreter +from tensorflow.lite.python.interpreter import OpResolverType +import tf_keras as keras +import numpy as np + + +class Op_conv(Lib.op_utils.Op_type): + + def get_shapes(params): + shapes = {} + + # Common default parameters + params["stride_x"] = 1 if "stride_x" not in params else params["stride_x"] + params["stride_y"] = 1 if "stride_y" not in params else params["stride_y"] + params["dilation_x"] = 1 if "dilation_x" not in params else params["dilation_x"] + params["dilation_y"] = 1 if "dilation_y" not in params else params["dilation_y"] + params["batch_size"] = 1 if "batch_size" not in params else params["batch_size"] + params["generate_bias"] = True if "generate_bias" not in params else params["generate_bias"] + if "out_activation_min" not in params: + params["out_activation_min"] = Lib.op_utils.get_dtype_min(params["input_data_type"]) + if "out_activation_max" not in params: + params["out_activation_max"] = Lib.op_utils.get_dtype_max(params["input_data_type"]) + if "bias_min" not in params: + params["bias_min"] = Lib.op_utils.get_dtype_min("int32_t") + if "bias_max" not in params: + params["bias_max"] = Lib.op_utils.get_dtype_max("int32_t") + if "weights_min" not in params: + params["weights_min"] = Lib.op_utils.get_dtype_min("int32_t") + if "weights_max" not in params: + params["weights_max"] = Lib.op_utils.get_dtype_max("int32_t") + + in_ch = params["in_ch"] + out_ch = params["out_ch"] + groups = params["groups"] + filter_ch = in_ch // groups + + if in_ch % groups != 0: + raise RuntimeError("ERROR: Input channels {} must be an even multiple of groups {}".format(in_ch, groups)) + if out_ch % groups != 0: + raise RuntimeError("ERROR: Output channels {} must be an even multiple of groups {}".format(out_ch, groups)) + + shapes["input"] = (params["batch_size"], params["input_h"], params["input_w"], in_ch) + shapes["weight_shape"] = [params["filter_y"], params["filter_x"], filter_ch, out_ch] + + if params["generate_bias"]: + shapes["bias_shape"] = [out_ch] + else: + shapes["bias_shape"] = [] + + shapes["representational_dataset"] = (params["batch_size"], params["input_h"], params["input_w"], in_ch) + return shapes + + def generate_keras_model(shapes, params): + + model = keras.models.Sequential() + input_shape = (params["batch_size"], params["input_h"], params["input_w"], params["in_ch"]) + model.add(keras.layers.InputLayer(input_shape=input_shape[1:], batch_size=params["batch_size"])) + + conv_layer = keras.layers.Conv2D(params["out_ch"], + kernel_size=(params["filter_y"], params["filter_x"]), + strides=(params["stride_y"], params["stride_x"]), + padding=params["padding"], + input_shape=input_shape[1:], + dilation_rate=(params["dilation_y"], params["dilation_x"]), + groups=params["groups"], + use_bias=params["generate_bias"]) + model.add(conv_layer) + + weights = Lib.op_utils.generate_tf_tensor( + shapes["weight_shape"], params["weights_min"], params["weights_max"], decimals=8) + + if params["generate_bias"]: + bias = Lib.op_utils.generate_tf_tensor( + shapes["bias_shape"], params["bias_min"], params["bias_max"]) + conv_layer.set_weights([weights, bias]) + else: + conv_layer.set_weights([weights]) + + return model + + def generate_data_tflite(tflite_fname, params): + tensors = {} + effective_scales = {} + scales = {} + generated_params = {} + aliases = {} + + # To be removed + aliases["output_multiplier"] = "output_mult" + aliases["bias"] = "biases" + aliases["output"] = "output_ref" + + interpreter = Interpreter(str(tflite_fname), experimental_op_resolver_type=OpResolverType.BUILTIN_REF) + interpreter.allocate_tensors() + tensor_details = interpreter.get_tensor_details() + input_state = tensor_details[0] + + if params["generate_bias"]: + filter_index = 1 + bias_index = 2 + else: + filter_index = 2 + bias_index = 1 + + filter_layer = tensor_details[filter_index] + + if params["generate_bias"]: + bias_layer = tensor_details[bias_index] + else: + bias_layer = None + + input_details = interpreter.get_input_details() + (scales["input_scale"], scales["input_zero_point"]) = input_details[0]['quantization'] + + output_details = interpreter.get_output_details() + (scales["output_scale"], scales["output_zero_point"]) = output_details[0]['quantization'] + + x_output = output_details[0]['shape'][2] + y_output = output_details[0]['shape'][1] + + def calculate_padding(x_output, y_output, params): + x_input = params["input_w"] + y_input = params["input_h"] + + if params["padding"] == "SAME": + # Take dilation into account. + filter_x = (params["filter_x"] - 1) * params["dilation_x"] + 1 + filter_y = (params["filter_y"] - 1) * params["dilation_y"] + 1 + + pad_along_width = max((x_output - 1) * params["stride_x"] + filter_x - x_input, 0) + pad_along_height = max((y_output - 1) * params["stride_y"] + filter_y - y_input, 0) + + pad_top = pad_along_height // 2 + pad_left = pad_along_width // 2 + pad_top_offset = pad_along_height % 2 + pad_left_offset = pad_along_width % 2 + + pad_y_with_offset = pad_top + pad_top_offset + pad_x_with_offset = pad_left + pad_left_offset + pad_x = pad_left + pad_y = pad_top + else: + pad_x = 0 + pad_y = 0 + pad_y_with_offset = 0 + pad_x_with_offset = 0 + + return pad_y_with_offset, pad_x_with_offset, pad_y, pad_x + + pad_y_with_offset, pad_x_with_offset, pad_y, pad_x = calculate_padding(x_output, y_output, params) + + tensors["weights"] = interpreter.get_tensor(filter_layer['index']) + + if params["generate_bias"]: + tensors["bias"] = interpreter.get_tensor(bias_layer['index']) + else: + tensors["bias"] = None + + scales["scaling_factors"] = filter_layer['quantization_parameters']['scales'] + + def generate_quantize_per_channel_multiplier(params, scales): + def quantize_scale(scale): + significand, shift = math.frexp(scale) + significand_q31 = round(significand * (1 << 31)) + return significand_q31, shift + + num_channels = params["out_ch"] + per_channel_multiplier = [] + per_channel_shift = [] + + if len(scales["scaling_factors"]) != num_channels: + raise RuntimeError("Missing scaling factors") + + for i in range(num_channels): + effective_output_scale = scales["input_scale"] * scales["scaling_factors"][i] / scales["output_scale"] + (quantized_multiplier, shift) = quantize_scale(effective_output_scale) + + per_channel_multiplier.append(quantized_multiplier) + per_channel_shift.append(shift) + + return per_channel_multiplier, per_channel_shift + + generated_params["input_batches"] = params["batch_size"] + generated_params["pad_x"] = pad_x + generated_params["pad_y"] = pad_y + generated_params["output_h"] = y_output + generated_params["output_w"] = x_output + generated_params["dst_size"] = x_output * y_output * params["out_ch"] * params["batch_size"] + generated_params["input_offset"] = -input_state['quantization_parameters']['zero_points'][0] + generated_params["output_offset"] = output_details[0]['quantization'][1] + + per_channel_multiplier, per_channel_shift = generate_quantize_per_channel_multiplier(params, scales) + + tensors["output_multiplier"] = np.array(per_channel_multiplier) + tensors["output_shift"] = np.array(per_channel_shift) + + return Lib.op_utils.Generated_data(generated_params, tensors, scales, effective_scales, aliases) diff --git a/Tests/UnitTest/RefactoredTestGen/Lib/op_utils.py b/Tests/UnitTest/RefactoredTestGen/Lib/op_utils.py index ad74b0e8..f7b3c00a 100644 --- a/Tests/UnitTest/RefactoredTestGen/Lib/op_utils.py +++ b/Tests/UnitTest/RefactoredTestGen/Lib/op_utils.py @@ -21,11 +21,12 @@ class Generated_data(): """ Container for all generated data""" - def __init__(self, params, tensors, scales, effective_scales): + def __init__(self, params, tensors, scales, effective_scales, aliases={}): self.params = params # All other params which are generated rather than given in the test-plan self.tensors = tensors # All tensors self.scales = scales # Scales used in the tflite model self.effective_scales = effective_scales # Scales used by CMSIS-NN + self.aliases = aliases # Optional for backward compability with old unit tests class Op_type(): @@ -43,12 +44,18 @@ def generate_keras_model(output_path, shapes, params): @staticmethod def generate_data_tflite(tflite_path, params) -> Generated_data: - """ Parses quantized tensors, scales, and other parameter from the given tflite-file, calculates effective scales, and returns them as three structs""" + """ + Parses quantized tensors, scales, and other parameter from the given tflite-file, calculates effective + scales, and returns them as three structs + """ raise NotImplementedError @staticmethod def generate_data_json(shapes, params) -> Generated_data: - """ Generates quantized tensors, scales, and other parameters with given shapes and params, calculates effecitve scales, and returns them as four structs""" + """ + Generates quantized tensors, scales, and other parameters with given shapes and params, calculates effecitve + scales, and returns them as four structs + """ raise NotImplementedError @@ -65,6 +72,8 @@ def get_dtype(name, params): return params["bias_data_type"] elif "weight" in name or "kernel" in name: return params["weights_data_type"] + elif "multiplier" in name or "shift" in name: + return params["shift_and_mult_data_type"] elif "input" in name or "output" in name: return params["input_data_type"] else: diff --git a/Tests/UnitTest/RefactoredTestGen/Lib/test.py b/Tests/UnitTest/RefactoredTestGen/Lib/test.py index ea8d1826..12396f24 100644 --- a/Tests/UnitTest/RefactoredTestGen/Lib/test.py +++ b/Tests/UnitTest/RefactoredTestGen/Lib/test.py @@ -16,7 +16,7 @@ # import os import Lib.op_lstm -import Lib.op_lstm +import Lib.op_conv import tensorflow as tf import numpy as np from tensorflow.lite.python.interpreter import Interpreter @@ -44,12 +44,9 @@ print("WARNING: tflite_runtime not installed, skipping tests using this interpreter.") tflite_runtime_imported = False + def generate(params, args, fpaths): """ Create a test with given parameters """ - if not args.verbose: - # Supress output - sys.stdout = open(os.devnull, "w") - sys.stderr = open(os.devnull, "w") # Check if test is valid, skip otherwise if (params["interpreter"] == "tflite_runtime") and (not tflite_runtime_imported): @@ -75,6 +72,7 @@ def generate(params, args, fpaths): keras_model, quantize=True, dtype=params["input_data_type"], + bias_dtype=params["bias_data_type"], shape=shapes["representational_dataset"]) data = op_type.generate_data_tflite(fpaths["tflite"], params) @@ -97,8 +95,9 @@ def generate(params, args, fpaths): params[name + "_shift"] = shift # Run reference model - minval = Lib.op_utils.get_dtype_min(params["input_data_type"]) - maxval = Lib.op_utils.get_dtype_max(params["input_data_type"]) + minval = Lib.op_utils.get_dtype_min(params["input_data_type"]) if "input_min" not in params else params["input_min"] + maxval = Lib.op_utils.get_dtype_max(params["input_data_type"]) if "input_max" not in params else params["input_max"] + dtype = Lib.op_utils.get_tf_dtype(params["input_data_type"]) input_tensor = Lib.op_utils.generate_tf_tensor(shapes["input"], minval, maxval, decimals=0, datatype=dtype) data.tensors["input"] = input_tensor.numpy() @@ -110,45 +109,53 @@ def generate(params, args, fpaths): elif params["interpreter"] == "tflite_micro": data.tensors["output"] = invoke_tflite_micro(fpaths["tflite"], input_tensor) else: - raise ValueError(f"Invalid interpreter in {self.params['name']}") + raise ValueError(f"Invalid interpreter in {params['name']}") # Write data header = get_header(params["tflite_generator"], params["interpreter"]) - include_in_config = lambda key: key not in [ - "suite_name", "name", "input_data_type", "op_type", "input_data_type", "weights_data_type", "bias_data_type", - "interpreter", "tflite_generator", "json_template" - ] + def include_in_config(key): + return key not in [ + "suite_name", "name", "input_data_type", "op_type", "input_data_type", "weights_data_type", + "bias_data_type", "shift_and_mult_data_type", "interpreter", "tflite_generator", "json_template", + "groups", "generate_bias", "bias_min", "bias_max", "weights_min", "weights_max", + ] + config_params = {key: val for key, val in params.items() if include_in_config(key)} write_config(fpaths["config_data"], config_params, params["name"], fpaths["test_data"], header) for name, tensor in data.tensors.items(): dtype = Lib.op_utils.get_dtype(name, params) fpaths[name] = fpaths["data_folder"] / f"{name}.h" + if name == "output" and "out_activation_min" in params and "out_activation_max" in params: + tensor = np.clip(tensor, params["out_activation_min"], params["out_activation_max"]) write_c_array(tensor, fpaths[name], dtype, params["name"], name, fpaths["test_data"], header) - # Stop supressing output - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ + if name in data.aliases: + append_alias_to_c_array_file(fpaths[name], dtype, params["name"], name, data.aliases[name]) + def get_op_type(op_type_string): if op_type_string == "lstm": return Lib.op_lstm.Op_lstm + elif op_type_string == "conv": + return Lib.op_conv.Op_conv else: raise ValueError(f"Unknown op type '{op_type_string}'") -def convert_keras_to_tflite(output_fpath, keras_model, quantize, dtype, shape): +def convert_keras_to_tflite(output_fpath, keras_model, quantize, dtype, bias_dtype, shape): """ Convert a model generated with keras to tflite-format """ keras_model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adam(), metrics=['accuracy']) + n_inputs = len(keras_model.inputs) converter = tf.lite.TFLiteConverter.from_keras_model(keras_model) if quantize: def representative_dataset(): - for _ in range(100): + for _ in range(n_inputs): data = np.random.rand(*shape) yield [data.astype(np.float32)] @@ -160,6 +167,8 @@ def representative_dataset(): if dtype == "int8_t": converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8] else: + if bias_dtype == "int32_t": + converter._experimental_full_integer_quantization_bias_type = tf.int32 converter.target_spec.supported_ops = [ tf.lite.OpsSet.EXPERIMENTAL_TFLITE_BUILTINS_ACTIVATIONS_INT16_WEIGHTS_INT8 ] @@ -184,7 +193,8 @@ def invoke_tflite(tflite_path, input_tensor): def invoke_tflite_runtime(tflite_path, input_tensor): - interpreter = TfliteRuntimeInterpreter(str(tflite_path), experimental_op_resolver_type=TfliteRuntimeOpResolverType.BUILTIN_REF) + interpreter = TfliteRuntimeInterpreter(str(tflite_path), + experimental_op_resolver_type=TfliteRuntimeOpResolverType.BUILTIN_REF) input_index = interpreter.get_input_details()[0]["index"] interpreter.allocate_tensors() interpreter.set_tensor(input_index, input_tensor) @@ -216,7 +226,7 @@ def write_config(config_fpath, params, prefix, test_data_fpath, header): else: val = "false" - f.write(f"#define {prefix}_{key} {val}\n") + f.write("#define " + f"{prefix}_{key} ".upper() + f"{val}\n") with test_data_fpath.open("w") as f: f.write(f'#include "{config_fpath.name}"\n') @@ -226,16 +236,19 @@ def write_c_array(data, fname, dtype, prefix, tensor_name, test_data_fpath, head # Check that the data looks reasonable values, counts = np.unique(data, return_counts=True) - if len(values) < data.size / 2 or max(counts) > data.size / 2: + + size = 0 if data is None else data.size + + if len(values) < size / 2 or max(counts) > size / 2: print(f"WARNING: {fname} has repeating values, is this intended?") - if len(data) > 500: + if size and len(data) > 500: print(f"WARNING: {fname} has more than 500 values, is this intended?") with fname.open("w+") as f: f.write(header) f.write("#pragma once\n") f.write("#include \n\n") - if not data is None: + if size > 0: data_shape = data.shape format_width = len(str(data.max())) + 1 data = data.flatten() @@ -246,16 +259,37 @@ def write_c_array(data, fname, dtype, prefix, tensor_name, test_data_fpath, head f.write("\n") f.write(f"{data[i]: {format_width}n}, ") - if len(data)-1 % data_shape[-1] == 0: + if len(data) - 1 % data_shape[-1] == 0: f.write("\n") - f.write(f"{data[len(data) - 1]: {format_width}n}" + "\n};") + f.write(f"{data[len(data) - 1]: {format_width}n}" + "\n};\n") else: - f.write(f"const {dtype} *{prefix}_{tensor_name} = NULL;\n") + f.write(f"const {dtype} *const {prefix}_{tensor_name} = NULL;\n") with test_data_fpath.open("a") as f: f.write(f'#include "{fname.name}"\n') + format_output_file(fname) + format_output_file(test_data_fpath) + + +def append_alias_to_c_array_file(fname, dtype, prefix, tensor_name, alias_name): + with fname.open("a") as f: + f.write(f"\nconst {dtype} *const {prefix}_{alias_name} = {prefix}_{tensor_name};\n") + + +def format_output_file(file): + CLANG_FORMAT = 'clang-format-12 -i' # For formatting generated headers. + command_list = CLANG_FORMAT.split(' ') + command_list.append(file) + try: + process = subprocess.run(command_list) + if process.returncode != 0: + print(f"ERROR: {command_list = }") + sys.exit(1) + except Exception as e: + raise RuntimeError(f"{e} from: {command_list = }") + def generate_test_from_template(name, test_functions_fpath, template_fpath, unity_fpath): template = template_fpath.read_text() @@ -334,10 +368,11 @@ def quantize_scale(scale): def get_header(generator, interpreter): + header = f"// Generated by {os.path.basename(sys.argv[0])}" if generator == "keras": - header = f"// Generated by {os.path.basename(__file__)} using tensorflow version {tf.__version__} (Keras version {keras.__version__}).\n" + header += f" using tensorflow version {tf.__version__} (Keras version {keras.__version__}).\n" elif generator == "json": - command = f"flatc --version" + command = "flatc --version" command_list = command.split() try: process = subprocess.Popen(command_list, @@ -350,7 +385,7 @@ def get_header(generator, interpreter): sys.exit(1) except Exception as e: raise RuntimeError(f"{e} from: {command = }. Did you install flatc?") - header = f"// Generated by {os.path.basename(__file__)} using {str(flatc_version)[2:-3]}\n" + header += f" using {str(flatc_version)[2:-3]}\n" else: raise Exception @@ -359,6 +394,8 @@ def get_header(generator, interpreter): revision = tf.__git_version__ header += f"// Interpreter from tensorflow version {version} and revision {revision}.\n" elif interpreter == "tflite_runtime": + import tflite_runtime as tfl_runtime + version = tfl_runtime.__version__ revision = tfl_runtime.__git_version__ header += f"// Interpreter from tflite_runtime version {version} and revision {revision}.\n" diff --git a/Tests/UnitTest/RefactoredTestGen/Lib/test_plan.py b/Tests/UnitTest/RefactoredTestGen/Lib/test_plan.py index fa0540be..0114b442 100644 --- a/Tests/UnitTest/RefactoredTestGen/Lib/test_plan.py +++ b/Tests/UnitTest/RefactoredTestGen/Lib/test_plan.py @@ -18,6 +18,7 @@ import Lib.test_suite import sys + def generate(args): """Generate a number of test suites defined by a json-file test plan""" @@ -39,4 +40,4 @@ def generate(args): test_names = [test["name"] for test in test_suite_params["tests"] if test["name"] in args.tests] if (len(test_names) > 0) or (args.tests == []): print(f"{test_suite_params['suite_name']}") - test_suite = Lib.test_suite.generate(test_suite_params, args) + Lib.test_suite.generate(test_suite_params, args) diff --git a/Tests/UnitTest/RefactoredTestGen/Lib/test_suite.py b/Tests/UnitTest/RefactoredTestGen/Lib/test_suite.py index f70f0337..d730337d 100644 --- a/Tests/UnitTest/RefactoredTestGen/Lib/test_suite.py +++ b/Tests/UnitTest/RefactoredTestGen/Lib/test_suite.py @@ -22,7 +22,9 @@ def generate(params, args): """ Generate data for a number of tests and optionally create corresponding code to run the test""" # Filter out params from suite to pass on to each test - is_common = lambda key: key not in ["tests"] + def is_common(key): + return key not in ["tests"] + common_test_params = {key: val for key, val in params.items() if is_common(key)} # Create fpaths related to the test suite @@ -35,11 +37,11 @@ def generate(params, args): for test_params in params["tests"]: if (test_params["name"] in args.tests) or (args.tests == []): print(f"- {test_params['name']}") - test_params.update(common_test_params) + + # Test params overrides common params + test_params = common_test_params | test_params test = Lib.test.generate(test_params, args, fpaths) tests.append(test) return tests - - diff --git a/Tests/UnitTest/RefactoredTestGen/generate_test_data.py b/Tests/UnitTest/RefactoredTestGen/generate_test_data.py index 6af83ee4..8a1f7693 100755 --- a/Tests/UnitTest/RefactoredTestGen/generate_test_data.py +++ b/Tests/UnitTest/RefactoredTestGen/generate_test_data.py @@ -31,8 +31,8 @@ def main(): parser = argparse.ArgumentParser( prog="generate_test_data", - description= - "Generates reference data and test code for CMSIS-NN kernels. Tensorflow, Tflite or TFLM may be used for reference." + description="Generates reference data and test code for CMSIS-NN kernels. Tensorflow, Tflite or TFLM may be " + "used for reference." ) parser.add_argument("-p", @@ -55,7 +55,6 @@ def main(): type=pathlib.Path, default="../../../tflite_micro/tensorflow/lite/schema/schema.fbs", help="Path to the schema-file needed for generating tflite-files with flatc") - parser.add_argument("--verbose", action="store_true", help="Enable additional logging") parser.add_argument("--list", action="store_true", help="Only list tests in test plan") args = parser.parse_args() diff --git a/Tests/UnitTest/RefactoredTestGen/test_plan.json b/Tests/UnitTest/RefactoredTestGen/test_plan.json index b577d23c..06a01da3 100644 --- a/Tests/UnitTest/RefactoredTestGen/test_plan.json +++ b/Tests/UnitTest/RefactoredTestGen/test_plan.json @@ -1,4 +1,173 @@ [ +{ + "suite_name" : "test_arm_convolve_s16", + "op_type" : "conv", + "input_data_type": "int16_t", + "weights_data_type": "int8_t", + "bias_data_type": "int64_t", + "shift_and_mult_data_type": "int32_t", + "interpreter": "tensorflow", + "tflite_generator": "keras", + "groups": 1, + "tests" : [ + {"name" : "int16xint8", + "in_ch" : 55, + "out_ch" : 4, + "input_w" : 10, + "input_h" : 8, + "filter_x" : 9, + "filter_y": 4, + "padding": "VALID" + }, + {"name" : "int16xint8_spill", + "in_ch" : 55, + "out_ch" : 9, + "input_w" : 10, + "input_h" : 8, + "filter_x" : 9, + "filter_y": 4, + "padding": "VALID", + "input_min": 32667, + "input_max": 32767, + "out_activation_min": 32667 + }, + {"name" : "int16xint8_spill2", + "in_ch" : 12, + "out_ch" : 9, + "input_w" : 10, + "input_h" : 8, + "filter_x" : 9, + "filter_y": 4, + "padding": "VALID", + "out_activation_min": 32667, + "input_min": 32667, + "input_max": 32767, + "weights_min": 100 + }, + {"name" : "requantize_s64", + "in_ch" : 8, + "out_ch" : 8, + "input_w" : 4, + "input_h" : 4, + "filter_x" : 2, + "filter_y": 2, + "stride_x": 2, + "padding": "VALID", + "generate_bias": true, + "bias_min": -768, + "bias_max": 2147484647 + }, + {"name" : "int16xint8_dilation_1", + "in_ch" : 2, + "out_ch" : 2, + "input_w" : 32, + "input_h" : 32, + "filter_x" : 2, + "filter_y": 2, + "padding": "VALID", + "dilation_x": 2, + "dilation_y": 2, + "bias_min": -768, + "bias_max": 2147484647 + }, + {"name" : "int16xint8_dilation_2", + "in_ch" : 3, + "out_ch" : 4, + "input_w" : 7, + "input_h" : 8, + "filter_x" : 2, + "filter_y": 4, + "batch_size": 2, + "padding": "SAME", + "dilation_x": 2, + "dilation_y": 2, + "out_activation_min": -13335 + }, + {"name" : "int16xint8_dilation_3", + "in_ch" : 3, + "out_ch" : 4, + "input_w" : 7, + "input_h" : 8, + "filter_x" : 2, + "filter_y": 4, + "padding": "SAME", + "dilation_x": 2, + "out_activation_min": -23335 + }, + {"name" : "int16xint8xint32_1", + "in_ch" : 55, + "out_ch" : 4, + "input_w" : 10, + "input_h" : 8, + "filter_x" : 9, + "filter_y": 4, + "padding": "VALID", + "generate_bias": false, + "bias_data_type": "int32_t" + }, + {"name" : "int16xint8xint32_2", + "in_ch" : 55, + "out_ch" : 9, + "input_w" : 10, + "input_h" : 8, + "filter_x" : 9, + "filter_y": 4, + "padding": "VALID", + "generate_bias": false, + "bias_data_type": "int32_t" + }, + {"name" : "int16xint8xint32_3", + "in_ch" : 8, + "out_ch" : 8, + "input_w" : 4, + "input_h" : 4, + "filter_x" : 2, + "filter_y": 2, + "padding": "SAME", + "bias_data_type": "int32_t", + "bias_min": -768, + "bias_max": 2147484647 + }, + {"name" : "int16xint8xint32_4", + "in_ch" : 2, + "out_ch" : 2, + "input_w" : 32, + "input_h" : 32, + "filter_x" : 2, + "filter_y": 2, + "padding": "VALID", + "bias_data_type": "int32_t", + "bias_min": -768, + "dilation_x": 2, + "dilation_y": 2 + }, + {"name" : "int16xint8xint32_5", + "in_ch" : 3, + "out_ch" : 4, + "input_w" : 7, + "input_h" : 8, + "filter_x" : 2, + "filter_y": 4, + "padding": "SAME", + "bias_data_type": "int32_t", + "dilation_x": 2, + "dilation_y": 2, + "out_activation_min": -13335, + "out_activation_max": 32767 + }, + {"name" : "int16xint8xint32_6", + "in_ch" : 3, + "out_ch" : 4, + "input_w" : 7, + "input_h" : 8, + "filter_x" : 2, + "filter_y": 4, + "padding": "SAME", + "bias_data_type": "int32_t", + "dilation_x": 2 + } + ] +}, { "suite_name" : "test_arm_lstm_unidirectional_s16", "op_type" : "lstm", @@ -66,4 +235,4 @@ } ] } -] \ No newline at end of file +] diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8/bias.h new file mode 100644 index 00000000..e4c3bca9 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int64_t int16xint8_bias[4] = {-3546214, -4013814, 3889696, 210988}; + +const int64_t *const int16xint8_biases = int16xint8_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/biases_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8/biases_data.h deleted file mode 100644 index 87e0e5d9..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8/biases_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int64_t *int16xint8_biases = NULL; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8/config_data.h index 5002212f..a26cf7d1 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8/config_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8/config_data.h @@ -1,24 +1,25 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. #pragma once -#define INT16XINT8_OUT_CH 4 #define INT16XINT8_IN_CH 55 +#define INT16XINT8_OUT_CH 4 #define INT16XINT8_INPUT_W 10 #define INT16XINT8_INPUT_H 8 -#define INT16XINT8_DST_SIZE 40 -#define INT16XINT8_INPUT_SIZE 4400 -#define INT16XINT8_OUT_ACTIVATION_MIN -32768 -#define INT16XINT8_OUT_ACTIVATION_MAX 32767 -#define INT16XINT8_INPUT_BATCHES 1 #define INT16XINT8_FILTER_X 9 #define INT16XINT8_FILTER_Y 4 +#define INT16XINT8_PADDING VALID #define INT16XINT8_STRIDE_X 1 #define INT16XINT8_STRIDE_Y 1 +#define INT16XINT8_DILATION_X 1 +#define INT16XINT8_DILATION_Y 1 +#define INT16XINT8_BATCH_SIZE 1 +#define INT16XINT8_OUT_ACTIVATION_MIN -32768 +#define INT16XINT8_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8_INPUT_BATCHES 1 #define INT16XINT8_PAD_X 0 #define INT16XINT8_PAD_Y 0 -#define INT16XINT8_OUTPUT_W 2 #define INT16XINT8_OUTPUT_H 5 +#define INT16XINT8_OUTPUT_W 2 +#define INT16XINT8_DST_SIZE 40 #define INT16XINT8_INPUT_OFFSET 0 #define INT16XINT8_OUTPUT_OFFSET 0 -#define INT16XINT8_DILATION_X 1 -#define INT16XINT8_DILATION_Y 1 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8/input.h new file mode 100644 index 00000000..13ada522 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8/input.h @@ -0,0 +1,321 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_input[4400] = { + 13330, -26646, -22581, -20629, 10178, -18001, -8087, 10894, -7424, 620, -3008, -16318, 1836, 20108, + -12131, 3655, 23207, 26967, -9997, -27728, 27976, 12456, -19155, -18498, 17603, 25791, 29241, -15103, + -11000, 19870, 1193, 9043, 32545, 13594, -32094, -17902, 4769, 28333, -22145, 1703, 9692, 26771, + 24419, 25395, 1992, -26161, 23938, 24227, 20599, 190, -3157, -13872, -29749, 27898, 24521, -16231, + 29365, -9311, 24795, 29242, 11440, -5561, -13372, 2213, 12473, -3568, -27826, -14873, -29889, 7865, + -22530, -7791, -755, -22042, -30979, -32646, 14702, 963, -28083, -26910, -16811, -1243, 30528, 9229, + 25028, 25849, 29212, -25750, -20451, 6589, 5872, -25979, -7175, -27781, 11229, 27440, -25945, 4994, + -6171, -24484, 27397, -8196, -1679, 32299, 32149, -11852, 15535, -26443, 31003, -6801, -8645, 27888, + 2928, -29070, 26616, 2004, 12959, 13433, 11393, -9957, -22210, 29570, -8622, 16119, -13864, 11025, + 29177, 6014, 18829, 3452, -32383, 15457, 12267, -31194, 31139, -405, 22895, -19094, -32652, -25790, + 26182, -31725, -26092, -29600, 27680, 10941, 22361, -23776, -7752, 27638, 6069, -2774, 9290, 8916, + -21365, -3249, -20142, 17282, 8994, -1227, 15154, -24976, -17033, 23255, 22345, -1749, 28521, 16612, + -30222, 5403, -14952, 18962, 19441, 27701, 11612, -32666, 30946, -16657, -24924, -10752, -25466, -23565, + -739, -1550, -7280, 20889, -25535, 12383, 18222, 22230, 19994, -9419, -28685, 18057, 20144, -3622, + 28005, 6245, 15182, -14446, -30205, -27644, -23708, 27438, -18409, -17192, 23355, 32588, -22159, -7430, + 22137, -4751, -30645, 7163, 32290, -5400, -12355, 18977, -16874, -24562, -6535, -32527, -23050, -26476, + 29062, 3149, -32310, 21574, 27385, -17991, -25721, -330, -25395, -3036, 25735, 1564, 7661, 17467, + -27581, 21520, 2389, -12320, 18737, -32610, -9956, -26360, 18171, -17035, -20775, -10907, -12524, -9441, + 19549, -21631, -18667, 20707, 17975, 26061, -29703, -14928, 13145, -1696, 30312, 25417, 31163, -3433, + 13791, 10021, 1508, -32025, -20217, 20094, -25302, -4334, -9262, -14114, 17452, -23993, -27839, -5257, + -31882, 2410, -11256, -18584, 14054, 4231, -9030, -21432, -11098, -18107, 28631, -16597, 13851, 11579, + -21770, 18321, 18367, -18269, 13742, 17693, -9622, 26025, -19333, 7792, -12784, -17347, 12431, -11214, + 13187, 11284, 25500, 10983, -10658, -2916, -18780, -25027, 9384, 5060, 13182, -4107, 11540, 4221, + 16475, 28451, -3526, 26010, 28790, 806, -5456, -17031, 27042, -25565, 25148, 13809, -19625, -6219, + 32670, -25758, 5758, 3620, 24571, 10913, 3629, -11446, 13211, 23764, 28736, -27331, 900, -27162, + -4745, -13649, 3601, -7886, -28749, -15051, -26585, -32405, -14658, 2310, -15249, 25296, -5998, 21826, + 14052, 18392, 32744, 21893, -4102, -16256, -29960, -30917, -18583, -6011, 18856, -7532, 16459, 27471, + -28495, -30479, 31856, 10099, -22989, 30012, 13482, 6437, 16058, -10004, 2562, -19119, -24975, -31104, + 310, 3908, -32056, -9066, -1884, -26428, -3355, 11915, -21442, -18306, -32015, 2277, 15266, -30138, + -19211, -2730, 24212, 16847, -32563, -18052, -23601, -23824, -25793, -19200, -11238, -6471, -11167, -14833, + -22121, 4794, -13992, 9709, -3087, -23521, 9527, 2610, 21678, 8612, 2596, 28809, 19183, 8612, + 31577, -8197, 74, 27279, 32346, -15240, 30274, -24196, -30776, 28680, -2419, -25616, 12714, 12119, + -18758, -1974, -4049, 22532, 26434, -11732, -28466, 18682, -28729, -21122, 27335, -27268, -13260, -19033, + -19544, -30928, -3913, 10419, 19934, -13696, 7148, -6493, -26973, -25198, 3467, 19822, -23278, 21765, + -30291, -14118, 596, -12066, -20792, 3523, 12038, -27050, -22190, 21717, 12804, 25913, 741, -30426, + 22542, -21011, -27061, -1887, -20836, 5167, 14864, 11519, 11426, 27159, 31958, -29616, -30264, 8228, + 12397, -29836, -13586, -7976, -2142, -29180, -21098, 27182, 19261, -26484, -12177, 19006, -8536, 294, + 18102, -30679, -31593, 21459, -17255, 30001, 18355, 25142, 1277, 3941, 26201, -5063, 7482, -19541, + 10220, 22246, -24411, 21600, 27158, 25951, -10579, 12628, 32344, 29884, -18755, -21035, -9953, 32416, + 27483, 9551, -11413, -10109, -10292, -5271, 25835, -8154, 24230, -12267, 20557, 5717, 3340, -25108, + 3442, 29652, 12984, -2055, 26782, -660, -20729, 8180, -20568, 5654, 19658, -11763, 17461, 2719, + 17025, 4988, -27475, 21578, 6281, -13661, -19234, -2116, 11224, -10496, -3827, 7827, -27784, -5056, + 8884, -6464, -3858, 5746, -9225, 1241, 18016, 11674, 7954, -28188, -20318, 20386, 13937, 2128, + 23072, 3085, 10109, 9566, -22311, 4384, -8031, -30461, -24231, 24623, -1361, -14343, 7891, 26551, + -32075, -8739, -28769, -32554, 26384, -4139, -3387, -13421, -4511, -28526, -31349, -11727, 13627, 16277, + -30598, -23961, 28759, -11158, -13888, -27090, 13024, -3539, -13164, 21090, 14396, -12554, 31138, -30018, + -24539, 22111, 7431, 7762, 23578, 19489, 14241, -5717, -1502, 13777, 6503, 22352, 479, 4479, + 5819, 4592, 9342, -11683, 27796, -3656, -1222, -6878, 13421, -10492, -28825, -9255, -11513, 19601, + -16810, -13874, -2870, 700, -25089, 14352, 12131, 29651, -12674, 735, -23432, 30968, 913, 31019, + 13241, 32743, -28581, 9068, -10786, -20423, -16675, 25040, -7999, -4092, -9628, 10686, -2225, 22641, + -26519, -1819, 108, 21994, -26692, 32283, 15573, 29870, 10021, 25608, 247, 10700, -9265, -8909, + 6411, 29875, 21980, -17294, -334, -30739, -26516, -4796, 9093, -12850, -17019, 28741, 16754, -24388, + 29296, 13569, 11416, -4409, -4116, 7077, -22308, 1231, 7300, -22076, 3688, 6980, 22464, 5822, + -26869, 13956, -28458, -25468, 11093, -342, 21410, 722, 19653, -12536, 14754, -25328, -16866, -21744, + 14155, 27872, -1118, -31198, 29872, 20440, -25192, -13144, 21621, 27999, -19424, 5051, -359, -30072, + -20955, 13808, 9350, 5261, -6101, -13791, -26964, -22204, 14367, -10914, -24802, 11773, 11224, -5755, + -25872, -27826, 15277, -24116, -8267, -14974, -29875, 28092, 1969, -17950, -17761, 21175, 29707, 390, + -14808, 11189, 26257, 11388, -349, 30241, 13691, -76, 865, 25159, -4660, -18410, 27908, 1155, + -1131, 31775, -29085, -28798, -19353, 3643, 25124, 30358, 23206, 11365, -26057, 11039, 21612, 15849, + 13326, -9707, 5722, 23875, -4842, -20614, -7032, 10361, -12102, 1707, -15399, -7868, -25386, -13724, + -5053, 30790, -29264, 29281, 1955, 14735, 10412, 22318, 30831, 28895, 28942, 10176, -23264, 20126, + 10579, -2985, -20637, -10352, -30897, 3756, -14656, 22294, 25986, -25734, -30151, 1869, 3059, 24469, + -10681, -24042, -24527, 28523, 8340, 20568, -12645, -26997, -25573, -3696, -10883, -6923, 20805, 25241, + -9526, 14122, -25637, 25487, 1839, 12421, 10449, -20659, -7520, -5129, -24500, 23435, 29411, 22460, + -4003, -17614, -4583, -26016, -1071, 21377, -30696, 1640, -21961, -16043, -14362, 9749, -10040, -22884, + -26129, 31077, 25290, -29251, 4480, 29380, -29629, 1860, -28386, -7603, -4481, -17821, -21218, 6889, + 25247, -15822, -26412, -4306, 25706, -1906, 20587, -18486, -20760, 19977, 21370, 4103, 16334, -9154, + -19661, 4365, -260, 9899, 13356, -6582, -17220, -21667, -19335, 6321, -7516, 15236, -2504, -8644, + 18533, 12770, -23490, 24781, 17528, 764, 15313, 13321, 1747, 3644, -31635, -5947, 29283, 31873, + -32162, -2947, 11526, -9366, 5829, 19624, 17169, 4441, -10637, 19797, 27250, 29660, -1269, -4189, + -7467, 32085, 27196, 16809, 17034, -29000, 26568, 3004, -16935, -13597, -6009, 6197, 31192, 25492, + 5042, -2982, 26673, -2664, 30470, 23924, -30328, -21471, -2042, 2246, -26654, 25848, -11162, -25952, + 3071, -20928, 8752, 28826, 22391, -24259, -16929, 26748, -5921, -28143, -24847, 32664, 27299, -25589, + 16456, -1055, 16367, 25419, -11188, 3606, -24480, -5486, 24692, -6957, -27995, -18286, 29434, 30806, + -27691, -25779, -32046, -3861, 24436, -3242, -3117, -10241, 6160, -26088, 16579, 12905, 32152, 24785, + -9517, 8747, 26081, -20774, -25310, -5590, 27729, -25311, 28878, -22089, 20857, -32085, 31535, 2229, + -3822, 19570, -25933, 25992, 18755, 20175, -5751, -32483, 29156, -23222, 4751, -12603, 29001, -650, + -16221, 12023, -29208, 16501, -3972, -16162, 15089, -5759, -13597, 20392, 3187, 24802, 21987, -5797, + 13564, -31225, -22907, 16304, -10701, -17103, -15372, 24753, -19950, -11519, -15031, 27691, 24547, -25136, + 23183, -10383, -16141, 21733, 16959, -15409, 25220, -3833, 18597, 23985, 29484, 18500, 10426, -14344, + 32121, -17365, 27547, -2548, -11895, 23541, -221, 21876, -4298, -912, -21212, -2727, -19015, -25813, + -6879, -10672, -16003, -32078, 24551, -4227, -30435, 15835, -17671, 5877, 31450, -1927, -11980, -17865, + 5286, -14394, 29656, -3194, -10808, -21133, 2167, -6945, -7715, -4406, 14426, -13864, 22749, 1527, + 1531, -18145, 2757, 30814, 13850, -26210, -22630, 665, -22425, 13583, -8652, -17591, 14224, -4663, + -10332, 24701, 9826, -8467, 23063, 29877, 16578, 30855, -25638, 2510, -25108, -29763, 10237, 14595, + 29882, 10065, -7407, -10477, 5622, -5599, 17563, 10718, -27460, 16037, -16446, 11467, -11698, -18570, + 26898, 2196, -6065, -3828, 30628, -8266, 4986, 11623, -10980, -15792, 10153, -5059, -20541, 1692, + -29598, -14312, 16919, -14557, -11842, 1054, -28494, -15221, -18244, -3761, 30470, 17439, 4415, -7913, + -21336, -25140, 23931, -5276, 445, -22299, -3858, 1559, 2252, 8640, 26834, 3661, 25582, -31592, + 2326, 32530, -22831, 22220, -31049, 651, -10000, -18591, -13562, -3728, -933, -3439, -27984, -12992, + 19040, -8595, 8964, 2964, 29936, -27029, 4300, -29490, 30685, -22764, 10701, -5127, 3447, -6886, + 10921, 13529, 22993, 1056, 25165, -20904, 28666, -1747, 21212, -15366, 10128, -12977, 9528, -6807, + -13439, -7846, 8705, -14013, -25184, 7418, 31577, 18677, 1878, -28251, 31977, -18411, -6636, 32450, + 12686, 27157, 2363, -18035, 17789, 32302, -5670, 23315, 7184, -20344, 5191, 23846, -22469, 17364, + -6404, -26462, -23918, 595, -31334, -25215, -9100, -23778, -23207, -23497, -5656, -669, -27170, -6862, + -22468, -8259, 18596, 5432, -25964, -8573, -25450, -32200, -26766, 4483, -25438, 8451, 23671, 24680, + -4050, 28271, 22703, 22767, 13063, -30747, -2726, -31146, -23616, -3900, -31026, 1527, -27507, -26572, + -13919, 27627, -11575, -25154, 5436, -3043, 11044, 2601, -17567, -23995, 29828, -2702, 2716, 9288, + -1062, -9596, 27741, -25850, -4452, -23189, -153, 14466, 9329, 1746, -17207, -13481, -32203, -15644, + 7734, 24218, -22648, -15547, -19865, 14018, -17582, -32154, -29404, 2619, 10703, 21318, 10430, 9832, + -13064, 25519, -2316, 8232, 18452, 10254, -18876, -18902, -29088, 5304, 15316, 13932, -11977, -21791, + 25394, -22754, 24475, -8020, -23297, 13600, 9853, -29530, -5286, -1795, 18038, 23158, -22776, -9839, + -11834, 8426, 5484, 30673, -19654, 19260, 2431, -9588, -17649, -21910, 6139, 15479, 28647, 3846, + -28694, 13437, -28868, -4689, -18433, 23362, -9819, 11540, -5176, -22788, -10644, 9594, -24456, -31914, + 4852, 28201, 4479, -24825, -14801, 5191, -8754, -20961, -26708, 31513, 29891, 4723, 17268, 28197, + -18039, -32264, -14833, 21977, -16035, 20439, -21024, 27676, -24012, -30054, -6116, 9944, -6532, -17121, + 8856, 30667, -29620, -6670, 3586, -22116, -22221, -19234, -29086, -22758, 16647, 25130, -798, 6045, + 26215, 31065, -1415, -5883, -13704, -20969, -22690, 20025, 383, -9066, 27251, -24988, -6366, -14496, + 4239, 26471, 15456, 31775, -15143, -27371, -17055, 2753, -17245, -17848, -28668, 8082, 5221, -20608, + -13638, 6459, -29652, 28477, 2727, 13419, -14644, 2887, 21120, 21910, 28769, -5741, -5203, 25866, + -625, -31575, 31345, -28275, 30806, 28253, -12913, 8227, 15239, 10750, -31070, -30638, -10113, 20003, + -30775, -1990, -11017, -14687, -8083, 28630, 2339, -26766, -3023, 3915, 21678, 9196, 25595, 32372, + -4437, -15178, -25577, -23368, -3774, 30833, -20726, -19356, -1009, 7537, 25292, -5528, -9159, -5394, + 8116, -28439, 13447, 21662, -10649, 14885, -22456, 27626, -14556, -10063, -13374, -7977, 20495, 2233, + -954, -31415, -26970, 15752, -32734, -3919, -22277, -3112, -8798, -19770, 27391, 21907, -15755, 13220, + 10900, 25546, -25541, 15043, 31216, -24725, -10566, 8239, -4470, 24631, 13712, 6611, -27227, 7500, + -21334, 24790, 29446, -7898, -11243, 14135, -4744, -4714, 10998, 18226, 31330, 3297, -15409, -31297, + 7085, -10145, -14130, -24517, 12125, -18106, -3861, 11683, 31817, -32272, -8264, 4911, 10269, 6935, + -28979, -15300, 27692, 22470, 31691, -18477, 20713, -2054, 19935, -20868, 25548, 4639, -9896, 5889, + 23707, 2858, -12272, -31012, -32127, -24291, 3280, -25501, -23581, -10297, 178, 24102, 196, -7879, + 10825, -2651, 13867, -3427, 26008, -1935, -20505, 22482, -6810, -3279, 25619, 4024, -30802, -13176, + 28420, 3256, 14185, -8072, -23978, -7532, -21093, 13461, -19084, -31480, -12489, -11511, 18455, 32270, + -17413, 32292, -1514, 5463, -9329, 19623, -13609, -6329, -9518, 2413, -15506, -32718, -24842, 26815, + 28694, -18528, 26141, -29058, 24041, 5601, 27593, 32445, 29924, 4701, -31807, -21114, -14483, 29335, + 6203, 23612, 17514, -16407, 20846, -234, 32413, 10060, -19513, -20320, 5193, 10560, 29688, -28925, + 30372, 28818, -3476, -15147, -24723, -2803, 8520, 19859, -28663, 1743, 29619, 28122, -7953, -19608, + 571, -13839, 707, 18182, -16448, 1805, -1873, -14059, -16620, -3924, 23397, 4284, 28522, 24499, + -6635, -792, -2238, 5848, -4681, -25813, -18707, -24537, 14161, -31457, 22344, 1410, 21498, -26016, + 18028, 15292, -3594, 16140, 17984, 6510, -4106, 17134, -6274, -18118, 25890, -18605, 13304, 11352, + 15157, 32754, -11558, -9350, -14934, -32746, 31665, -18634, -22801, -31323, 27242, -70, -14229, -16831, + 2387, -3455, 22763, -16083, -8222, 6709, -4651, 32424, 20322, -17534, -6613, -29488, 12191, 24663, + -24716, -23592, -3577, -57, -25050, -18953, 24329, 9773, -11907, -10070, 876, 25109, -13888, 19911, + -29702, -31911, 170, -16032, 12854, -29541, 3369, 2544, 759, 24577, 31845, 23646, 17544, -2526, + -14072, -4809, -13128, -12277, 9954, 6480, -982, 20318, 16686, 28362, 1535, -3373, -1604, -27383, + 30034, 19672, 27310, -3929, -15928, 26234, 17094, -2864, -11182, -18627, -9372, -820, 18211, 16682, + 30926, 23108, -18039, -4474, 23547, 15590, -32414, -29631, 1285, -5930, -26460, 5689, 25690, -2431, + 27420, -21409, -4286, 26414, 2814, 16728, -29729, -9170, 13494, 5062, -25242, 17642, 4004, -14910, + 3892, -9602, 24267, -10965, -4078, 1649, -30177, 21474, -28381, 9358, -18211, -23618, 11457, -15949, + -4484, 140, 18241, -19353, -11248, -23887, -25689, 7032, 6275, -21212, -19327, 2995, -23655, -26437, + 11512, -18704, 17240, 9215, 12131, -19920, -31563, -24899, -20845, -8211, -28467, 3292, -29758, -11385, + 473, -25256, 26422, 14655, -12817, 17604, 8750, 2340, -11301, 20558, 3480, 30676, -27288, 19906, + -5368, -27743, -11350, 1962, 29239, 17548, 3115, 30352, -17560, -20781, -8778, 30466, -29173, -9284, + -10223, -4501, -26269, -15351, -13469, 9635, -29562, 9513, 20483, 5323, -22498, -21784, -625, -30877, + -29799, 10617, 26055, -16908, 21843, -19763, 25343, -261, 23780, 16919, -929, -5739, 3097, 14819, + -18242, 7395, 28644, -27717, 11504, -28838, -24060, 29475, 27068, -5438, -11040, -27048, -8472, 20914, + 32497, 19950, 16779, 15173, -31562, 9181, -13716, -21050, 22772, -19003, 25953, 18330, 5791, 10125, + 11290, 7190, 22055, 27379, 28370, 23548, 11320, 24689, 10066, 12364, -12335, -12652, 17392, 30347, + 27260, -17437, 14899, 14935, 20093, -18540, -605, 5170, -16344, -27880, -17664, -20189, 26131, 13230, + 8364, -743, -5900, -24898, 3611, 5650, -13029, 32450, 6036, 2285, 10322, 10339, -21712, 10568, + -18392, -19036, -10786, 26993, 17700, -1038, -28656, -12795, 16209, 9814, 832, 1413, -2823, -5838, + 5704, -20509, 8031, -24049, 26257, -10579, -28548, 20173, 27605, 8930, -12907, 3246, 5921, -27449, + -993, -21806, -8410, 883, -13474, -29063, -32362, -13781, -6321, -796, 4716, 20516, -16760, 24023, + -26074, 9881, 10590, -11847, 3475, -15323, 29700, 9317, 21313, 2983, 3697, 25112, 456, -19830, + -16313, 25857, -23715, 32597, 7135, 13180, -22759, 10568, 14339, -7314, -15873, 28467, -24065, -8556, + 720, -5754, -31717, -32109, -8572, -30035, 2541, 20409, 14573, 26911, -10811, 24319, 12523, -6620, + -24300, -30095, -12980, 6426, -21695, -5589, -13249, -24627, -28598, -11426, 27024, 3981, -10118, 27474, + -17193, -22308, -907, -21558, 32680, -27422, -6097, 21710, 20242, 26184, -7513, -28575, -25040, 9854, + 22993, 28067, -25848, 28711, -15215, 17058, 23595, -14569, 7667, 7381, -29209, 12378, 24820, -27717, + -17232, 1205, 18030, 4324, 5135, -24165, 32089, 967, -28502, 32077, -21558, -3738, 2538, -24555, + -26846, 12605, -2083, -10229, -24341, 8206, -21525, 9673, 11595, 26520, 15371, -30800, 9277, 18655, + -17526, -10369, -21479, -16203, -3182, -28229, -29724, -18076, 25659, 10627, -4442, 3801, -11992, -25135, + -24682, 29162, -27466, 7492, 17179, -26252, -5650, 9108, 22632, -895, 20286, 26297, -29947, 1624, + 26216, -12303, 4227, 31026, 28017, -3467, 23095, 6653, -28309, -7916, -28518, 10291, 13662, -27158, + 7432, 21878, -7631, 17552, -8505, 20747, 26345, -16340, 15917, -29112, 27565, -18707, -19833, 30579, + 26502, 12708, -10300, -5168, -18549, 18376, -412, 16788, -26508, -10161, 15220, -15475, -11455, 11525, + 19589, 3521, 26718, -5678, 24714, -11663, 21478, 860, -25955, -11218, -29836, -115, 18218, -4540, + -14436, 14877, 2168, -26159, -30710, -431, -12067, 30571, -10075, -18127, 27338, 12031, -20805, 26176, + 362, 5289, -23670, -29646, -6770, -27238, -14678, 10598, 32554, -20215, 24431, -14211, 24269, -7439, + 1461, 1740, 13259, -2284, 7258, 27413, -13798, -30058, 13416, -25545, 11973, -24405, -21159, 31526, + -14429, 8407, 6625, 24620, 6407, -13644, -18911, -11149, 18803, -24091, 13277, -9817, -8984, 27837, + 20588, 24762, 26681, 9413, 14461, -4554, 32337, 24663, 18624, 1301, -1992, 15090, -28909, -11467, + 24474, -7915, 9181, 7489, -26743, -6236, -4973, 17323, -26214, 5854, -29144, 13142, 24, 18570, + 6751, -314, 4320, 27571, 29194, -18651, -24079, 23334, 1712, -26286, 19687, -22311, -31031, 10980, + 20877, -28676, -17487, 19497, 5572, -10524, 16445, 16021, -127, -29337, 1910, -26017, -6621, 16713, + 18017, 9699, -1747, -10224, 22343, -23668, 2826, 5448, -4644, 9036, 11413, 5032, 8077, 17549, + 16592, -6112, -27446, 4760, 2949, 29509, -23508, 23385, -8014, -18783, 14198, 13884, 31037, -23208, + 26358, -24098, 15831, 4981, -393, 17775, 28512, -11626, -23525, -30979, -18924, -1135, 19106, -535, + -23956, 20779, 28766, 18504, -25518, -23727, -10335, 7757, 29521, 28415, 13722, -17736, -10570, -29079, + -20431, 22658, 16062, 8238, -20300, -10316, 9794, -18606, -16108, 31146, -26559, -17383, 7228, 4735, + 16658, 6990, 636, 8664, 28223, -2040, -20886, 6897, -1510, 10817, 3022, -30431, -23762, -14762, + -6196, 24214, 4196, 7479, 10961, 1043, -16505, 23841, -29977, 18479, 5070, 24933, -18162, 10352, + -17960, 16560, -30953, -6439, -26640, 15005, 2999, -9794, 10661, -2022, 16639, -32110, 30698, 27229, + -26073, 20126, -17797, 12608, -21074, 25532, 166, -10055, 24402, 3205, 18032, 22925, 26129, -5648, + -26934, -2688, -16826, 24070, 14578, -1818, 13764, -30290, 12929, -12298, 19964, -20780, -15713, 13334, + -26473, 23164, -32171, 3562, -9163, -7958, 21594, -27541, 31574, 25526, -6037, 28400, 30596, 4808, + 18716, 27409, -8469, 22115, 16459, -29499, -12749, 4136, 28998, 26540, 6219, -11234, -7325, 22944, + 22506, -5156, -26494, 12512, -27867, -3385, 28656, 26401, -9237, -7836, -21083, 24261, -4961, 23448, + -8034, 30344, 17564, -18894, 11760, -31121, 25530, -7901, 13907, -8950, 13814, 28087, 10266, -29317, + -3159, 23397, 9719, -17343, 18178, 31870, 7335, -11342, -21443, 24440, 20011, 27935, -1517, -23324, + 13715, -1662, -13220, 9066, 993, -3132, -28610, -8730, -2399, -24335, -24257, 8375, -21421, 17816, + -14786, 16718, 5055, -14075, 30217, 762, -4696, -7628, -17032, -19246, -27491, 30005, -2650, 7712, + 27873, 10967, 23853, -31819, 31587, -20250, 8877, -13098, -24323, -8595, 23693, 10173, -10958, 3096, + -22880, 4137, 27942, 22776, -6741, -4503, 16775, -20263, -19180, -23548, -32266, 24460, 28983, 19277, + -10039, -27208, 29265, 19136, -828, -18682, -9960, -15534, -19903, -14178, 32470, 31328, -1635, -22367, + -27476, 27057, 16280, 11745, -14498, -9976, -1024, 2209, 12122, 18057, 24336, 16650, 11208, -27233, + 8486, -3046, -28667, 10441, -10338, -22635, -1781, -4126, -29834, 21340, 10296, -14907, 8013, 13755, + -13534, 1629, 23035, 17091, 2493, 9017, -15967, 7866, 25764, 28144, -21470, -22784, 17186, 5911, + 27183, 10139, -3869, -23744, -31800, -31120, 24973, -11235, 19295, -23021, -9553, 14981, 4858, -21896, + -23483, -10378, -30863, 1296, -15369, -12958, -15252, 31363, -8187, 16422, -20773, 15485, -30823, -12102, + -7498, -8482, 422, 27611, -19739, 23034, -32754, -12921, -6142, -7774, 24605, -1361, -6244, -6423, + 27802, 15136, 31148, 12758, 27990, 31051, -17484, 8142, 25976, -2357, 12466, -1781, 19342, -17199, + -7064, -28241, -19213, 22815, -16463, 10246, -22074, -14311, -19381, 5126, -22670, 23381, -6081, 11843, + -19723, 1194, 1661, -24384, 3083, -26574, -367, 11401, 16149, 24749, -5866, -26513, 26621, 30437, + -25078, -10455, 17461, 6448, 22638, -12732, -15986, 12836, -23652, 7859, 4837, 8419, -9157, -21864, + -8467, 22694, 19433, 14949, -18668, -13761, 30075, 26098, -24643, -9196, -10010, -6443, -6874, -13272, + -26225, 3331, -23233, -14682, -5116, -27351, 18126, -22370, 12064, -21022, -8241, -18646, -32038, 1312, + 24845, 9760, 5798, -5145, 9717, 3563, -18072, -7530, 24854, 10791, -18309, 30331, 32052, -17436, + -2276, 14242, 8457, -15947, -5585, -20495, -1022, -17179, -911, 5524, -8296, 30454, 21365, 26378, + 9426, 28839, -4707, -9646, -29586, -6745, -18571, -8401, 31774, -5520, -27322, 1321, -28784, 21704, + -3086, -10008, -209, -17934, 3788, -16199, -1039, 17424, -13357, -18793, -9776, 14408, -27184, -17644, + -25279, 27984, 9177, -31728, 9534, -9059, 1284, -4795, 21544, 1726, -12531, 15189, 1754, 21959, + 22850, 10638, 30737, -29269, 31517, 15752, 5679, 14001, 11949, 231, 16913, -23088, -13660, 21701, + -26864, -8453, -15188, 30292, 25629, 13606, -26358, 17003, -18977, -13016, 6824, 30896, -534, 18657, + -13428, 25848, -11497, 22472, -16641, -21722, 23754, 30464, -5030, 14363, 24706, -23361, -29696, -23480, + -9661, 1663, -1081, -31681, 17973, -1202, -21638, 1816, -11609, -52, -15263, -16914, -22852, -5115, + 2315, 15054, 4404, 32702, 2185, -22211, 25734, 11761, -23492, -6320, -30674, -24767, 23526, -21547, + -2818, 14326, 10900, -32191, -23248, 18952, 23201, -19923, -16080, -582, -14366, 23325, -8161, 31570, + 29950, 5852, 27615, -16494, -28557, -4697, 27993, 23993, 29271, 32052, 30495, -11729, 15960, -23332, + 10919, 27428, -30583, 17950, 31416, -22352, -13347, 9815, -7944, 10204, -16505, 17807, -9553, -3447, + 19140, 11925, -28449, -26475, 23825, 25909, 17097, -18981, 31835, -21832, 11165, -24889, 18728, 18793, + 30465, -32014, 16691, 3765, -2260, 31902, 20222, -22617, 27493, -19486, 26958, -8437, 3230, -28839, + 25073, -827, 5789, 2098, 9572, 27722, 2855, -24748, 17222, -3554, -1484, 21907, 17162, 6953, + 7056, 26565, -28652, 3937, -4066, 975, -12236, 5795, -13913, -14188, 31519, -9094, -4664, -9567, + 1318, 11824, 23508, -10574, 15338, 6165, 9746, -9984, 5505, 5752, 11261, 19303, 17090, -17586, + -17076, 4582, 32422, 28173, 5930, -18947, -26216, -29989, 4643, -20267, -1053, -28699, -15579, -5567, + 21955, 25152, -4172, 15724, 28375, -24533, 23300, -25254, -2437, -13133, -23386, 12185, -15072, -13025, + -28918, -10672, -23787, 4439, -21008, 4736, 4437, 3692, 3419, -8307, 31962, -23085, 2655, 2411, + 17737, 31693, -966, 15360, 24824, 2829, -27612, 7286, 9249, 31751, 5499, -15605, 17884, 18481, + -1984, 2975, -17806, 26790, 28361, -12297, -27093, 10890, 29061, -17434, -19962, -16736, 25705, -17394, + -30801, -1354, -24904, 12284, 1445, 8491, -18464, 25505, -13921, -13526, 25761, 12458, -2714, -26963, + -8702, 7933, 2624, 20888, -31152, -28573, -17276, -8442, -32724, -2486, 16876, -16082, -3956, -9169, + -28668, -4632, 4971, -22718, -8864, -16373, -20475, 31130, -16037, -14485, -3559, 1871, -5690, -5488, + -10160, 11807, -31059, 23516, 9027, 12629, -11000, -2221, -14755, 5869, 30583, 1611, 26523, 9483, + -31862, 9160, -24383, 30546, -24900, 30359, -31812, -32314, -14062, -14424, -32642, 27137, -24657, 1888, + 5732, 4533, -6684, -3197, 19864, 17409, 9853, 2260, -3359, -9038, 20670, -32563, -9431, 3702, + 28520, -13510, 28650, 13489, -3045, 29895, -23419, 7842, 11903, -6560, 23136, 25469, 375, 26756, + -7170, 11387, -32004, 16094, -8389, 16503, -24383, 5397, 29670, 10505, 11515, -7285, -10102, 6478, + 26903, 24420, 18237, -24546, 13175, -2545, 25607, 26217, 19365, 5542, 32757, 28079, 18673, -25225, + -4156, 14731, 22542, -23208, -11493, 12964, -16837, 20753, 26610, -8652, -21139, 26224, 2782, -25785, + 1127, 6845, 30552, -27002, 21354, -17948, -21745, -22153, 31781, 3554, -8432, 31412, -28801, 28481, + -24904, -29089, 9400, -15961, -12295, -13083, -17768, 16935, 27182, 7795, -1867, -23646, 25292, 24881, + 9848, 5976, -22191, 5341, -2222, 26473, 27748, 2015, -8794, 13004, -19590, -2984, -8422, -22633, + 31513, -1386, -14507, -18195, -9005, -30753, -1604, -22820, -2359, -26549, -8382, -6432, 32712, -23793, + 27483, -5758, 23183, 5182, 24813, 19769, 11496, 13451, -20386, 18336, -25394, 17627, -20703, 2511, + -19001, 32474, -25948, 2134, -22000, -4722, -6715, 24413, 9306, 7524, 20874, -30039, 11414, -17081, + 19912, -28288, -25444, -14594, -1623, 5668, -9783, -30799, 22654, -9884, 23121, -27717, 6491, -20701, + 18683, 6218, 21899, -28781, 27671, -8462, -30155, -26053, 22770, -20005, -12095, 30932, -13990, -21905, + -4825, -695, -13, 20011, 30578, 435, -23659, 17085, -28118, 17281, -5614, -12271, -10741, -10800, + 21243, -28598, 1897, 19099, -25557, -14679, 14109, -23445, 17682, 8677, 15122, -1707, 7155, 15836, + 4636, -31274, 30603, 17387, -17078, 9455, -17337, 13279, 13563, 20772, -30500, -11297, 4646, -26165, + -30537, 31197, -13050, 12903, 14426, -3707, 30094, -26661, -12041, 3273, 5844, 14469, -19292, 1289, + 20037, 31069, -6795, 15287, -2597, 8267, 18653, -28468, -19202, -1843, 32421, 16894, 28070, 12149, + -2557, 31800, -28693, -22517, -30587, 16466, -26696, -26385, -27636, 9914, 29402, 1868, 4137, 14433, + 8803, 17801, 25571, -22804, -20038, -30258, 4378, 29251, -14284, 1396, 16040, -16634, 685, 32397, + 1235, -13505, 17, 21426, 21768, -8955, -13313, 25980, -8410, 12098, 1519, -28096, -3897, 14382, + 24650, 13572, -14341, 21536, -15404, -5984, -23059, 13519, -17094, 21984, -9296, 1961, -2233, -972, + -7529, 12035, -4113, 16548, -20886, 28516, -4267, 23062, 10667, 20030, -25809, -8745, 1277, 11677, + 3900, -2005, -14443, -6212, -23092, 22453, 8593, 12351, 6721, -3562, -11628, -28666, 14265, -25563, + -27039, -247, 23933, -16736, 7330, 23297, 27123, -1737, -29184, 2574, -21682, -25346, 16155, -24433, + 24026, -18796, -20823, -26899, 10909, 16800, -28843, -9514, -24495, -10725, -1143, -1664, -4575, -11161, + 4095, -16995, 32084, 29131, 6680, -28729, 27788, -28179, 1698, -15016, 6619, -32511, -27823, -5451, + 22496, 14517, 26717, -6138, 15340, -1405, -841, -7474, -32532, -18081, -12022, -9612, -1255, -1536, + 32712, -18694, -22208, 10165, -3713, 7663, 3107, 31846, 21622, -30671, -28444, 20757, 13511, -19132, + 20399, 31273, -4847, -28447, -32617, -20464, 30692, -15022, -5703, 24657, -31247, 4609, 10788, 24717, + -24125, -12603, 27343, 8113, 1504, 12295, -10153, 25249, -25704, -17306, -23156, -5258, -31557, -24808, + -7172, -3660, 25525, -29679, -5529, 14870, -29773, 26125, 26965, 2413, 24508, 19162, 13169, 8836, + 22425, -13226, -23072, -2921, -30604, -5523, 19188, -4094, 21266, 14968, 25018, -19474, 29052, -17721, + -17626, -17292, -9446, -18897, -4356, -7124, -5474, 18388, -11083, 11775, 9635, -7954, 4914, 10480, + 5307, -1501, 18414, 2381, -4162, 16817, -6170, -5899, 3434, -6810, -2167, 29698, 8516, 20451, + 26718, -1932, 20998, 8921, 16961, 3158, -25566, -28130, -26529, -23776, -30611, -213, 8713, -11054, + -3887, -7721, 28826, 5159, -18265, -4314, 12924, 5862, 22980, 13459, -2146, 21775, 32365, -2063, + -27258, -30382, 7786, 27616, 29115, -3781, 31632, 13715, -16623, 30759, -5617, 5046, -13026, 30605, + -6481, -32391, 24485, 13501, 24889, -3368, -21286, -18157, 1655, 3529, -31650, 22646, -9409, 18818, + 10720, -3602, 22665, -2758, -9871, -2330, -21772, 15004, -26842, 15007, -15968, -2440, 20151, 19192, + 26852, -25651, -30239, -11457, -4514, -6920, -28097, -28514, -13874, 24910, 30741, 31338, 15585, 2931, + -1805, -12120, 23656, -8587, -22786, -24319, 172, 19665, 12987, -1894, 4602, 13619, -4380, 2810, + 3697, -11758, -4552, 23244, 22807, 16010, -1758, 711, 15740, -372, 15769, -13488, 17313, -11231, + 7778, 21022, -28911, -9173, 12547, -10255, 19542, -3563, 16271, -16037, 15145, 21635, -24292, -17870, + -17926, 8480, 9271, 21618, -30834, 17261, -4212, -24523, -18237, 6197, -16152, 19170, 22685, -7622, + -1111, -5500, -27315, 9012, 28977, -22402, -5955, -31869, 24250, -32047, 11515, 19818, -23576, -2784, + -18684, -3902, -22333, -13384, -20247, -8801, 31563, -9436, 32238, -25508, -15744, 11455, 3661, -31049, + 20513, 24832, -21215, -6230, 19670, 2278, 4329, 21934, -20447, -10363, -20820, -18360, -21731, 26399, + 5880, 19087, -31869, -15571, 22731, -15162, 21685, -13052, -9350, 4302, 15238, -6380, -10140, -31156, + -14191, 20935, 27364, -4673, 5118, 6904, 18213, 9195, -14623, -12352, -19340, -28069, 1843, 22236, + 23176, -31258, -7871, -7273, -26061, 13992, -26572, 28209, 21364, 8830, 164, -28077, 1544, -26918, + -26221, -26610, 3562, 23173, 22952, 10700, 867, 1657, 29253, -30869, 30980, -25271, -2444, 75, + 22128, 9930, 2067, 30278, -31474, -2793, 21662, -1799, -18124, -28946, -29910, 24319, 27912, 4450, + -10382, -15708, -1429, -25058, -724, -1161, -20930, -19442, 22972, 8961, -31917, 27749, -16472, -8063, + -24966, -20137, 10059, -20673, 29179, -4769, -20758, -10901, -20749, 28059, -1803, -32597, -23921, -3481, + -18972, 593, -21946, -21465, -29664, -26603, -30908, -7350, 23478, 24114, -8298, -23905, -18920, -18152, + 2371, -11767, 12967, 6001, -28367, 9237, -25770, -19317, -1878, -21560, 30679, -12873, -10779, 23257, + 13200, -29530, 10924, -23610, -9586, -8007, -2529, 17955, -10403, 12140, -9680, 18580, -8292, 2322, + 25266, -25598, -816, -26617, -32616, 6451, 18883, 21027, -6218, 1398, 20189, -28840, 13403, -6105, + -18613, 20928, -25818, 4421, 15003, 29484, 8239, 15774, 19426, -7562, -955, -22761, -4144, 11383, + 5273, 483, -8333, -16935, -20441, 4882, -15598, 12027, -6542, -14534, -25962, 16308, 1759, 32717, + -29878, -24502, -31119, -20634, -14114, 31872, 13302, -4320, 29553, -13723, 26193, 21781, -13065, -18847, + -4662, -22161, -4317, 2950, 32179, 26707, 9558, 9520, -18694, 16131, -23679, 7400, -30474, -27328, + -9386, -13632, 15097, -22630, -19537, 11782, 20034, 23942, -13301, 18143, 5306, -30617, 4227, 6600, + 20383, 2907, -28100, 10487, -4322, -1762, -20637, -6981, -5008, 16325, -27784, -32093, 12550, 26230, + 3632, 29599, -13111, 27319, 8183, -7254, -3850, -4418, -5210, -17614, 13417, 17901, -7861, -23541, + -25156, 643, 3235, -27013, -11474, 30979, -32668, 21947, 29724, 19818, 24222, -428, 12840, 157, + -849, 16531, 12565, -11325, -4949, 29588, -18816, 5266, 10714, -22615, -12651, -23463, -21249, -5572, + -29189, -18657, -29049, 4346, -19005, -8853, -4811, 25479, -13410, 3045, 7973, -4463, -31660, 18080, + 12617, -5011, 20445, -32755, -10521, 16216, -22196, -3560, -2663, 21396, -11770, 30013, 28911, 3913, + 669, 7024, 26997, 11246, -12802, -4384, -24029, 11432, 4817, -18025, 30010, -23222, 19826, -18362, + 1007, -25677, -2809, -14647, 8069, -16848, -27420, 7356, 24854, 3886, 27148, -18818, 16861, -891, + -7260, 16328, -12171, 18570, 24542, -5662, 5346, -16248, 6939, 13366, -18175, -6641, 10316, -27470, + 29682, -2102, 19062, 19937, 3234, -5505, -11490, -32331, -21603, 20495, 26252, 12034, 8488, 14164, + 14623, -29822, -25240, -23686, 29490, 22194, 16394, 8717, -16149, 20834, -17423, -7657, 18523, 27183, + -23552, 4699, 30274, -24553, -17021, -7809, -12147, 3695, 17298, 8856, 31023, -13611, 8674, -20762, + 18813, 4762, 2175, 9978, 10483, -8374, 9310, -10870, -25496, -17602, -30039, 25435, -1421, 25504, + 28427, -28138, -21473, -31543, 8789, 23252, 10301, -29723, 2713, 5910, 32088, 6741, 9959, -6779, + -9625, 11354, 29491, -1667, -15513, -31273, 13547, -19258, -5873, 11937, 16324, -32572, 15279, 3500, + 7253, 10458, -32668, -25215, -29801, -7173, 20232, -26797, -31382, -23809, 29220, -23245, -28787, -10134, + 6509, 2224, 23476, 7224}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/input_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8/input_data.h deleted file mode 100644 index a9857dce..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8/input_data.h +++ /dev/null @@ -1,321 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int16_t int16xint8_input[4400] = { - 2258, -12216, 21955, 28148, 24627, -27487, 10259, 1230, -22204, -20857, -4155, -11625, -12677, -16925, - 20804, -2514, 30927, -8927, 31309, 11732, -15134, 4402, 9163, -27708, 4394, -28138, -31148, 12312, - 15482, -24145, 30356, 30332, 5787, 32650, 9767, 9098, 9892, -3355, -4309, 28572, 11701, 11084, - -14139, 16324, 11331, 7507, 14202, -19123, 5268, 7244, -12431, -12248, 9727, -17937, -336, 26839, - 21250, 21610, -14691, -8927, -10025, 12339, -19596, 4049, 20204, -12937, -27421, 17454, -15713, 1844, - 14225, -32744, 20568, 4312, 31329, 30059, 161, -12642, -23241, -2821, -8344, 18918, 25202, -1485, - -2434, 6275, -5036, -15151, 32710, -17041, -20987, -19723, -17316, 7476, 22161, 24685, 11959, 22263, - 19819, 12886, -18595, -16198, 29482, 11992, 6715, -26602, 12559, 4968, 9046, -17713, 21326, -28775, - 25570, -7374, 28219, 10499, -3695, 13442, -11035, 16418, 24432, -12198, 19648, -2747, -31244, 32200, - 12354, -8623, 21864, 4109, -15097, 13314, -19738, -6218, 25493, 105, 15966, -14539, 24697, 23697, - -6783, -22239, 5334, 30959, -7932, -30297, -10048, -2983, 15982, -25128, -30039, 27386, 11554, -21482, - 6832, 959, -17909, -11444, 23960, -26539, 30792, -23153, 26795, 29854, -21395, 23582, 15220, 13625, - 7170, 3548, -2081, 16865, 23240, -17971, 20097, -18667, 16294, 12263, -20768, 20227, 12646, 11252, - 16940, -32242, -24922, 1394, -2967, -14485, 16886, -21016, 1822, 17047, -25726, 7505, -15337, -31020, - -16606, 11889, 31023, 13219, -25931, 5486, -30148, 22892, -16340, -29886, -18678, 23338, -4706, 3020, - -14704, 24188, -26789, -10494, 20445, -2109, -26602, -31952, -1866, -14889, 19340, 27187, 25327, 17627, - 30428, -28544, -28249, 6444, -4327, -18179, -23642, 19621, 19011, -31294, 4899, 31259, -17601, 14607, - 21903, 6354, -13802, -18978, -32115, 3732, 29904, 4626, -23383, 28943, 9113, -25375, 8677, 2850, - 8488, 5178, 31903, 358, -23079, 8366, -11574, -8258, 9291, 17477, 13631, 10186, 8484, -31566, - 266, 1961, -22533, 21891, -32375, 4038, 26877, -29427, -25273, -14620, -13268, 26394, 11802, -24003, - -8076, -17636, -3618, -29911, 16936, -2277, 2268, -10356, -19998, 29313, -11621, 29555, -12342, -7494, - 28477, -16251, -4086, -12346, 30665, 11081, -20061, 17093, 14015, 7315, 26903, -11503, -18209, -21609, - -27691, -6059, 24874, 15918, -10697, 5044, -19347, 17421, -7187, -18499, 28595, -25618, -17000, 2013, - 14874, -19802, 9446, -29981, -21293, 4382, 17021, -17156, -32605, -3929, -18561, 8999, 28740, 15901, - -22235, -31659, -27817, 236, -15083, -13559, -8535, 1339, 29264, -6857, -15438, -30669, -31874, -10301, - 8111, 3394, 20311, -4880, -30970, -1774, -30765, 24651, 30600, -21806, -11209, -13074, -24038, 16325, - -455, -19716, 8164, 26033, 24054, 10296, -28583, 9374, -13281, -2565, -9242, -2432, -20762, -21777, - 1608, -13256, 23098, 10212, -24395, 2988, -6990, 24210, -24282, -150, -11756, -15869, -10787, -11019, - -32134, 20143, 17901, -29358, -24804, 7701, 23521, -21720, 19618, -19714, 24610, -24895, 14481, -27610, - 6142, 1560, -7062, -5597, 25607, -7721, -21721, -17403, -15620, 12053, -16518, 29563, -25189, -21034, - 28873, -4670, 25135, -19302, 2997, -24196, 31592, 14693, 28397, 6745, 799, -32296, -8703, 14152, - 6855, 15920, -28550, -24691, -16018, 8106, -7677, -17292, 30067, -8879, 28534, 20210, 11665, 14108, - 14473, 8439, -12283, 10164, -8052, 17653, -11761, -8598, -16125, 16388, -9305, 7727, 21321, 13638, - 302, -30699, 31677, -31183, 29102, 24018, -17336, -3904, 29213, -9921, -10674, 22526, -19480, 21842, - 19717, 9219, 11569, -15563, -10734, -14940, -21183, 1365, 21113, -32456, -1466, -2457, 19736, 15724, - 948, -1444, -26011, 30431, -14554, -31904, -30898, -10747, 29385, -21282, -15675, -28299, -8648, -30366, - -19700, -25096, 19371, -14758, 21414, -465, -18208, 27451, 19848, -9505, 25331, 18744, 28264, -3961, - -9361, 28359, 28543, -8759, 24868, 27561, -29541, -26832, 17900, 30838, -31136, -5088, -30209, 19159, - -26372, 25952, 11925, 22729, -19587, -30222, 23008, 7425, 28778, -31865, -25734, -11784, -13230, -30949, - -26773, 28503, -4441, 32312, 12806, 17783, -19642, 26678, -31252, 19863, 18844, -16461, 18793, 8004, - 31078, -14812, -6860, -25725, -4822, 15699, 12604, 30601, 13716, 18066, -28847, -18723, -1573, -28568, - -5366, -21533, 20642, 20863, -11481, 32525, 466, 22573, -3557, 28248, -20354, -4060, 12506, 8747, - -5808, -19082, -12126, -23129, -8508, -19059, 30877, -19800, 7475, -3068, 10941, 11532, 14460, 24905, - 32435, 13237, -8083, 3238, -6882, 12881, -19904, 10427, -25570, 27449, 5774, -7542, 7205, 3683, - 10563, -27928, 25172, 22985, -4375, -18831, -11266, 23721, 13614, 14952, 24372, -16215, -32157, -14984, - -20654, 23141, -31302, 26824, -7596, -24282, -18350, 10367, 18182, -7147, 22107, -12827, 30699, 1054, - -28778, -9758, 10097, 15022, 25573, -24613, -8548, -22316, -3079, -9996, 30196, 26388, 11136, 20161, - -27771, -27366, -15024, 18162, -29717, -20657, 16191, -1490, 29374, -23954, 2859, -859, -29554, -11536, - 19133, -18489, 29414, -25360, -1462, 23356, 26946, 25209, -22216, 12181, 18372, 28470, -7540, 9476, - 30918, -19748, 9778, -23649, -17700, 26755, 26185, -11623, -24404, -27500, 4329, -3955, -19427, 29815, - 24554, 31671, 15427, 2973, 2103, 30381, -21924, 21656, 6973, -21419, -22703, -15311, 9131, 29146, - -31115, 16989, 9432, -4795, -18857, -10569, 5952, 27136, 26466, -4111, 12976, -5454, 1402, -1424, - 1417, -30488, 3416, 31950, 18140, 13965, -2259, -3747, 8064, 13509, 16915, 25228, 6689, 29895, - 20187, -9823, 12240, -7251, 14528, -24736, -9848, -23022, 16544, 25413, 12380, -13401, -26977, -9938, - -24958, 27356, -6891, -22608, -669, 26196, -30827, 7756, 20368, 29690, 4423, 27272, 6769, 6880, - 27034, 19962, 27671, -29734, 3204, 29208, -7600, -22349, -1066, 13841, -11536, -23652, 10074, 32454, - 4918, 32646, 26, 32749, -2886, 19792, 7786, -26295, 32222, 17472, 25956, 5118, 26716, -1069, - 12348, -27739, -5870, 30836, -27623, 14844, 17507, 3685, 5642, -31025, 22029, 10350, -27254, 11989, - 14314, -31800, -2375, -12416, 19030, 25500, 18143, 16466, 7788, -6144, 10467, 28021, -19774, 13912, - 23605, -10272, -27331, -25276, 12457, 8736, 26919, 30059, -2780, -6795, 22773, -11595, -4487, 18704, - -12348, 13748, 12877, 28987, -23956, 24271, 13732, 15279, -20298, -18569, 8721, -18451, 8500, -2835, - 4843, 20200, -17387, 4212, -19341, -21310, -7226, 14364, -1333, 21647, -3246, 15904, -22060, 5827, - -25283, -22810, -6378, -15731, 12841, -8375, -10042, 15033, 16868, 21390, -17259, -13750, 23967, -23506, - -10875, 25482, 16287, 2114, -28670, 21565, -23798, 17600, -25500, -24382, 4257, 27195, 6932, 227, - 17328, 11134, 14098, -23897, 538, 22719, -32374, -12487, 23078, -25836, -10412, 25841, 17477, -24146, - -7060, -21908, -23181, 20363, 21113, 19884, -7105, -25454, 7040, 15136, -22494, 8365, 18211, -21017, - 8542, 27082, 20542, -23141, -2938, 1681, -8203, -20709, -25431, 1790, 11911, 25532, -7959, -4462, - -22634, -32492, -2241, 21736, 27180, 20748, -27372, 4357, -23728, -8831, -11018, -24872, -16822, 17924, - -2770, -8669, 18041, -5118, -23000, -27900, -21503, -3167, 21267, 27235, -23287, -7298, 8321, -26867, - -21939, 23360, 19843, -9248, 20199, -24303, -14152, -17288, 19185, 20564, -14468, -13495, 7925, -25979, - -14417, -32496, 10568, -24341, -28214, 27153, 32125, -19105, 20047, 26387, -3247, -17655, -28021, 18118, - -8912, 28633, -30364, 6266, -3328, -2341, -17950, 12790, 14051, -25098, 13811, -17557, 28934, 8816, - -6391, 29131, 2830, 19714, -20023, 31859, -6805, -18119, 28287, 24304, 17011, -4263, -4575, 25636, - 31192, -2735, 10434, 28206, -23534, 12167, -27989, -13504, 26748, 28249, 29191, -6227, -14456, -27054, - -16395, 29977, 8584, 20205, -23917, -23421, 13182, -2572, -8246, -10430, -12711, -28437, 3433, -26522, - 23822, -4623, 12725, -28778, 14079, -16287, 22127, 18232, 8666, -23409, -24656, 19671, 5817, -3693, - 11057, -25453, -19491, -24568, -23737, 11165, -13795, -5601, -16854, -24818, 2360, 7234, 2056, 12491, - -1358, 3496, -4849, -15918, -24309, 6369, -14720, 29875, 25828, -18294, 2331, -22191, -25575, 30529, - 8257, -29925, -19684, -9333, 29144, 17247, 20666, -17421, 2140, 27869, 1980, 29768, -13217, 32267, - 22776, -27284, -31339, -18256, 31258, -22233, -5506, -5958, -32582, -4720, -18239, 8482, 15057, 13354, - 12399, -30230, -31155, 14889, 32745, -11981, 5445, -3618, 31584, -7543, 4839, 2476, -4878, -20968, - -16623, -12564, -32243, -23414, -18210, -1782, 32031, -4107, 2315, -26268, 10614, -24964, -2527, -17980, - -4306, 10063, 3636, 17686, 25010, -719, -15434, -27603, 16968, 14500, -4124, -1618, 31226, -29074, - -6413, 31226, -1089, 4249, -31026, 29648, 19777, -11440, -24162, -3745, 25733, -4918, -10368, -16151, - -2390, -23569, 12415, -28927, 4653, 18201, -10892, 15177, 5863, 29433, 26254, -9824, -15443, -26583, - -11324, 27849, 13002, -9082, 16011, -10497, -26911, -10445, -18416, 18965, -20763, -6179, -13970, -17471, - -7001, 22872, 15031, -15610, -19116, 17851, 14354, -15037, -14145, -22315, 10749, -15208, 11262, -4772, - 17601, 11333, 25821, 26293, -26397, -28699, -28738, -32346, 8983, 4069, 13058, 3455, -28173, 25400, - 14398, -11519, 22423, -27400, -5982, 10129, 9317, 14475, 24844, -9420, -15211, -9621, -31570, -24457, - -11503, 28448, -23053, -19714, -14545, 19732, -1301, 21347, 9017, -21392, -946, 8804, -20601, -10380, - 12765, 16867, -29482, 28827, 21699, 1779, -28370, -22623, -32355, 2584, -18776, 29392, 14378, 15364, - 20835, -31656, -11842, 11858, 12552, 12566, 5406, 8457, 2989, -31152, -16850, -1797, 30188, -26101, - 28976, -4711, -1598, -10066, -5841, 10241, -10478, -25746, 13062, -16650, -28499, 19409, 11758, 26813, - 22101, 8785, 10655, -28235, -9856, -25833, -13445, -28487, 29246, 14689, 9088, 15127, 24606, 4, - -7813, -21062, 10048, -11545, 22127, -15545, 1726, 21527, 2317, 16918, 23807, 8081, 5169, -19299, - 29551, 5106, -12111, -2552, -17380, 27031, 8925, 5774, 16824, -8809, -6755, 6551, 4831, 5262, - -22986, 23561, -20544, 26657, -30872, 11198, -15115, 11866, -6742, 28677, 17006, -27123, -7062, -6450, - 23220, -4337, 31513, -19201, 10910, -21537, -24456, 26691, -16028, -17474, 24841, -18726, -26174, 9713, - -29198, -29376, -7440, 4066, 22800, 32708, -32332, 24166, 25263, 20089, -13309, 26851, 28093, -22880, - 22781, 21405, -25317, -8306, 13876, 21804, -4168, -473, 9541, -20753, 11426, -3630, -26652, -12551, - 11181, -30152, -27087, -15130, 25313, 22454, -10572, 2786, -21911, 2346, 28773, 1571, -3220, 20226, - -2598, 28587, -9344, -22174, 1328, -15933, -14476, -12163, 23280, 30275, -32605, 7730, 15587, 1921, - -19482, 21768, 8199, -22426, 20548, 23458, 27090, 19858, -18686, 1784, -27581, 24191, 20121, 9367, - 8138, -29159, -25007, 26150, 24824, -1578, 23016, -27886, 18406, -15833, 1758, 21831, 32663, 32224, - -1173, 28404, 27100, 30721, 7564, -12264, 16107, 18017, -14171, 19855, 12791, 13855, -22096, -3765, - 5768, 32537, 24266, -11860, -27719, -14837, -9913, -28729, -32391, 17179, 30318, 31925, -28252, -20907, - -10920, -18291, 15166, 3084, -6054, 30491, 24559, -8851, 17891, 29601, -5783, 16972, -32412, -20841, - -5087, -4912, -24417, 32762, -1285, -24948, 20012, 2107, -28999, -15565, 15234, 8170, 16547, -18184, - -28976, -1911, -14939, -31967, 32306, -17934, 31558, 22550, -8581, 18794, 4990, -8427, -25004, -15059, - -21540, 18212, -13293, -10890, -20944, -11275, -24501, -31866, -29757, -28015, 5871, 8417, -27352, -30295, - 15871, -273, -11223, 31416, 29932, -12521, -7203, -24701, 28322, 20970, 6630, -31331, -13488, -5237, - -1866, 18594, 18128, 31908, -32165, -21567, 23096, -27261, -18013, 1156, 11679, 11104, -32668, 26178, - 16260, -29381, 9773, -458, 15781, 6378, -23468, -27213, -31045, 12498, 25714, -758, 18349, -10084, - -25022, 23807, 28335, 25943, -25431, -5420, 6878, 26787, -32243, 30577, 3969, 25164, 1920, 7745, - 32214, -19000, -30559, 1973, 17036, 7386, -26707, 226, -9650, 14616, -5567, -22376, 4523, -29672, - 32715, -11499, -13206, -12963, -12023, -14008, 29485, -6378, -23813, -1785, 19234, -3457, 23052, -27248, - -31451, -21486, -26182, 20179, -30604, -29082, -13592, 3552, -27689, -28245, -503, 31530, 13424, -14546, - 10035, -25839, 25311, -22551, 8527, -16491, -25001, 32743, 30204, -7556, -20740, -31758, 27418, 31454, - 25563, 9138, -2483, 23593, 473, 27626, -15888, -24514, 23893, -10925, -16321, 10605, 6284, 27428, - 8727, 4611, -7537, -21645, -9773, 30323, 14036, 585, -32471, 22362, -21625, 2802, 8956, 18924, - 23468, 1470, -24974, 26929, -23498, 22088, 1794, 19428, 19581, -2222, 25410, 24285, -8993, 2060, - -18249, 25158, -1950, -22149, 7463, -30574, -28155, 14609, -10737, 24219, 2600, 27847, -25068, -4665, - -18637, -24692, 6542, 30440, -10, 28420, 11551, 30532, 29419, 24330, -5616, 7713, -27198, -25932, - -25134, 30753, -3410, 2961, -22870, -9529, -31069, 23396, -15022, -14491, 25973, 7213, 13728, -14136, - 1089, -32696, 25462, 16387, 25949, -30042, -6223, -13380, 23897, -16461, 1434, -15487, 2088, 25325, - 25299, 25711, 26556, -19886, 11595, -22101, 28842, -25959, -24870, 9276, 2315, 5971, -10373, 30891, - 9486, 28390, -22999, 8147, -14176, 14419, 6457, -26490, -25868, 14612, -4625, -300, 21579, 5143, - -27983, -21664, -4342, -14743, -10200, -13623, 12940, 26633, -18967, -31134, 10287, -16375, -18288, 29868, - -20777, 17877, -30829, 24784, -28831, 22490, -30380, 23239, -17233, 14602, 14912, -12161, 26055, -3636, - -2948, -29168, 25963, 9222, -1308, -3103, -16738, -4004, 26604, -29213, -25324, -13245, -10968, 1331, - 11146, 2438, -28570, 19248, 26434, -25239, -5273, 30416, 1612, -6345, 27369, -8941, -20789, -3120, - 17560, 5823, -16295, 10030, 27640, -1335, 2581, -11908, 984, -13745, 15737, 21573, -18710, -31222, - 30905, 16337, 4721, -8605, 14403, 25595, -16341, -14923, 10318, 19178, 16398, -13178, 12601, -11740, - 9451, 2179, -23574, 14066, 21810, 14074, -864, 13873, 8860, -25892, 3382, -17510, 3306, -887, - 17826, -13954, -30826, 32071, 8552, 14452, -337, 2130, 3800, 12269, 5943, 2642, 5742, 29728, - -23279, -22881, 31188, 8468, -25600, -23417, -6362, -24032, -22765, -23357, -19265, -15427, 27267, 11701, - 14662, 31090, -17304, 14148, 20879, 5662, 7742, 12308, -24638, -23877, 6576, -7161, 20625, -24112, - -27822, -15409, 17436, 3065, -14387, 7864, 31972, -11565, 6885, -7552, 7076, -32259, 26586, -21880, - -29280, 22878, 12334, 30398, -31807, 6360, -20162, -23661, 5699, 15033, -29921, -28565, -25074, -18843, - 27381, 21321, -15696, 13172, 26310, -13424, 13541, -17394, 12069, -6058, -21580, 31480, 9899, 10519, - -6208, 6631, 16459, 8406, 15322, -5293, -31183, -15581, 27831, -4827, 20936, -11669, -10734, -25322, - -29620, 2784, 32068, 15768, 26322, 3295, -21310, 20721, 31489, 13633, -25355, 8575, 21277, -17476, - -31753, -24935, 27318, -22689, -10221, -28728, -4285, -29938, -11579, 16732, 16058, -9918, 4261, 12356, - 4254, -21129, -7996, -27112, 22778, -2011, 125, 19876, -2168, 4859, 28178, -24649, 18974, -9613, - -7227, 11944, 20131, -25899, -32251, -25484, 5493, -5316, 14202, -26059, 37, 10683, 23969, -7690, - -6378, -27348, -23137, 29308, 3941, -8994, -29017, -10811, 637, 24812, -9368, -19412, -237, -26019, - -13607, 31368, 13802, 25773, -6139, -18211, -26201, -20159, -6887, -7450, 32709, 10909, 31146, -5533, - 24680, 22049, 16956, 247, 27840, 11444, 985, 23222, -8471, 19890, -3874, 21400, -24773, -7891, - -20449, -12132, 10619, 29489, 662, -10723, 9069, 15044, 1498, 12754, -17141, 11984, -16319, -21745, - 4577, -17821, 15603, -28604, -17742, 8835, -25557, -1302, -6183, -17479, 18486, 26689, 11064, -6603, - -20955, 20418, -23900, 9455, 29110, 9197, -20774, -12796, -23669, 25417, -24905, -795, -8530, -9514, - 20775, -6776, 16107, 7335, -22979, -29093, -7139, -5302, -10240, -29581, 6208, 32209, 2766, 6165, - -29930, -10803, 17262, -27304, 27003, -22672, -3848, -3663, 19900, -14930, 7183, 12966, -25615, 27932, - -15710, 24742, 11495, -17060, 21612, -1591, 26846, -9006, 16117, -26676, 6316, -17645, 29966, -11283, - 1393, 27222, 31238, -9419, 20916, -9013, 16253, 315, 29777, -1689, -30787, 19093, -2907, -8746, - -28883, -31685, -30377, -31269, -15431, -25155, -13843, 5592, 29620, 3346, -6615, 25929, 13002, -32301, - -18451, 1618, 20205, -22025, 27347, -23344, 24665, 22904, -6716, -25626, 9694, 6645, -5968, -338, - 13362, 9522, -21894, 27087, 9072, -9866, 7570, -2621, 931, -16581, 19364, -3803, -24619, 12463, - -20160, 11976, 14595, -30990, -28076, -24721, -9798, -2577, 14569, 31711, -31206, 18905, -20332, -19648, - 25508, -27678, 22770, 25293, 8864, -16912, 15232, -23298, -8258, -6847, 59, -16882, -18623, -15672, - 9928, -17168, -5023, 31028, 27491, -29124, 187, 21992, -13612, 17647, 19944, -26771, 29350, -26307, - 2626, -7084, 5352, 7276, 16150, -6880, -4363, -28164, 30584, -12188, -3607, -4347, 10556, 3476, - -27243, 32185, -10431, -28503, -13914, -7335, 29271, -30395, -7430, -565, -25899, 22160, 23842, -5028, - -429, -5126, -9063, -6543, 25036, -11294, 12592, -17167, -25847, 2960, 20867, 16709, 2178, 27555, - 6773, 22895, -21281, -9369, 4682, -2309, -16089, -12042, -6275, 18269, -23620, -28601, -26689, 29854, - -1232, 9028, -30370, 30311, 2082, -24345, -16436, -10392, 11993, -12778, -29723, -23244, -9294, 22518, - -10264, -12790, 7164, -4850, 6604, -23405, -9543, 17543, 24963, 25152, 2158, -16711, -32090, -19200, - 25280, -29666, 29150, 788, 14050, -1138, 2533, -21144, -9313, 1431, -12751, -3725, 29518, 30696, - -21161, 29018, -26988, -24249, -15642, 29152, 3769, -6359, 15386, -27522, 20718, 17237, 15694, 30726, - 32185, 9502, -19245, 18323, 26350, -1483, 14237, 18268, 21801, 9610, 45, -17983, -7326, -30333, - -20280, -10092, 10630, -10101, 25602, 2344, 31245, -23555, 8689, -7796, 12067, 6856, 23732, -19042, - 3697, -17015, -2973, -5404, -8350, -19983, 27852, 2463, 5503, -23425, -1986, -11143, -8315, 8244, - 3501, 17588, 31595, 9238, -22804, 2152, 5513, 23552, -13588, -32415, 12865, -4836, -27292, -31774, - -15780, 17744, -13361, 28129, -20186, 25643, -18292, -26438, -21545, -31955, 22309, -20935, 20188, -5912, - -22129, -21814, -11344, 1175, -23727, 8022, 19494, -4815, -22666, -11717, -19931, 25624, 32424, 10952, - -11012, 939, 5211, -12395, -20738, 20345, -10032, 24039, -11560, 2930, -1786, 2907, -12229, 1092, - -13611, 31274, -13167, 24634, 2647, 18234, -685, 4497, -15373, -16031, -28465, 29065, -23787, 23348, - -28253, 2233, 10754, 19260, 23426, 5904, -27529, 27644, 20847, -5990, 1940, 2096, -10193, -19604, - -31910, 190, -19483, -24174, -31173, 19375, -12631, 24180, 20210, 9705, 31500, -16659, 10757, -13227, - -30987, 25102, -8616, -28536, 27365, 22629, -7724, -21329, 26860, -21924, -9804, 14394, -12738, -28273, - -10053, 28163, -12366, 22925, -27267, 23828, -30468, 30609, -14931, 7594, -29447, 24663, -29977, 8410, - -10029, -11459, -14386, 16809, 779, 22743, -25482, -23612, -4193, 41, 30199, -3219, 19372, -29688, - -4044, 23344, -7875, -26961, 28831, 3256, -17537, 30554, -27377, -24225, 31885, -11163, 23913, 31907, - 21082, -25349, 14729, -3010, 15455, 27171, -4175, -16464, -23887, -24228, -29398, -23372, 10357, -29594, - -11608, -23401, 5190, 1381, -26185, 12729, -16938, 21855, 30742, -6217, -1015, 23851, -10158, 23850, - -8155, -18131, 9236, 21135, 999, 15244, 14771, -31324, -13956, -1569, 21623, -31215, 23761, 20841, - -8172, 9779, -8133, -7230, -8035, -6618, 2770, 28135, 27310, 16637, 606, 3808, -12934, 12704, - -22540, 15761, 12578, 2705, -28184, -20578, 26333, -6454, -28166, 3336, 9315, -21539, 1724, 24118, - 9047, 1913, 3650, 23110, 17951, 13941, 9958, 8164, -3302, -18854, 5285, 25790, 22796, 550, - 299, -29021, 14866, -31168, -28258, 15796, 32690, 4558, -30883, 31499, -19343, 26160, 114, -30814, - -17613, 26176, -11008, 1591, 991, -26357, -28182, -4994, -21848, -14700, -16586, -25265, -28161, -17584, - 26528, 2275, -27576, 4988, -13390, -19317, -1303, -23351, 32295, 13645, 6449, -14957, 11790, 26794, - -19670, -17159, -15516, 3863, -5152, 30824, -16675, 11974, -15286, 8557, -27904, -15784, 14360, 24237, - 30469, 14760, 28466, 8947, 28883, 4286, -21195, -19194, 18960, 12236, -971, 9138, -22592, -16576, - -17188, 8389, -20237, -16116, -26418, -27297, -2698, 5503, -651, 24671, -30026, -3390, -1686, 25059, - -11955, -26812, 4520, 13692, -24559, 6779, 23181, 22376, -26611, 4143, 440, 12524, -16765, -1250, - 875, -2592, 4133, -21010, 2018, -5167, 31368, 21838, -28762, -5484, -2176, -14803, -7170, -15759, - -24896, -12098, 20761, 29036, 8558, -26684, 1671, -20060, -29558, -2149, -7389, 5297, -4984, 9190, - -10517, -29004, -13957, 12584, -27265, 20446, 23323, -24713, -26445, -30612, -421, 9614, 20196, -7391, - 29185, 23446, -10736, 17112, -24376, -10752, 27278, 11953, 2628, -17494, 6807, 12968, -2833, 6695, - -21937, -15776, -16454, -9063, -14594, 21373, -8358, 24674, -3905, 3482, 17075, 17273, -263, -22923, - -3549, -14987, 23241, 212, 30921, 15371, 21070, -19510, -17926, -11978, 13994, 13198, -30654, 15902, - 13748, 11962, -30037, -3961, -25581, 8581, -17176, -32575, -28717, 30087, -27315, 10043, 23686, -24270, - -30262, 23793, -16853, 5479, 18848, -28893, 24271, 28967, 2431, 5419, -22054, 5216, 22569, -16491, - -4504, 1327, -16032, 21339, -11367, -28816, -20836, -10803, 8234, 13480, 1035, -11688, -22590, -3201, - 6784, -29804, 21739, -9515, 9199, -4348, -30780, -27851, 25248, 1745, 18048, 3185, -18214, 6593, - -25061, 7859, 27914, 3645, -8791, 19745, -18937, -17126, 21209, 8143, 14077, 31912, -25044, -4504, - -7941, -22885, 13041, -27636, 18633, -32709, 22565, -11326, 7094, 16849, 6840, 18620, 10013, -12943, - 9037, -31333, -22552, 7486, -3027, -14773, -20742, -32571, 27902, -11640, 28854, 4732, 13622, 5400, - 3136, -8459, 3504, 16758, -30279, 7229, -14807, -30904, 12277, -8724, -11899, -23946, 28413, 17106, - -21381, -16435, -30704, -28019, 6977, 14571, 27411, 26340, -5694, -11285, -21130, -31550, 16316, 15039, - 16167, 9946, -15473, -4082, 16935, 14194, -28741, 6975, 28991, -25498, 25141, 1005, 13595, 3302, - -13178, -27422, -31741, -27134, -25770, 13675, 14114, 22680, -179, 9633, -13695, -14848, 3629, -15741, - -8538, 27322, -5326, 18726, -18436, -12183, -23337, -29816, 19219, 32755, 8104, -7674, 26454, -17108, - 2298, -5738, 631, -28701, -10830, 25534, 20067, 8976, 7753, -24600, -19213, 8245, 26030, -9485, - 15210, 16834, -17273, 24481, 28695, -29726, -27474, -6586, 8648, -20756, 17083, -16442, -22595, 4670, - -25850, 24024, -12925, -5845, -16272, -14966, 8884, 6456, -30385, 4886, -30571, 8430, 16494, -9635, - -6369, 12793, 17555, -16299, 31067, -8835, -15131, -1988, 12929, 6364, -2381, -26177, -13395, 27011, - -9698, 23522, -9921, -11593, -2035, 1132, -11120, 13575, -13940, -16324, -4811, 31916, 18698, 24186, - -23991, -21073, -3826, 32720, -20172, 3968, -1447, -10805, -15287, -4567, 28535, 791, 6421, -1850, - 7000, -9350, -12752, -25110, 11951, -9540, -20037, 12822, -27425, -16966, 1473, -117, -24904, -16703, - 2932, -690, -24663, 19534, -26373, 5450, -16281, -7209, -13390, 31346, -24713, -17774, 24949, -32659, - -17302, -23723, 24662, -32470, 31275, -24317, 5931, -11150, 19072, 24740, -11618, 3688, 13941, -4488, - 1849, 15158, 10556, 6064, 18068, 15514, -1451, 32183, 16580, 25336, 27702, 9306, -29276, -17703, - 11539, 2543, 31950, -3437, -1324, -12192, -284, -14787, -6624, 9543, 18138, 32303, -24692, 1406, - 1203, 26304, -2835, 3768, -3574, -472, 22404, -24001, 9223, 19154, -24699, -15669, -13270, 31573, - -18695, 31742, -21986, -32428, -7772, 11848, -21920, 30409, -19653, -13914, 22340, -17338, 27074, -18963, - 7505, -23887, -13252, 31653, 10647, -22457, -21644, -30766, -11570, 9846, 17035, -7574, 22870, -6262, - 20122, -11261, 20632, 10636, -8711, 2545, -26412, -19600, 4676, 4425, 11703, 9152, 13815, 22490, - 5480, -11876, -30537, 16187, 26300, 10722, 7180, 25969, 17040, -680, 21862, 27574, -10461, -17642, - -25913, -26877, -21988, -4209, 18392, -11881, 11192, 9754, -3789, -30637, 27881, -439, 28506, -14643, - -19747, -1115, 19258, -9866, -30939, -31971, -27666, -29071, 15378, 23988, 994, -29643, -7852, 31595, - -1035, 28626, 2285, -12344, -22661, 13149, 19168, -21466, -26555, 10001, -14640, 7418, -928, -1170, - -29861, -15656, 32075, -1114, -24848, -17649, -29688, -22384, 30982, -30157, -22126, -10819, 9773, -17675, - -1561, -1804, 20931, 17341, -18161, -7481, 1194, -24649, 2375, 5275, -2182, -19949, 20680, -6920, - -32455, 23413, 3556, 236, 4370, -4576, 10848, -21126, 25494, 6038, 7784, 19745, 14421, 15171, - -24035, -10525, 31372, -14439, -20081, -7975, -22093, -16920, -7684, -26589, -12085, -23671, 272, -26185, - -3024, -17973, 17024, 18955, -16490, 12360, -19106, 22813, -31313, 2301, -1909, -5073, -7810, -19673, - 20103, 6842, -23067, -26662, 8045, 21578, 10618, -32575, 15241, -18579, -7773, -30191, -5975, -10649, - -15879, -4043, 4797, 20756, 10182, 17985, 9744, 18151, 19186, -20426, 27689, -14340, -24017, -23756, - 29790, -15761, -7132, -6012, -3162, 4684, 19579, -27329, 1034, 26751, 2401, -22946, 11185, -32621, - 3568, -22724, -11856, -23828, -28141, -5043, -6624, 3177, 25514, 16824, 29578, 10930, -516, 23897, - 16629, -19887, -17727, -2274, -22997, 7829, 3564, -25909, 9153, 5762, -32074, 20716, -29459, 5664, - -26509, -22544, -9318, -30754, -3600, 30565, 967, 5343, -9958, 21151, 10916, -25661, 10641, 2375, - -6132, 30553, -10210, -8536, 9835, 7628, 14258, 3490, 14918, -30115, 19563, 27191, -20282, -5613, - 23608, 23243, -29800, -27798, -12283, 8763, 26339, -9805, -15169, 1971, 4270, -2196, -28997, -9862, - -5137, 26605, 18965, -14138, -10652, 721, -13065, -32095, 1905, -29148, 24307, -6102, 5729, 32337, - -23304, 27248, -27146, 1361, 32219, 2499, 24296, 25959, 7386, -18342, 30572, -30594, 8443, 16134, - 17259, 15454, -23559, -641, -17283, 22508, -18103, -22700, 26179, 21269, 20914, -32286, 15517, 3981, - 32031, 28293, -5324, 12321, -2580, 1237, 15206, -29572, -24118, -25076, 12340, 25695, -2082, -31172, - 5134, 8232, -14761, 7503, -32670, 31758, 7286, -9813, -9638, -28628, -8234, 20975, 20829, -27531, - -22563, -7561, -7153, -16679, -16141, 4917, -1165, -21005, -14429, 27422, -26738, 3933, 7679, -5707, - -2318, 27403, -20405, 14802, 15169, 29112, -21237, 8458, 3108, -2541, -17424, -26307, -18289, 9869, - -25623, 11219, 28748, -20566, -22168, 11186, -25273, 2107, -17915, 4300, 16502, 22454, -11330, 15377, - 6763, -6141, 24284, -30186, -15587, 25412, -3540, 9738, 20088, -10492, -16841, -15222, 25413, 19670, - -19043, -15760, 22517, 1443, -24851, -11243, 14429, 21951, 30944, 13032, 6302, -1623, 29886, 20748, - -28996, 17540, 19167, 17459, 2201, 22705, -4836, -4099, 6250, -31180, 15163, -8466, 4943, 7084, - -102, 22520, 25245, 25436, -24222, -7249, -14589, -10015, -20836, 32133, 25741, 13954, 5650, 26706, - -16573, -6921, -17976, -1854, -27511, 23893, -23175, -32678, -4295, -9290, -3913, -22649, 25045, 17487, - 12705, -30685, -15199, -14425, 8466, -30290, -4551, 21118, 19593, -21201, 26639, 5887, 2482, 30093, - 8978, -23435, -8012, 171, 15178, 14342, 29842, 28381, 23265, -14022, 32115, 19329, -10866, 991, - 12288, -13262, 28777, 577, -10956, -4036, 28490, 26121, 31419, -518, -31664, 25611, -5528, -252, - -24907, -30300, -30045, -15423, 31363, -3972, -30174, 8298, 9243, 31261, 24032, 24628, -20118, 29924, - 4897, -12661, 16729, 32069, 15772, 11139, 2437, -31415, 31957, 7337, -31481, -31358, 13868, 18270, - -18067, -2123, 307, -13202, 8781, -16837, -7851, 4122, -7276, 30211, 27562, -7814, -30974, 24026, - -14393, -17383, 18255, -13124, 28785, -22845, 15899, -17470, -25024, -17152, 31559, 21788, 31957, 6277, - -11524, 2028, -3831, 11094, -3167, 20996, 25521, -211, 5367, -13928, 31179, 28908, 27388, 23263, - -6342, -2796, -3431, -26179, 10980, -9964, -24463, 28533, -25516, -31032, 5769, 11863, -7062, -11356, - -23871, 30478, -32645, -28731, 21461, -18426, 8234, -12057, -5000, -14239, 9443, 19410, -10190, -1341, - -1093, -32401, -24570, -29682, -30420, 24229, -16728, -9854, -2282, 1562, -27645, 30069, 3306, -25914, - 7738, 1709, 7983, 11390, 29492, -23219, 13945, -1434, 7935, 22224, 30860, -28239, -11081, -1919, - 32429, -23051, 32416, 7771, 19755, 112, -30920, 10397, 28624, 18296, -12463, -24284, 9977, 4837, - -24803, 11196, 8997, 6798, 3999, -9617, 8207, -30289, 20509, 12577, 16498, 15285, -20779, 11573, - -19668, 16243, 9822, 11128, 15314, -1226, 12574, -10592, -18673, -19891, 2, 30591, -14684, 26516, - 6344, 8953, 25147, 514, -11137, 5407, 28837, 10108, 1817, -29578, -5881, -29574, 7330, -28043, - -5441, 25472, -23401, -25563, 9430, -30956, -22399, -30005, 19515, -22355, 20368, 4286, 6730, -10707, - 1387, 16771, 26886, -9678, -6682, -17870, -9019, -9460, -92, -20207, 4639, -21980, 22084, -6264, - 27360, 5473, -25705, -8836, -30062, 13163, 13555, 17867, -14271, 31545, -20976, 22232, -24907, 629, - -7301, -11650, 10868, -28953, 3939, -22272, 27641, 7624, 28728, 808, 15777, -15716, 9992, -16504, - -32246, 30864, -31058, 30372, -581, -11991, 5363, 20504, 16285, -9217, -25675, -9669, 32614, -23249, - 27499, 32051, -14931, -13614, 19462, 15417, -25498, 31939, -14544, -30756, -28751, 12482, -11717, 470, - 15615, 26858, -22945, -17582, 32464, 11624, 5245, -18997, -8296, -32678, -30061, -17799, -3396, -11501, - 24251, -16824, 18657, -23542, 31815, 13587, 394, 28025, -1572, -21471, 16284, -29092, 21434, -6480, - 510, -9882, 1607, 24798, 15956, 15956, 17177, 23969, -18787, 16443, -20605, -13555, 9363, -29532, - -10237, 6277, 8661, 1007, 20701, 25089, 9612, 28410, 16254, -30508, -10828, -3101, 31072, 4795, - -3867, 8980, -434, 9060, -19325, -861, 1882, 14792, 20171, 31490, -24928, -14351, -6208, -12880, - -3953, 15909, -29946, -16816, -21584, 12376, -22187, -30023, -20702, -24605, 31107, 22493, 16779, -32042, - 1556, -5614, -17917, -23511, 31049, -23458, 27399, 31703, 7897, 5868, -27290, -11695, 11024, -32193, - 21355, -27246, -1498, -14850, 15190, 5599, -12382, 27067, -20450, -21140, 19637, -10975, 31305, 16598, - 13005, -13764, 17686, 7010, 19143, 4562, 21431, -24757, -29161, -9861, -11961, -14668, -8784, -15634, - 26170, -9221, 16639, 14093, 30940, 31308, -28058, -27945, -20365, -13720, -2535, 23981, -9352, 4613, - -19316, 14333, -14902, 27960, -23022, 18629, -18972, 23532, -28160, -15098, 26185, 25124, 6902, 24230, - 1904, 21959, -14358, 8008, -19612, -4868, -18186, -4028, -14295, -26071, -3873, 8698, 18267, 22505, - 11933, 22228, -13606, 27375, 14847, -3085, 19158, -32608, 7101, -2992, -28067, 6378, -4531, -15611, - 9688, -8612, -20105, 7767, 32763, 27584, 25658, -22895, 21526, -7777, -30499, 2305, 29361, -23727, - 3656, 24867, -14648, -26731, -6273, 23213, -24713, -18097, 10074, 30553, -26940, 8376, -16083, -5928, - -1665, -8010, 16476, 27248, 30746, -16680, 16678, -451, -1125, 24199, 29823, -6734, 29705, -5954, - 28697, 3988, -8407, -17694, 5634, -9024, -30313, -32393, 10313, -14497, 7553, 22765, 13170, -31257, - -13911, 12012, -7552, -18276, -32444, 15198, 2908, -17541, -25815, 12951, -24341, 8729, 26752, 16813, - 12904, 4712, -30732, 15212, 294, -14496, 16673, -22350, -15059, -21245, 13145, -1594, 2910, -15744, - -3230, 4610, 16071, 26740, -652, 29724, -22395, 12301, 27041, -12735, 20532, -5057, -21259, -19126, - -21625, 24249, 11915, 10136, 16842, 11950, -1807, -26664, -3033, 12255, -14974, -10480, 19667, 21866, - 25056, -24974, 6206, 16887, 7974, 3772, 9987, 25505, -25187, -23149, 7380, -30400, 9479, 951, - 23216, 14808, -18936, 8482, 14108, 5134, -22338, -27257, 75, -30636, 30251, 26794, 4489, -28184, - -14687, -8898, -18187, -22519, -26907, -14352, -3844, -22462, 29345, 16109, 32008, -9122, 74, 18736, - 20028, 17973, 29661, 23304, 15327, 88, -1218, -14304, -1488, 20091, -11243, 28514, 19831, 20756, - -538, 21813, -5941, -17111, -19310, -14720, 30406, 30987, -7041, -32379, -21946, 26270, 15146, 28823, - -29820, -17457, -16731, -1078, 31960, -4324, -31651, 27679, 18062, -25412, -16987, -19877, -7473, -31450, - -7321, 11436, 12389, 6300, 20420, -27898, 8265, 18487, -23677, 14945, -23902, -21175, -26155, 23133, - -32665, 776, 8163, 27953, -11349, -5927, 27751, -4949, -7998, -2989, -23709, 19833, 13638, -6709, - -32280, -5049, 32028, 10369, -11774, 23317, 12585, -18338, 26859, -14993, -15835, 21275, -5159, -1726, - 21602, 1266, -13424, 3149, -10442, 1928, -18287, 13727, -4019, 19892, -10922, 14936, -214, 2110, - -31846, 19574, -17071, 18407, 31292, 25800, 2090, 1672, 27480, -19629, 11216, -17006, 9101, 24825, - -10441, -23676, 21067, -13812, -24285, 31068, -26184, 11522, 16483, 24081, -848, -11582, -4332, -740, - 27803, -621, -2762, -11778}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8/output.h new file mode 100644 index 00000000..00133ff6 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8/output.h @@ -0,0 +1,11 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_output[40] = {-5555, -11740, -4510, -10600, -5934, 15332, -15785, -8613, 7136, -3460, + 12, 5210, -15699, 9145, 15221, 1790, 11968, -20753, -9069, -13522, + 438, 553, -5573, -13001, 10907, -4482, 3194, -3489, 8369, 5483, + -157, 5337, -13571, -7428, 686, -1537, 5662, 3260, -13194, -13551}; + +const int16_t *const int16xint8_output_ref = int16xint8_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/output_mult_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8/output_mult_data.h deleted file mode 100644 index 9fd93e90..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8/output_mult_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int32_t int16xint8_output_mult[4] = {1094038263, 1093426216, 1093614140, 1093822383}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8/output_multiplier.h new file mode 100644 index 00000000..8b57e086 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8/output_multiplier.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_output_multiplier[4] = {1464733362, 1461753171, 1464351158, 1463321492}; + +const int32_t *const int16xint8_output_mult = int16xint8_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/output_ref_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8/output_ref_data.h deleted file mode 100644 index babc7a6e..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8/output_ref_data.h +++ /dev/null @@ -1,9 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int16_t int16xint8_output_ref[40] = {180, 471, 855, 475, -60, 327, 298, -198, 147, 108, - 535, -101, -101, -235, -535, -188, -547, -944, -548, -328, - -895, -624, -496, -1029, -809, -671, -453, -410, -266, -563, - -818, -799, -512, -485, -639, -968, -102, -9, -414, -314}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8/output_shift.h new file mode 100644 index 00000000..57c9d010 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_output_shift[4] = {-12, -12, -12, -12}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/output_shift_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8/output_shift_data.h deleted file mode 100644 index 5ca3315b..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8/output_shift_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int32_t int16xint8_output_shift[4] = {-16, -16, -16, -16}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8/test_data.h index 4d61c5f2..33835748 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8/test_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8/test_data.h @@ -1,9 +1,7 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#include "biases_data.h" +#include "bias.h" #include "config_data.h" -#include "input_data.h" -#include "output_mult_data.h" -#include "output_ref_data.h" -#include "output_shift_data.h" -#include "weights_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8/weights.h new file mode 100644 index 00000000..5b501c0c --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8/weights.h @@ -0,0 +1,423 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8_weights[7920] = { + -13, -14, 66, -127, -33, 8, -80, 120, -52, -117, -106, 117, 116, -11, -73, 89, -90, 63, -45, + -91, -19, 85, -58, 122, -4, 3, -49, 112, 41, 85, -53, 25, 117, 84, -17, -67, 55, -114, + 54, -104, 112, 97, 118, 98, -82, -41, -54, -93, 74, 116, 67, -18, -122, -43, -120, -109, 58, + -75, -105, -124, 75, 10, 115, -25, 1, 64, 93, 12, 119, -61, 8, -69, -102, -96, 111, -7, + -122, 94, 28, 112, -25, -102, -67, -18, -95, 12, -37, -40, 126, 40, 111, 45, -67, 42, -76, + -22, -17, -59, -127, 13, -44, 70, -86, -111, -100, 58, 73, 125, 126, 73, 12, -1, 29, 25, + 24, 126, -66, 40, 101, -16, -2, 25, -9, -81, -37, -11, 30, -38, 23, -60, -89, -34, 93, + -99, -44, -1, 63, 68, 20, 69, -126, 91, -61, 93, -74, 16, -2, -85, -78, 47, 1, -80, + -4, -10, -33, -64, 79, -35, 113, -123, 28, 4, 102, 117, -50, 20, -27, 96, -66, 55, 68, + -19, 29, 102, -91, 48, -115, -28, -68, -59, 64, 57, -110, 11, -90, -48, 127, -29, 1, 114, + -72, 70, -81, 51, -8, -15, -104, 31, -68, 38, 101, -125, -57, -93, -102, -90, -93, 46, 73, + 63, 116, 119, 118, -121, -29, -1, -52, 17, 53, 96, -54, 55, 127, -124, 63, 102, -70, -114, + -1, 21, 14, -122, 63, 85, 115, -120, -76, 114, -4, 122, -110, 91, -119, 66, -111, -92, 121, + -6, 44, 1, -50, -5, 85, -24, -68, 100, 29, -116, -107, 106, 112, -23, 17, -108, -74, -56, + -120, 17, 34, 56, 61, -33, -56, 43, -70, 66, 13, -48, -81, 12, 120, -6, 87, -81, 21, + 92, -96, 100, 80, -80, -39, 59, 20, -4, -83, -16, 76, 56, 122, 107, 18, 87, -64, -33, + -23, -110, 77, -89, -78, 77, -29, -116, -3, -106, 50, -84, -1, 28, 91, 88, 75, 85, -81, + -60, -39, -120, -45, -30, 20, -80, -115, -79, 7, -77, -65, 11, 99, 29, 106, 54, 41, -88, + 71, -53, 79, 23, 109, 120, -41, 49, -114, 2, 19, 15, -113, -54, -6, -111, -116, 19, -107, + -49, -86, 112, 16, 40, -48, 85, -66, 100, 69, 119, 52, 50, -47, -92, -120, -91, 124, -45, + -62, -48, 24, -56, -32, -94, -36, -103, 36, -81, 67, -41, 7, 2, 97, -97, -61, -16, -58, + 118, -124, 36, -38, 98, 62, 125, 23, -48, 26, 74, -55, 30, -21, -34, 46, -53, -88, 24, + -45, 10, 67, -50, -15, 88, -38, 114, 3, 75, 11, 84, -26, -7, 51, 120, 17, -20, 54, + -96, 15, -68, -98, -68, 124, 118, -18, -118, -53, 18, 117, -47, -3, -64, 49, 61, 6, 90, + 65, -43, 51, 51, 35, -111, 72, 109, -96, -34, -109, 57, -12, -62, 119, -35, 59, 54, -11, + -33, -80, -6, -110, 95, -89, -85, 3, -108, -126, 81, -112, 76, 86, 68, -9, -23, -91, -7, + -102, -25, -27, -81, 65, 94, 46, -15, 40, -46, 50, -78, 26, 93, 117, 104, 19, 60, 94, + -5, -11, 25, 34, -24, 43, 78, -109, 20, -9, -10, -43, -55, -2, -38, -23, 83, -18, 19, + -28, -58, 6, 91, -55, -112, -98, 68, -53, 66, -64, 102, -46, -15, -48, 23, -10, -15, -94, + -55, -22, -34, 86, 21, -111, -40, 59, -83, -70, 108, -31, -34, 110, 107, 35, 11, -90, -85, + -26, -88, -65, -123, 61, 103, 120, 37, -64, -62, 87, -80, -58, -76, 74, 113, -96, 5, -43, + -83, 110, 89, -34, 82, 122, 97, 76, -34, -93, 64, -82, -86, 86, -31, 64, 15, 47, -103, + -100, -39, 50, -91, -55, -46, -36, 52, -16, 115, -7, 81, 25, -80, -49, -94, 10, 26, 16, + -111, 86, -120, 56, -18, 45, 61, 18, -126, -96, 99, 21, 49, 126, 89, -67, 119, 93, 57, + -101, 108, 98, -18, -53, 61, -22, -56, 46, -17, -5, -22, 3, -14, -20, -109, 104, 10, 30, + 46, -15, 68, -33, -115, 56, 23, 107, -96, 122, 58, -71, 41, 23, 89, -21, 65, -37, -66, + -22, 115, -120, -103, 126, 89, -127, 45, 94, 47, 18, -31, 16, 32, 72, 98, -31, -73, -94, + 11, 75, -61, -91, -61, -79, -55, 86, 41, 114, 10, -83, -104, 43, -24, 92, 116, 4, 103, + -109, 79, 95, 0, 127, -72, 108, -15, 31, 56, 94, -36, -104, 125, -68, 10, -59, 22, -49, + 22, 34, 33, 66, -85, -18, -17, -2, -83, 92, -80, -68, 58, 51, 66, -37, 86, -58, -121, + -16, 83, 122, -53, -67, 12, 52, 102, 83, 20, -87, -92, 110, -96, 48, -33, 69, -17, -53, + -119, -42, -19, 90, -76, 12, -98, -104, -95, -114, -124, 95, -73, -77, 39, 44, 50, -28, 22, + -43, -103, 5, -108, -66, 38, 55, 120, 32, -11, -103, -86, -83, 101, 38, 68, -72, 100, -66, + -84, -61, 67, 124, -42, 46, 12, 41, -101, 117, -98, 101, -52, -58, 107, -124, -18, 15, -39, + -27, 42, 77, 114, -85, 119, 53, -50, 67, 76, -114, 82, 69, 100, -107, 57, 98, -93, 47, + -121, -99, 73, 79, 87, -33, 53, 30, -22, -28, 7, -9, -73, -14, 55, -64, -8, 30, 41, + 36, -33, 66, -108, 13, -65, 25, 18, 36, 84, -92, -50, -110, -41, -26, -35, -50, 12, 45, + 74, -91, 69, 36, 30, -108, -26, -92, -51, -36, -96, -9, -27, 66, -91, -125, -95, -126, -112, + -95, 80, 75, 111, -72, 32, -103, -122, 5, -111, 57, -47, 58, -21, 63, -113, -123, 91, 19, + -30, -25, -99, -45, 55, -69, -46, 46, -43, 92, 56, -51, -17, -23, -30, -107, -10, -70, 18, + 69, 16, -91, 36, -108, 66, -111, -21, 18, 114, 61, -3, 84, -7, 80, -63, 65, 114, 71, + -126, -118, -81, 60, -68, -41, 68, 32, 117, 33, 43, -100, -15, 66, 111, 42, 111, -61, -4, + -35, 116, 57, -93, 97, -34, -26, -107, -59, 6, 96, -1, -8, -4, -82, -112, 103, -25, 51, + -117, 62, -107, -49, -122, -17, 114, 2, 61, -3, -37, 38, 73, 3, 82, 57, 1, 27, 72, + -102, 106, 92, -13, 48, 66, 86, 8, -62, 37, -3, 47, 99, 91, -28, 29, 75, 104, -12, + -73, 32, -46, 125, 29, 30, 91, 115, 6, 24, -41, -104, 51, -40, -23, -122, 108, -49, 49, + 104, -8, 52, 51, 98, -86, 22, -118, -87, 6, 9, -30, -36, 57, 92, -4, -64, 106, -105, + 100, -4, -92, 46, 109, 33, 26, -19, -50, -44, 126, 2, 40, 65, -21, -107, 36, 64, 26, + 98, -58, 65, 63, 38, 63, -83, 51, 7, -8, 34, 115, 81, 1, 3, 91, -8, -124, -116, + 73, -19, -117, -122, 59, 112, 6, 83, -10, 33, 86, -51, -105, 82, -6, 47, -120, -92, -75, + -51, 33, -55, 82, 45, -118, -28, -111, -57, 86, -10, 27, -4, -84, 53, 48, -26, -118, -67, + -22, -116, -45, -37, -15, 6, -53, 112, -36, -50, 71, 9, -39, 41, 71, 27, 84, -19, 110, + 52, 56, -104, -90, -1, 110, -107, -29, 88, -64, -78, -57, 127, -94, -126, 106, -92, 62, 126, + -116, 75, 40, 95, 121, 19, 3, -12, -80, 44, 43, 1, -49, 100, 79, 13, -41, 112, 115, + -100, 82, -59, -90, -102, -34, -27, 28, -73, 38, -34, -117, 120, -23, 90, 30, 6, -5, -73, + -112, -14, 22, -51, -107, 72, 97, 112, 119, -24, 103, -95, 12, 106, 55, -21, -62, 84, 70, + -52, -109, 102, 67, -21, -89, -43, 106, -52, 37, 20, 110, -34, 112, -55, 66, 84, -55, -14, + 125, -90, 64, 98, 77, 32, -117, 54, 50, 125, -14, 69, 102, 32, 112, 125, -57, -27, 37, + -40, 108, 102, -104, 32, -88, 1, 46, 58, -16, 88, -25, -27, -60, 21, -25, -13, -100, 34, + 33, 72, -123, 60, 55, -109, -42, -111, -60, 41, -101, 76, 100, -67, 87, 85, -110, -87, 60, + -86, -41, 11, -7, -51, -35, 73, -110, 20, 10, 57, -20, 31, -47, 32, -23, -125, 61, -32, + 126, -30, 47, -79, 30, -115, 111, 9, -43, -43, 22, -45, 76, 54, -38, -11, -57, 29, 1, + 109, 22, 7, 100, 63, 110, -98, 87, -120, -32, 106, -38, 8, 20, 5, 55, -18, -106, -2, + 25, 51, -54, -17, -49, -111, -22, 103, -32, -55, -7, -20, -116, -51, -85, 46, -2, -72, 31, + 121, 111, -123, 111, 3, 113, 21, -94, 88, 27, -94, 114, 125, -106, -29, -116, -118, -107, -86, + 120, 14, -76, -125, 121, -9, 123, -101, -7, 47, -45, 57, -79, 58, 24, -69, -68, 18, 14, + 32, 107, 112, -126, 10, 85, 52, 23, 90, -44, -55, -15, 68, -16, -72, -120, 118, -60, 100, + 10, 125, -13, -99, -70, -18, -17, -16, -63, -39, 81, 81, 60, 82, -51, 33, 120, -46, -1, + -44, -48, 5, -32, 85, -121, -71, 30, 103, -115, -16, -1, 72, -78, 85, -20, 112, -16, -115, + 43, -50, -69, 36, -11, -62, -56, -21, 44, -76, -55, -124, -102, 95, 126, 28, 98, 37, 57, + 0, 1, 19, 24, -30, -25, 80, -4, -20, 49, 43, -89, -113, 47, -73, -79, -10, -101, 108, + 3, 105, -123, 110, 99, 90, -27, 86, -81, 5, -37, -70, 105, 36, -84, 57, -125, -27, -42, + 1, 88, 51, -106, -17, -45, 70, -106, -46, 98, -7, 36, 94, 44, 53, 64, -87, -105, 106, + 86, 18, -57, 12, -101, -90, -51, -75, -117, 54, -90, -112, -56, 46, -15, 8, 45, 83, 98, + 93, -66, -25, 68, 34, -84, -19, -97, -38, -112, 1, -100, 89, 68, -63, -110, 91, 93, -27, + -85, 11, 119, 63, -110, 39, -90, -122, -85, 37, -114, 57, -118, 119, -126, 25, 72, 95, 76, + 125, -2, 110, 104, -88, 106, -71, -51, 116, -60, -83, -114, -66, 126, 86, -1, 71, 88, 127, + -88, -118, 125, 46, 23, 125, 97, 124, 110, -21, 93, -87, 87, 11, -56, -15, 86, -118, -64, + -93, -40, 118, -86, 84, -62, -89, -40, -39, -89, 39, 30, -42, -118, 84, 113, 51, -50, 123, + -54, 74, -103, 41, -73, -86, 16, 69, 80, 92, 87, 110, 9, -78, 120, 108, 12, -77, -44, + -61, -59, 56, -42, -79, 123, 99, 57, -18, 112, 51, 78, -28, -38, 101, 111, -90, 97, 98, + -67, -22, -4, -98, -59, 126, 3, 44, 34, -56, -91, -28, -48, -17, -46, -125, -24, -27, -109, + 84, 117, 78, 55, 48, 88, 6, 31, 15, -126, -3, -40, 38, 74, -19, 22, -110, 43, -67, + -6, 121, 54, -75, -66, 115, 35, 86, -8, -56, -73, -25, -126, -93, 72, 19, -60, -62, -10, + -85, 88, -30, -79, 115, 114, 100, 121, 83, -52, -34, 114, 24, 33, -11, 59, 92, -45, 91, + 26, -9, 84, 42, 124, -73, -87, -13, 112, -117, -39, -112, -5, -106, -10, 71, 82, -96, 16, + 79, -10, 74, -72, -79, 12, 101, 30, 61, 4, 109, 106, -94, 8, 21, -100, 6, -73, 111, + 91, 80, 116, -15, -100, 123, -70, 53, 16, 69, -29, -29, 76, 34, 94, -35, 118, 97, 93, + -68, -125, 32, -44, 82, -107, 90, 124, -111, 76, -52, 36, -68, 68, 1, 0, -53, 76, 95, + -11, 75, 109, 112, -18, 90, 87, 109, -63, 10, 111, 113, 70, -82, -106, -16, 17, 54, -25, + 79, -113, 95, -28, 62, 67, -32, 71, 32, -17, -97, -53, 125, -103, -89, 6, -42, 59, 12, + -100, -5, 12, -25, 72, -69, -112, 34, -58, 88, -73, -11, -115, 114, 17, -45, 63, 84, -97, + -66, 111, 10, 55, -110, 79, -28, -47, 91, -59, -12, 52, 94, 86, -120, -88, 59, 108, -79, + -85, -45, -125, 50, -107, 5, -11, -31, 25, -59, -112, -96, -103, -126, 18, -4, 0, 59, -88, + -98, -64, 12, -36, 36, 27, -17, 28, -95, -110, -23, 59, -44, 89, -78, 127, 22, 66, 6, + -118, -7, 30, -27, 63, 123, 102, -114, -102, -79, 33, 30, 76, 110, 121, -58, 113, -74, -85, + 113, 82, 18, -87, -5, -68, -39, -64, -86, 74, 0, -115, -4, 31, -32, -106, -77, -70, -8, + 123, 100, 73, 10, 33, -35, -33, -25, 69, 105, -94, -3, 75, 32, 71, -54, -66, 115, -32, + 10, -100, -20, 117, -101, -2, 48, 38, -56, -103, -124, -115, -10, -55, 61, 40, 45, 127, 107, + 104, -111, -37, -113, -81, -90, -51, 99, 45, 124, 56, 36, 96, 115, -97, 12, 29, 15, -102, + 102, 119, 79, 105, 11, 75, -44, -70, -59, -6, 117, 95, 63, -79, 10, 41, -65, 67, -47, + -103, 93, 4, 87, -75, -113, -79, 87, 125, 108, -45, -72, -56, 62, -109, 106, 19, -44, 70, + 74, -120, 4, 103, -45, 119, -28, 111, 36, -41, 75, 106, 95, 100, 10, 92, 65, 123, 117, + 62, 29, -65, -67, -124, 9, -125, -56, -62, 125, 96, 112, 43, 66, -121, -36, 106, 96, 96, + 42, 104, -89, 115, -111, 64, -16, -74, 72, 19, 4, 90, -90, -51, 26, -28, 104, -80, 1, + 78, -70, 90, -43, 114, -90, -62, 1, 36, -18, 85, 4, 66, 58, 64, -66, 45, -72, 61, + 35, -48, -86, -71, -46, -118, -53, 44, -20, 121, -86, -111, -19, -82, -68, -47, 22, -26, 32, + -73, -27, -58, -9, -72, -81, 89, -93, -27, 25, 7, 62, 118, -40, -48, -71, 48, 45, 84, + 124, -51, -78, 103, -52, -55, 63, -124, -31, 35, -106, -35, -119, 7, -90, -13, 116, -17, -31, + 26, 89, -75, -18, 109, 35, -109, 73, 125, 118, -122, 23, 36, 52, 89, -70, -12, 8, 125, + -116, 69, 90, 24, 67, 80, -75, -41, 6, -68, -86, -58, -70, 50, -106, 2, 25, 65, -5, + 113, -24, -125, -45, 14, -76, 54, 119, 109, -49, 62, 27, -112, -84, -53, 37, 102, -112, 79, + -84, 23, 63, -29, 73, -65, -121, -38, 53, 38, -123, -8, 24, -98, 82, 12, -121, -60, -6, + -50, 54, -33, -91, -69, 65, 83, -54, -86, -66, -122, 125, -82, 45, 35, -12, -34, 85, 67, + -63, 38, 48, -107, 47, 118, 84, 7, 52, -50, 102, 17, 110, -22, 21, -53, -58, -73, 17, + -74, 69, 57, 15, 66, 119, 37, -36, 82, -67, 79, -54, -65, -87, -56, 114, -106, -70, -96, + -101, -29, -98, 125, -21, 121, 90, -30, -10, -10, 112, -115, -60, -54, 0, -100, 72, 125, 88, + -100, -43, 72, -77, -36, -54, -73, 18, -77, 97, -90, 18, 20, 32, -45, 80, -2, 68, 70, + 58, 73, 121, 99, -30, 67, -87, 76, -43, -67, -68, -76, 23, 7, 25, 92, -106, 6, -59, + 112, 61, -58, -110, 0, -77, -50, 72, -13, 93, -60, -36, 116, 101, -103, 51, -34, 39, 116, + 75, -89, 43, -49, 99, 112, -29, 64, -20, -81, 58, -103, -8, 66, 123, -92, 7, -85, -78, + -62, -92, 23, 45, -117, -85, 19, -29, 71, -84, 100, -37, -120, 85, -106, -23, 64, -20, 13, + 111, 63, 105, 23, 92, -98, -83, -100, 72, -62, -100, -125, 46, -93, -37, -81, 86, 26, -126, + 28, 11, -57, 113, 108, -43, 87, 20, -23, -30, -33, 34, -105, 81, 20, 122, 81, 80, -65, + -93, -37, 80, 124, -112, 67, 35, 48, -56, -114, 119, 97, 96, -67, -42, -120, -111, 31, 119, + 61, 73, -30, -127, -105, 15, -24, 46, -73, 113, 26, -96, 38, 53, 29, 124, 22, 115, 95, + 94, 70, 66, 95, 28, 118, 6, 62, 96, -60, -42, 70, -79, -4, 32, 54, -27, -59, -39, + 40, 70, 36, -27, 43, -84, 77, 9, 27, 101, 14, -112, 34, 2, -1, -48, 122, -20, 33, + 106, -108, 52, 120, 90, -105, 59, 112, 49, 126, -118, 108, -4, -125, 63, 16, -78, -119, 32, + -79, -54, -94, -86, -111, 47, 94, 72, 34, -70, -86, -72, -124, -119, 1, 0, -25, -78, -28, + -55, 105, -32, 115, -37, 36, -121, 0, -101, 122, 64, 21, -116, -28, 37, -24, 3, -125, 81, + 52, 0, 45, 17, -35, -13, 15, 118, 44, -35, 26, -84, 89, -88, 70, 45, 29, -11, -63, + -14, 98, -123, 124, 12, 72, -81, 22, -115, 32, 106, -72, -51, -12, 121, -79, 11, -107, -97, + -72, 116, 78, 7, -62, 58, -46, 35, -49, 20, -87, -96, -61, 69, 87, -111, 63, -51, -118, + -62, -37, -15, -28, 109, 5, -37, 94, 98, 19, -105, -18, 16, -28, -16, -33, -125, -24, 32, + -71, 93, -124, 90, 46, -8, -105, 68, 17, -70, -67, -80, -17, -6, -82, 20, 75, -39, 113, + -41, -83, 50, -112, -9, -53, 20, -33, 96, -73, -109, -42, -78, -108, -28, -57, 92, 108, 46, + 18, 107, -30, 0, -120, 122, -46, -20, 69, -29, 21, -23, 97, 71, 108, 104, 19, -16, 1, + 87, -14, 8, -55, 127, -51, -114, 14, -100, 101, 71, -36, 13, 101, 63, 2, -77, 90, -38, + -124, -90, -72, 11, 119, -51, 125, -46, -50, -9, -102, -66, 14, -113, -50, 38, -100, 7, -16, + 34, -1, 33, -78, 71, -1, -118, 104, 44, 45, -7, 51, -36, -80, 99, -32, -81, 119, -93, + 36, 2, -57, -57, -119, 127, 24, 31, 101, -43, 41, -71, -30, -62, -114, 109, -91, 13, 27, + 95, 7, -73, -5, 108, 108, -61, 107, -53, -21, -36, -81, -9, 2, -74, 53, 29, -45, 64, + 106, 59, -54, -63, -19, 67, -5, -56, 56, 57, -56, -74, 30, -24, -52, -122, 127, 76, -49, + 95, -27, 90, -82, 11, 66, 44, 85, 23, -108, -37, 2, 99, 84, -34, -44, 14, 88, -94, + 63, 39, 115, -24, 93, 27, -96, 86, 46, -64, -3, -48, 56, 73, 0, -41, 6, -71, 81, + -74, 73, -7, 76, -45, 4, 126, -113, -28, -48, 72, 119, 36, 35, 70, 110, 117, 63, 75, + 108, 21, -68, 117, -32, 43, 87, -63, 6, -31, 12, 18, -43, 51, 35, 107, 36, 108, 9, + -112, -84, 110, -101, -95, -13, -120, 108, -95, -46, 89, -106, 52, -109, -62, 22, -81, 68, -69, + 36, -24, 9, -39, -76, -74, -54, 118, 117, 32, -59, -107, -32, -94, -69, 116, -126, -122, -106, + -61, 60, 81, 32, 45, -59, 28, 111, 34, -22, 99, -64, -31, 5, -23, 68, -81, 55, 90, + -93, 99, -75, 58, 88, -44, -25, -22, 12, 121, 49, -18, -76, 60, 28, 85, 34, 76, 32, + 38, -111, -115, -13, 35, 79, -55, -56, 102, -34, -80, -112, -98, 45, 85, 33, -76, 48, 96, + -55, 6, -35, -15, -10, -54, -115, -51, -74, 4, 23, -126, -112, 113, -28, 47, 19, -22, 11, + -80, 114, -75, 76, 106, -124, 48, -113, 122, 37, -58, -33, 125, 122, -98, 15, -52, -75, 75, + 46, 69, -4, 70, -96, -48, 60, 62, -120, 65, 62, -76, 112, 76, -117, -38, -5, -69, 11, + 27, -42, 45, -70, 40, 95, -105, -106, 15, 46, 43, -18, 11, -101, 34, 53, 115, -40, 58, + -44, -31, 18, 125, 62, -96, -86, 29, -85, -72, -38, 34, -3, -125, -83, 19, 57, -95, -1, + 10, 80, -35, -125, -83, 5, -33, -31, -34, -13, -108, -12, 61, 117, -41, -70, -105, -13, 39, + 113, 55, 106, 45, -46, 99, 78, -20, -14, -23, -77, -39, -76, -124, 103, -62, -124, 108, 41, + -14, -94, 28, -117, 17, -109, -48, 81, -100, 78, -89, -101, -100, -91, 94, -22, -73, -64, 110, + -50, -69, -68, 23, -26, 110, 51, 100, 106, 22, 30, -108, 92, -105, 103, 45, 7, -20, -62, + 88, 112, 104, 46, -82, -108, -120, 33, -78, 100, 40, -46, 115, 43, 40, -97, -119, 78, -77, + 89, 8, -16, 94, 82, 12, -41, -77, -124, 8, 24, -23, -69, 16, 32, -90, 21, -41, -115, + 113, -106, -29, 30, 96, -24, -111, -40, -86, 55, 120, -109, 97, -125, 115, -88, -120, -115, -96, + -30, 28, -119, 26, -2, -107, -86, -123, -85, -19, 42, -32, 114, 97, -8, -74, 92, -95, 97, + -49, -35, 58, -9, -5, -50, 39, 38, -32, 49, 125, -89, 121, 52, 83, 21, 56, 78, -1, + -85, -80, 112, -31, 38, -88, -117, 123, 42, 24, 75, 78, 113, 57, 2, 37, -9, -44, -33, + 125, -21, -76, -67, 72, 103, -43, 3, 106, -18, -9, -49, 111, -55, 52, 34, -48, 83, 37, + -28, 65, -18, -96, 99, 13, -30, -54, 125, -18, -62, -89, -117, 110, -79, 67, 105, -121, -37, + -11, 110, -32, 88, -45, 73, -118, 76, 21, -117, -52, 69, 125, 63, -70, 39, 15, -95, -61, + -58, 80, 88, -116, -37, 79, -22, -76, 43, -99, -24, 71, -98, -127, 107, -95, -66, -105, -17, + 42, -126, -19, 24, -121, 39, 93, 109, -20, -21, 62, 3, 126, 79, 29, -23, 55, -52, -12, + 29, -79, -98, -78, 20, -66, -44, 113, -8, 91, 88, 52, 15, -21, 84, -5, -58, 42, 20, + -90, 26, -101, -112, -32, 58, 2, 95, -93, 124, 78, -47, -106, -86, 115, -100, 8, -75, -59, + -38, -19, -99, -119, 4, -32, 14, -66, 12, -90, -55, 83, -121, -87, 22, 88, -92, 67, -46, + 82, 21, -38, -6, 22, -105, -85, -120, 99, -118, -87, 81, 31, -90, 51, -75, -30, -20, 80, + -36, 43, -11, 84, 90, -77, 56, 23, 122, 48, 23, 40, 62, 108, -84, 10, 5, -20, -108, + -91, 54, -123, 97, 63, -69, 25, 5, -18, -47, 98, 28, 90, -83, -2, 107, -81, -7, -54, + 33, 86, -62, -13, 63, 16, 58, 33, -95, 34, -103, -98, 51, -31, -46, 4, -19, -119, -95, + 106, -7, -81, 97, 58, -54, 110, -16, -25, 93, -82, 48, -6, -105, 127, -36, -111, -105, 1, + 18, -77, -104, -37, 116, 108, -80, 100, -84, 74, 98, 77, -79, 115, -31, -115, 118, -66, 29, + -114, 0, 124, 41, -127, 25, -42, -115, 104, 14, 39, 59, 59, -35, -25, 51, 16, 106, -110, + 43, 108, -8, 39, -103, -12, -116, 66, 113, 34, -120, 47, 120, 53, -125, 29, -49, 100, -73, + -9, 70, -53, -90, -16, -114, -7, -93, -14, -5, 5, 107, 6, 54, 69, 75, 121, -105, -110, + -95, -43, -94, 98, 54, 75, 102, -71, -124, -3, -6, -43, -94, -74, 7, 89, 34, -75, 26, + 35, 8, -37, -76, -52, -103, 16, -54, 79, -47, -89, 10, 126, -124, -33, -127, -73, -85, -77, + 38, -115, 89, 2, -41, -102, -79, 42, 40, -67, 94, -119, -84, 121, 92, 23, -16, -9, -42, + 38, -68, -125, -22, 122, -40, -99, 102, -51, 20, 35, -4, -10, 5, -54, 58, 2, -116, -22, + -90, -56, 92, -91, -1, -49, -79, -10, 106, -86, -122, 24, 54, -121, -80, 6, 75, -28, -47, + -114, 40, 74, 40, -74, -124, -5, -55, -49, 4, 68, 51, 119, -17, -114, -64, -14, 98, -124, + 1, 79, 106, -65, -70, -74, -10, 11, 61, -101, -100, -8, -124, -123, -117, -40, -103, 70, -16, + 78, 14, 75, -30, -89, -104, -95, -116, -47, -55, 45, 34, -19, -8, -76, -87, -62, -32, 10, + -23, -73, 26, -84, 73, 22, -2, -79, -86, -89, 12, -24, 104, -105, -23, 75, 84, 30, -70, + -100, 67, 53, 63, -117, -47, -58, -13, 68, -60, -64, 41, 44, 40, 67, -14, -83, 45, 45, + 50, 41, 112, 24, 9, -114, -57, -106, 104, 41, 99, 112, -12, 113, -85, 73, 54, -50, -104, + -95, -84, -102, 80, 122, -52, 71, 112, 27, 66, -73, 98, 62, 79, 34, -40, -66, 49, 73, + 54, -84, 64, 113, -93, 107, 56, -127, 14, -82, -93, 117, -103, 89, -79, 91, -125, -107, 79, + -11, -101, 60, 95, 21, -7, -12, -9, -72, 86, -124, 121, 83, -29, -11, -72, -124, -91, -47, + 71, 70, -126, -106, -26, 32, 16, 103, 46, -18, -52, -50, 31, 18, -80, -124, 13, 11, -93, + 105, 99, -21, 38, -32, -4, 72, -100, 112, -80, -8, 68, -65, -87, 8, 105, 102, -4, 83, + -21, 111, 102, -111, -89, 107, 18, 110, 65, 41, 79, 27, 43, -21, -18, 118, -1, 78, 113, + 97, 21, -75, 41, -52, -42, -70, 103, -127, 127, -24, 3, 87, -7, -10, 106, -91, -105, 49, + -9, 20, 26, 14, -107, 40, -91, -121, 87, 58, 67, -3, 78, 92, -50, 95, 51, 124, 2, + 48, -13, -12, 106, -113, 76, -16, -2, -118, 36, -91, -49, 8, 113, -74, -25, 20, -97, -45, + -127, 91, -87, -93, -96, 25, 82, -103, -116, 115, -91, 119, 112, 6, -115, -21, 27, 103, 93, + 88, 92, -37, -120, 86, -69, -83, 72, 93, 98, -100, 34, 96, -34, 5, 37, 63, 17, -117, + -83, -34, 84, 11, -58, 12, 72, -42, 67, 14, -110, 102, -99, 100, -98, -118, 124, -53, 23, + -64, 13, -23, -65, -22, -68, -106, -69, 96, -123, 127, -63, -81, 66, -57, 92, 118, 17, -81, + 94, 63, -115, -102, 36, 74, -124, 121, 39, 23, -93, -65, 121, 77, -111, 76, -52, 66, 51, + -80, 63, 64, 4, 71, 116, -45, -11, 51, -26, -120, 51, -103, -60, 51, -45, 97, 17, 24, + -62, 76, 41, 29, -3, 47, -15, -89, -60, -6, -103, -15, -21, 103, 16, 110, 31, -94, -91, + 30, 46, -118, 32, -77, -72, 0, 14, 45, 28, -19, 83, -90, -89, 2, -91, -68, -88, -69, + 73, 115, 99, 106, -53, -89, 27, 43, 26, 111, -113, 116, -19, 72, 14, 2, -28, -104, -123, + 99, 29, -76, 103, 94, 98, -52, -121, -116, 126, 87, -90, -115, 86, -68, -107, 92, -47, 81, + -117, -21, 55, -106, -116, -76, 41, -51, -72, 41, 108, -65, -79, -62, -91, -15, -95, -121, -19, + 55, 23, 8, -117, 30, 76, 61, -121, 12, 30, -25, 79, 77, 57, 60, 25, -6, 98, 5, + 80, -92, 121, -114, 60, 13, -31, -76, -74, 4, 32, -14, 63, -121, -1, -124, -105, 23, 57, + 116, 73, -30, -105, 122, 58, -33, 58, -46, -81, -95, 60, 87, 16, 43, 81, 28, -82, -36, + 99, -119, -60, -63, 113, 50, -10, -68, 86, -12, 93, 29, -99, -10, -4, -28, -100, 55, -23, + 126, -121, -15, 71, 80, -49, -73, 97, 39, 96, 56, -119, 11, 30, -84, 14, -119, -99, 58, + 62, -127, 72, -6, -77, -94, 110, 2, -103, -89, 59, -125, -108, 23, 48, 75, -76, 23, 89, + 119, -1, -59, 21, 100, 106, 30, 56, 54, -101, 9, 1, 70, 46, 32, -69, 119, 113, -80, + 72, -58, 104, -117, -106, 126, 52, 126, 108, 89, -3, -52, -3, -126, -2, 106, -65, 54, 112, + 76, 98, -73, -20, -54, -33, 22, -29, -121, -55, -8, 44, 102, -77, 55, 122, -7, 35, 106, + -58, -3, 107, 95, -89, -63, 13, -81, -40, 33, -48, 66, -105, 10, 100, 114, 125, -67, 25, + -59, -20, 113, 7, 66, 104, 13, 87, -109, -30, 101, -37, -114, 6, 0, -52, -19, 20, 1, + 102, 46, 111, 5, -117, 29, -125, 51, -80, 109, 51, -6, -24, 124, 1, 26, -21, 27, 123, + 14, 87, 15, -31, -84, 14, 1, -2, 10, 117, -107, -27, 70, -67, -59, 88, 61, -9, -31, + 121, -41, 8, 100, -29, -5, -29, -15, 122, 100, 107, -41, 24, -101, -61, -31, -72, 75, -10, + -20, -2, -85, 78, 79, 79, 35, 21, 103, -60, -19, -35, 54, -56, 52, -64, 121, -122, 10, + -107, 112, -34, -123, 118, -69, 76, 18, 116, 65, 4, 111, -82, -84, -11, -63, -118, 39, -101, + -40, -103, 61, 84, -32, 59, 12, -1, 87, 41, 54, -93, -56, 59, 101, 94, 122, 37, 90, + -116, -6, -46, -111, -31, 63, -102, 123, -103, -125, -91, 76, 97, -118, 115, -78, 98, 19, 7, + -25, -31, 122, 28, -73, 24, 71, -72, 85, -38, -25, 98, -36, -41, 111, -116, 109, 108, -12, + 72, -77, -32, -24, 78, -14, -124, -82, -103, 5, 45, 13, 25, 104, -86, -96, 12, -57, -14, + -66, -30, 16, 51, -38, 115, 74, 106, -32, -34, 70, -56, -99, -20, -75, 41, -103, -105, 69, + 62, 96, 49, 105, 53, 70, -56, 102, -125, -78, -28, 95, -1, 55, 105, -48, -74, 121, -44, + -10, 33, 77, 7, -67, 20, 34, -97, 126, -40, 122, 82, 117, 126, -102, -54, 44, 22, -49, + -87, -44, 26, 7, -67, -109, 104, 28, 105, 110, 90, -74, -86, 68, -38, -74, -67, -39, -15, + -50, -90, -54, 24, 124, 47, 77, -10, 1, 7, -79, 33, -87, -90, -37, -33, 97, 44, -66, + -33, -92, 45, -22, 125, 25, 113, 91, -57, -47, -3, 115, -77, 87, 54, -117, -67, 64, 39, + -63, 104, 124, -38, 65, 11, 111, 115, 43, -49, -8, -101, 63, -40, 99, -79, -68, 76, -8, + 23, -84, 34, 75, -20, 13, -71, -66, -111, 119, 109, 32, -111, 41, 21, 51, -85, 117, -82, + 85, 19, -121, 61, -100, 122, 56, -2, -87, -119, -26, 108, 105, 22, 19, 98, 11, 6, -2, + 111, -101, 64, -66, 18, -56, -12, -18, 78, -123, -124, 126, -77, 20, 105, -72, -18, 22, 93, + 29, 32, -111, 45, 78, -91, 24, 28, -56, 15, -39, 88, 52, 99, 42, -25, -90, 60, 70, + 80, -26, -2, 60, 6, 86, -41, 37, -19, -24, 16, 83, 57, -122, 77, -44, 76, -101, -62, + 88, 126, -123, -42, -40, -27, -16, -13, -92, -6, 116, -121, -122, -33, -38, 111, -24, 109, -38, + 87, 23, 12, -27, -52, 29, 31, -40, 108, 81, -125, -93, 89, -5, 60, 92, -3, -126, -3, + 118, -64, 123, 81, -102, 20, 59, 26, 29, -14, 25, 55, 16, 47, -115, 126, -95, -112, -27, + 27, -3, 112, 109, -120, 83, 59, 17, -58, 85, 5, -9, 39, -23, 127, 66, -119, -92, 49, + 73, 106, 61, 61, 8, -74, 102, -56, 96, 114, 116, 60, -34, -68, 31, -42, -11, -78, 111, + 60, -50, -121, -121, -89, -56, 63, -96, 69, -1, -65, 84, -69, -13, -14, -107, -126, -25, -77, + -101, 94, 11, -53, -76, -108, -58, 49, 68, 42, 57, 49, 123, 6, 49, -28, 79, 90, -88, + 87, 83, 73, -80, -70, 23, 81, 76, 78, 62, -30, 109, 89, 0, 85, 75, -122, -79, 76, + 5, 114, -119, 116, 50, -44, 47, 74, -99, 109, -86, -113, 106, 111, 16, -40, 85, -108, -5, + -94, -105, -98, -97, 46, -29, 89, -71, -126, 44, 14, -76, -44, 115, -121, 65, -100, 122, 18, + -60, -125, -81, 76, 64, 79, -12, 22, -60, -16, -101, 8, 60, -96, 116, -107, 23, 61, 36, + 21, -78, -16, 96, -30, 80, -12, -12, -112, -89, 2, 24, 10, -5, 41, 92, 61, 33, -58, + 71, -49, 76, -92, 56, -29, -54, 55, 5, -103, -72, -11, -14, -21, 77, -94, -43, -13, 10, + 116, -90, -91, 119, -87, 18, -65, 25, 16, 37, 75, -112, 75, -75, -102, 29, -72, -28, -114, + -93, 88, -57, 0, 54, -50, 6, -4, -68, -68, 35, 19, -12, -102, 25, 66, -120, 76, 40, + -117, 75, -63, -32, 81, -52, 5, -86, -68, 32, -57, -80, 115, 113, -23, 12, 70, 5, -49, + 35, -71, 89, -65, -81, 94, -28, -11, -41, 10, -89, 37, 19, -11, 58, -68, 88, -106, 39, + -122, 83, 73, 39, -108, 64, 6, 41, -30, 39, -81, -72, 44, 98, 114, -3, -39, -120, 9, + -57, 33, 120, 34, 32, -6, 61, 57, -110, 103, -24, -71, 63, -98, -46, 41, 94, 73, -107, + -47, 81, 58, 78, -70, -94, 127, -35, 26, 81, -68, 76, 71, 102, 30, 106, 63, -69, 102, + 75, -33, 18, 82, 102, 107, -78, 94, -64, -114, 97, 84, -40, -34, 3, -72, 26, 40, 4, + 52, -114, 70, -9, 76, 6, 54, 24, 14, 15, -10, 23, 31, 8, -116, -125, 11, 78, 119, + -16, -118, 68, -34, -122, -68, -117, -100, -97, -79, 24, -4, -122, 65, -20, -113, 73, -51, 63, + -87, -111, -20, 42, -124, -48, 38, -30, 93, 42, -59, 9, -32, 44, 17, -4, -27, 82, -20, + -15, -112, -64, -42, -105, -94, 103, -124, 107, -85, 69, 124, 69, 9, -22, 112, -110, 46, -70, + 36, 85, -1, 15, -32, -75, -75, -117, 109, 99, -90, 47, 71, 84, -26, -65, 34, 78, 12, + 4, -95, -35, -43, -46, 71, -75, -93, 9, -121, -76, 125, 76, -93, 108, 16, -4, -126, -76, + -117, -69, -46, 70, 105, -5, -22, 7, -58, -97, -12, 13, 43, -65, 103, 49, -54, -73, 42, + 73, -87, -52, 74, 57, -70, 25, -44, 99, 51, -78, 41, 89, -45, -122, -34, 61, -17, 127, + -73, -74, -69, 54, -17, 64, 17, -17, -120, -107, 20, -109, -103, -48, 46, 3, 10, 127, -3, + -9, -86, 98, 14, 124, -19, 59, 1, -85, 108, 31, -7, 21, -20, 126, -120, 118, 99, 104, + 47, -108, -19, -112, -105, 34, -32, 64, -62, -96, -48, 48, 117, -82, 42, 72, -26, -88, 101, + -56, -122, 41, 1, -17, -56, -114, -125, -51, 54, 63, 107, -51, -54, 51, -123, 34, -88, 22, + -124, 112, -47, -120, 36, -44, -64, -71, -75, 9, 124, -72, -95, 64, 61, 51, 68, 38, -94, + -82, 45, 95, 115, -61, -84, -23, 109, -45, 58, 43, 52, -113, -1, -28, 13, -71, -66, 88, + -83, -11, 122, 118, -45, 66, 114, -64, -67, -37, -28, 77, -122, 125, 27, -38, 38, 18, -77, + 79, 96, -9, 37, -107, -124, -3, -124, -71, -6, -127, 14, 39, 6, -110, 26, -90, -91, 124, + -77, 46, 2, 100, 121, 3, 7, -63, 82, -108, 103, 39, 36, -98, 122, 103, -62, -103, -21, + 127, 110, -100, -1, -42, -44, -119, -7, 29, -78, 83, -20, -104, -66, -114, -124, 29, 105, -84, + 25, -62, 12, 61, 77, 93, -124, 41, 111, 0, -122, 121, -48, 3, 124, -61, 4, -103, 124, + 120, -105, -31, -53, 31, -36, -36, -70, -107, 3, -38, 29, 71, -23, -90, 87, -40, 24, -40, + 43, 103, 102, -91, 9, -21, -113, -8, -18, -51, -33, -119, -106, 63, -110, -92, 49, 20, -35, + 8, 96, 55, -22, -83, 17, -9, 92, -61, 25, -35, 38, -80, 35, 97, -21, 10, -105, -27, + -95, -98, -120, 17, -101, 23, -58, 114, 40, 101, -11, -13, -103, -22, -48, -14, -117, 97, 8, + -117, 24, -93, 55, 109, -17, -111, 127, 45, -114, 15, 68, 48, 86, 30, -32, -58, 34, -64, + -31, -40, 16, -43, 36, -109, -62, 24, 23, 67, 112, -37, 2, -91, -34, 67, -70, 10, 2, + -3, 42, -28, 9, -90, -73, -125, -62, -59, 119, -23, -90, -28, 118, -121, -26, -24, -45, 88, + -70, 31, 97, 17, -82, 117, 125, -78, 71, -35, -95, 112, -122, 54, -88, 98, 91, -74, -88, + 7, 104, -43, -2, -64, 126, -73, 28, -20, -62, 5, -106, 78, -110, 48, -42, 116, 48, 113, + -124, -72, 18, 61, -34, -115, -4, 115, 45, -12, -54, -106, 124, 109, -39, -57, -44, -68, 37, + 118, 39, 117, 64, 11, 17, 110, 69, -120, -68, 127, 57, -63, -10, 18, -62, 35, 44, -26, + -85, -127, 85, 70, 32, -114, -24, 23, -16, 121, 9, -23, 2, -13, 40, 112, 110, -29, 59, + -74, -119, -98, 111, 60, 93, 71, 0, 86, -37, -54, 32, 60, 82, -123, 41, 16, -126, 23, + -1, -24, 51, 20, 42, 126, -44, 9, 67, -115, 35, -56, -29, -103, -10, 58, -27, -18, 82, + 70, 99, 23, 1, -75, -111, -26, 28, -112, -118, 46, -112, 117, -11, 91, 120, 57, -92, 10, + 60, -63, 64, -61, 116, 16, 66, -95, 1, -45, -109, 8, 70, -56, -53, -73, 89, 12, 79, + -37, -51, 46, 0, -47, 73, 10, -59, 43, 109, 105, 20, -12, -7, 121, -37, 38, 39, 33, + 118, -110, -31, 124, -93, -10, 65, 118, 107, -24, -61, -67, 38, -50, -104, -126, 93, 48, 100, + -114, 11, 86, 5, 12, 123, 23, 35, 42, -26, 109, 11, -116, 25, -75, 45, -61, -123, -23, + 92, 65, -15, -121, -121, 118, -103, -35, 84, 36, 119, -34, -15, 40, 15, 88, -71, 37, 37, + 88, -79, 4, 15, -63, 63, 16, 4, -75, -17, 107, 0, -45, 53, 79, -108, 5, -107, 24, + 58, 17, 86, 101, 86, -33, 80, -106, 51, -8, -14, -77, 54, 85, 65, -6, 4, -76, -63, + 108, -67, -105, 117, -121, -114, -15, -9, 27, 67, 13, 8, -52, 66, 30, 32, 105, 17, -1, + 85, 96, 93, -30, 114, 49, -121, -79, 89, 39, 101, -118, 15, -20, -97, -45, -71, -125, -58, + -50, -32, 123, -47, -95, 113, 54, -79, 117, -1, -19, -15, 20, 110, -25, 90, 66, -54, -77, + 38, -14, -17, 2, 37, -90, -28, -113, -115, 35, -21, -41, 117, -105, 43, -50, -64, -24, 30, + -14, 64, 123, 125, 64, 5, 17, -102, 57, 67, 85, 28, -52, -32, -80, 104, 42, 23, -52, + -26, 111, 126, 93, 38, -79, -118, 87, 1, -110, 76, -100, -26, -97, -98, 96, -82, 113, 106, + 61, 120, 76, -42, 53, -126, 100, -126, 98, 104, 95, -37, 12, -105, 7, 95, -30, 6, -88, + 55, 55, -38, -123, 33, -86, -2, 19, -124, 7, -23, -63, 65, -18, -18, 72, 47, 102, 120, + -32, 54, -68, 19, 98, 43, 22, -61, 66, -64, -92, 90, -24, 43, -30, 55, 20, 62, -61, + 22, 94, -92, 39, 14, -73, 51, 55, 54, 114, -31, 1, -28, 123, -121, 22, -14, -54, -112, + 94, 95, 28, 111, -82, -99, 109, -31, -28, -39, -92, -11, 47, 41, -55, -89, -60, -17, 84, + -123, -43, 121, 103, -28, 93, -29, -94, 108, 36, -62, -61, 127, 85, 107, 40, -25, -113, 37, + 18, 63, -40, 103, -2, 79, -94, -109, -109, 84, 39, 117, 49, -94, -4, -117, 98, 73, -118, + -101, -86, -6, -72, -28, 109, 81, -27, -104, -89, -17, -37, 116, -84, -1, -124, -12, 24, 27, + 89, 112, 59, -9, -37, 90, -125, 114, 91, 65, 33, -15, 4, 83, -42, -57, -23, 27, 51, + 73, 10, -40, 75, -111, 32, -63, -68, 19, 65, 38, 34, -49, -8, 71, -94, -39, -5, 30, + 3, 100, -40, 37, 96, -33, -20, 38, 0, -53, 2, -7, -87, 117, 125, 104, -24, -14, -43, + -76, 1, -81, 86, -80, 37, -52, -67, -39, 91, -2, 75, -112, -52, 88, 50, 96, -74, -55, + 47, -24, -21, -74, 109, -112, 68, 104, 112, 84, -8, -41, 45, -89, -29, 71, -125, 124, -93, + -71, -13, 46, -118, 97, -54, -10, -9, 98, -53, 56, -101, 80, 58, -23, 51, 67, 38, -69, + -45, 115, -77, 64, 68, -103, 0, -42, -4, 77, -124, -15, -97, -53, 38, -73, 34, 27, 123, + -119, -62, 55, -47, 99, -71, 52, -126, -21, -8, -52, -18, -84, -47, 45, 68, 94, -10, 33, + -63, -35, -26, 2, 19, -108, 105, -57, 107, 78, 69, 99, 65, 116, -87, 49, 3, 11, 97, + 23, -61, 93, 52, -51, -46, -59, -84, -121, 47, -6, -114, -114, -87, -19, 73, -55, 13, -121, + 25, -21, 35, 62, -62, 115, 28, -107, 104, -6, -11, -6, -36, 28, -27, 105, -126, -51, -2, + -19, 79, 16, 45, 24, 43, 100, 100, 110, -122, -101, -79, 113, 23, -35, -23, 64, 64, 75, + 125, 12, 20, 15, -94, 54, -27, -17, 28, -75, -80, 120, 118, -82, 103, 34, -110, 107, -26, + 126, 76, -44, -10, -126, -71, -65, 76, -96, -94, 90, 113, -17, 1, 14, -17, 54, 53, -115, + 75, -17, 70, -67, 59, 55, -62, -59, -122, -97, -122, -110, 11, -102, 46, -43, -104, 24, 40, + -25, -50, 41, 11, 110, 46, 30, 125, -120, -62, 119, -94, -78, -10, -23, -96, -97, 65, 118, + -86, 4, -72, 91, -95, -33, -89, 123, 37, -90, 76, 61, -108, -41, 93, 72, 67, 67, -125, + 61, -75, 83, -104, 72, -102, -29, -83, 1, -74, -122, -16, 111, -17, -111, 39, 56, 38, 104, + 37, 61, 10, -38, 102, -25, -55, 123, -19, 125, -35, -70, -21, -125, -71, -29, -77, -60, 118, + 93, -78, 20, 98, 33, -31, -127, -41, 111, -72, -2, 48, 93, -37, -17, 80, -65, 65, 29, + 40, -111, -92, -61, -25, 105, 65, -3, -41, -54, -113, -48, 26, 77, -53, -114, 114, 77, -34, + 42, -108, 53, 98, -103, 61, -75, 92, -72, -86, -12, 80, 41, 70, -48, -20, 29, 35, 44, + -32, 62, -87, 96, 49, -31, -125, 92, 39, 71, -115, -90, 0, -43, -61, -54, -72, -82, -42, + 88, -7, 106, 39, -20, -6, -17, -104, 78, 9, -4, 123, 32, 71, 53, 19, 115, 88, 55, + -82, -114, -56, 95, 75, 21, 103, -23, 107, -6, 50, -47, -43, 100, 59, 13, -2, -112, 55, + 10, -43, -115, 73, -38, 23, -51, -31, -44, -28, -111, 54, -109, -127, -94, -55, -18, 71, 50, + 71, 125, -59, -111, 124, 126, -80, -115, 18, -123, 121, 13, -16, -110, -97, -41, 127, 113, -76, + -22, 57, -72, -7, 14, -59, 19, 68, -21, 111, 99, 11, -57, 25, 50, 95, -29, -12, -101, + -58, -46, -33, -45, -56, 99, 115, 35, -67, 67, -105, 103, -30, 32, 67, 122, -97, 65, 116, + 51, -49, -63, -88, -90, -64, -37, 99, -68, -113, 75, 62, -84, 56, -113, 40, -10, -2, 98, + -22, -88, 36, 53, -98, 68, 111, -81, 49, -4, 82, 17, 55, -91, 40, -25, 44, 109, -58, + 125, 31, -105, -37, -62, 58, -85, 117, -50, -62, 32, -58, -70, 0, -15, -113, 83, -51, 65, + -89, 126, -85, -87, -25, 112, -12, 31, 91, 12, -106, -13, -18, 124, 105, 33, -76, 113, -28, + -31, 49, 114, -30, -24, 69, 5, -76, 82, -18, -80, 120, -56, 30, 34, 87, -79, 60, -59, + -79, 122, -72, 96, -121, 39, -50, 55, 114, 65, -34, 125, 1, 23, -75, 6, -47, 33, -78, + 70, 78, 118, 127, 14, -70, 9, -32, 25, -16, -101, 66, 85, 109, -1, -91, 20, 114, -13, + -97, -84, 10, -63, 61, 35, 67, 44, 1, -27, -75, 55, -7, -77, -5, 56, 61, -100, -62, + 5, -26, -18, -109, -118, -78, -94, 41, -13, 48, -49, -17, 79, -74, 65, -52, -107, -61, 73, + -88, 127, 39, -10, -125, -105, 48, 57, 45, 48, 103, 126, 67, -111, -107, -108, 15, 63, 36, + 34, 58, 73, -51, 6, -112, -122, -15, 127, -36, -66, -8, 122, -97, 66, 42, 118, -85, -67, + -36, 76, -60, -115, 83, -107, -27, 99, 105, -118, 13, 58, -26, -22, -91, 1, 98, 1, -55, + 102, 33, -48, -103, 98, -116, 125, 63, -78, 1, -74, -113, -98, -79, -122, 102, 101, -36, -41, + 19, -25, 58, 91, -13, -64, 19, 41, 33, 111, 30, -26, -41, 43, 107, -67, -83, 8, -127, + 81, 82, -111, 2, 85, -26, 48, 81, 69, -85, 2, -37, 123, 63, 32, 44, 37, -52, -66, + 55, 86, 19, -21, -103, 66, -103, 13, 109, -83, -116, 45, 69, 84, 23, -110, 24, 97, -57, + 80, 50, -72, 89, -2, -48, 107, -4, 72, -24, 96, 36, -74, 14, -80, 119, 63, -43, -33, + 122, 112, -13, 52, 71, 53, 50, 95, -59, -116, 12, 84, -108, -93, -21, 44, 90, -122, -3, + 54, -52, -8, 12, 80, -110, 111, -116, 66, -39, 113, 10, 105, -41, 70, -124, 46, -4, -19, + 79, -74, 57, 74, -25, 44, 61, 48, -83, -95, 59, 86, 61, 13, 20, -99, 47, 57, 121, + -38, 50, 72, 127, 109, 26, -70, 84, 48, 64, -96, 90, -118, -19, -38, 116, 28, -78, 68, + 61, -119, -62, 47, 4, 65, -121, -55, -94, 32, 91, -41, -77, -38, 43, 93, 21, 58, -21, + 74, -103, -14, -81, -78, 14, 109, 30, 109, -110, -102, -86, 64, 97, 29, -50, 91, -8, 55, + -27, 2, 48, 67, 78, 2, -1, -11, 78, -66, 84, 24, -62, 51, 54, 79, 8, -62, 62, + -35, 76, 95, 9, 10, 75, 21, -16, -56, -52, -125, 63, 87, 96, -39, -66, -45, 2, 71, + -42, 11, 32, -123, -28, -114, 58, -13, 98, 96, -104, 93, -86, 122, -93, -60, 121, -76, -106, + 22, -76, 110, -43, 94, 32, 14, -110, 106, 81, -90, -48, 66, -6, 115, -53, -98, -118, 75, + 82, -28, 29, 35, 9, 32, 57, 89, 78, 57, -125, 6, -44, 74, -39, -44, -125, -75, 95, + 102, 43, -90, -56, -95, -26, 0, 53, 24, -73, 74, -83, -41, -46, -12, 121, 19, -29, -125, + 24, -100, -97, -43, 88, 8, 79, 71, 90, -126, -120, -83, 126, -18, 65, -119, 2, 49, -118, + 23, -6, 43, 30, -23, -48, 70, 25, -14, -32, 39, 16, 46, -37, 50, -49, 29, 4, 76, + 103, 98, 97, -59, -107, -23, -118, 26, -35, -90, -103, 71, 40, 63, -61, 9, 48, -85, -75, + -20, 52, 98, 24, 90, 88, -12, 50, 76, 54, 119, 107, -68, -38, -68, 103, -69, -41, 94, + 3, -123, 41, 19, 71, -22, 62, -51, 48, 119, 63, -67, -100, -9, 0, -101, 46, 60, -28, + -126, -109, 114, 54, 72, -89, -59, -29, 12, 36, 92, 24, -32, -20, 70, 56, -100, 30, -22, + 126, 112, 37, 57, -41, -8, -86, -46, 60, 120, -42, -71, 91, -13, 53, 72, 40, 90, 23, + -55, -100, -94, -51, -10, 113, 60, 86, 49, -33, 99, -36, -102, 78, -68, -22, 17, -27, 85, + 100, -83, 33, -31, -67, 114, 66, 2, -32, 14, 4, 73, -71, 43, -13, 77, -18, -57, -47, + 46, 36, 94, 26, -62, -41, 13, -113, 53, 89, 57, -15, -5, -14, -46, -121, -88, -47, 45, + -56, 115, 13, 33, -76, -106, -89, 59, 11, -19, 64, -5, -104, 106, 6, -51, 82, 77, -44, + -78, -84, -42, -126, 88, 100, 59, 3, 54, -44, -36, 49, -35, 27, 64, 54, 53, 100, 33, + -27, -36, -106, 32, -47, 91, -15, 85, -13, -114, -76, 101, -83, 102, -35, 53, 60, -39, -31, + 102, 26, -93, 96, -44, 82, 126, 114, -15, 116, 107, 20, -115, -82, -125, 18, -117, -24, -38, + -76, -19, 95, 102, -10, 64, -108, -12, -89, -25, -28, -71, -68, -73, -49, -66, 105, -103, -56, + -81, -12, 73, -32, 121, -79, -21, 96, -99, -35, -1, -72, -42, -112, 97, -113, 90, 2, 72, + -61, -76, 87, -109, -11, -70, 19, -79, 72, 24, 102, -91, 11, 103, 71, 83, 118, 69, -58, + 89, 22, 58, -97, 50, 82, 66, 103, 23, -75, -52, -53, -115, 85, 107, -124, -66, 16, -14, + -71, 122, 123, 64, 61, 96, -28, -16, 56, 119, 114, -5, 68, -55, 103, -96, 46, 67, 92, + 1, -109, 68, -27, 8, 62, 77, 49, -13, -76, -2, 114, 55, 3, 67, 122, 51, -91, 16, + -107, -121, 86, 107, 65, -2, -116, 120, 108, 88, 56, -110, 29, 40, -83, 7, 6, 91, 78, + -88, 122, 8, 31, 2, -111, -82, -59, 14, -74, -102, 85, 48, 120, -15, -116, -41, -17, -69, + -51, 84, -73, 7, -31, 122, 11, 101, -88, 1, 106, -1, 85, 96, -38, 35, -48, 46, 91, + -109, -91, -56, 123, -19, -66, 81, -42, 108, 105, 74, 61, 89, -25, -7, -26, -101, -61, 73, + -53, -104, -89, -31, 42, 7, 44, 123, 23, 17, -115, 69, -33, 70, 85, 73}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8/weights_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8/weights_data.h deleted file mode 100644 index 91884235..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8/weights_data.h +++ /dev/null @@ -1,351 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int8_t int16xint8_weights[7920] = { - 118, 98, 35, 46, 18, 96, 107, 92, 59, 73, 100, 7, 94, 43, 112, 33, 55, 111, 5, 20, 68, 58, 82, - 93, 120, 46, 10, 25, 76, 30, 111, 9, 94, 23, 118, 56, 39, 45, 72, 123, 47, 23, 62, 50, 44, 78, - 74, 110, 90, 23, 8, 65, 38, 36, 85, 22, 25, 13, 38, 43, 63, 104, 74, 93, 27, 125, 17, 57, 87, - 95, 71, 52, 90, 71, 54, 5, 93, 94, 55, 89, 48, 12, 103, 117, 78, 74, 20, 84, 10, 100, 19, 17, - 73, 41, 37, 86, 104, 54, 83, 35, 114, 35, 39, 76, 48, 86, 120, 92, 27, 40, 64, 71, 30, 88, 9, - 54, 47, 25, 93, 75, 15, 63, 106, 21, 105, 3, 57, 78, 79, 4, 9, 77, 20, 52, 96, 22, 74, 72, - 85, 95, 19, 26, 57, 13, 10, 124, 50, 19, 52, 116, 30, 102, 35, 11, 60, 35, 77, 110, 78, 119, 119, - 115, 71, 71, 68, 12, 22, 114, 81, 66, 65, 66, 94, 127, 56, 19, 79, 51, 71, 3, 90, 107, 20, 97, - 29, 9, 125, 93, 65, 61, 116, 10, 5, 108, 24, 55, 122, 112, 37, 80, 52, 4, 72, 14, 118, 64, 22, - 102, 52, 55, 93, 6, 42, 115, 57, 104, 123, 77, 116, 17, 81, 41, 124, 97, 7, 120, 92, 121, 53, 42, - 126, 26, 3, 73, 79, 120, 51, 24, 124, 84, 41, 70, 3, 3, 67, 27, 83, 60, 24, 49, 72, 42, 54, - 41, 3, 28, 125, 48, 41, 68, 12, 20, 79, 56, 89, 62, 7, 110, 56, 45, 97, 50, 61, 79, 4, 30, - 121, 115, 110, 52, 25, 92, 1, 122, 28, 63, 125, 14, 61, 109, 15, 8, 94, 118, 106, 13, 29, 105, 34, - 88, 107, 1, 110, 48, 101, 121, 8, 12, 42, 61, 23, 54, 50, 42, 35, 101, 124, 19, 14, 54, 30, 96, - 103, 29, 85, 9, 87, 6, 27, 24, 49, 66, 55, 8, 78, 3, 85, 88, 47, 95, 61, 48, 46, 38, 13, - 23, 106, 44, 123, 114, 70, 120, 15, 16, 123, 79, 78, 36, 86, 59, 49, 11, 124, 127, 102, 70, 64, 35, - 112, 92, 49, 29, 109, 118, 48, 114, 39, 110, 33, 107, 43, 14, 5, 72, 41, 72, 74, 76, 2, 8, 63, - 102, 20, 28, 105, 87, 13, 102, 80, 121, 73, 126, 56, 29, 20, 9, 7, 51, 16, 92, 99, 115, 48, 85, - 53, 41, 119, 19, 3, 117, 74, 98, 118, 53, 33, 65, 64, 49, 7, 62, 44, 60, 41, 55, 24, 53, 93, - 10, 111, 27, 38, 50, 70, 62, 69, 119, 40, 48, 42, 65, 45, 118, 15, 36, 29, 87, 33, 52, 1, 84, - 79, 83, 65, 101, 77, 82, 54, 42, 102, 55, 25, 98, 30, 87, 88, 64, 5, 56, 45, 56, 86, 85, 32, - 74, 104, 98, 14, 33, 86, 102, 85, 30, 25, 71, 76, 98, 103, 82, 82, 116, 12, 1, 82, 116, 108, 121, - 122, 103, 56, 79, 54, 64, 95, 83, 70, 42, 99, 119, 60, 91, 123, 108, 41, 26, 21, 8, 60, 83, 22, - 107, 28, 100, 84, 122, 74, 55, 51, 45, 4, 122, 48, 76, 5, 26, 28, 26, 95, 127, 89, 18, 97, 77, - 110, 70, 115, 19, 84, 91, 1, 97, 1, 36, 92, 115, 16, 74, 42, 122, 124, 52, 59, 66, 11, 37, 101, - 101, 28, 112, 107, 24, 83, 71, 101, 73, 112, 36, 93, 63, 117, 43, 76, 36, 76, 30, 45, 2, 28, 121, - 7, 45, 96, 9, 97, 69, 28, 58, 59, 78, 0, 46, 6, 63, 102, 104, 17, 72, 106, 104, 35, 84, 90, - 116, 124, 19, 37, 106, 3, 95, 127, 94, 15, 65, 103, 49, 12, 62, 72, 77, 29, 60, 103, 65, 43, 61, - 66, 65, 2, 88, 104, 111, 113, 37, 50, 117, 105, 11, 87, 46, 4, 31, 36, 74, 103, 39, 50, 11, 115, - 17, 77, 35, 86, 86, 23, 53, 52, 112, 57, 25, 33, 126, 50, 100, 69, 0, 68, 89, 7, 71, 89, 56, - 86, 89, 33, 61, 67, 11, 114, 124, 47, 63, 68, 22, 65, 94, 68, 69, 120, 46, 48, 99, 81, 104, 83, - 60, 76, 6, 98, 35, 94, 121, 4, 80, 48, 126, 125, 104, 25, 35, 120, 67, 25, 22, 83, 22, 55, 3, - 110, 17, 88, 117, 82, 90, 56, 69, 57, 119, 103, 56, 31, 87, 42, 48, 65, 17, 6, 109, 23, 7, 45, - 48, 107, 28, 66, 83, 121, 36, 100, 61, 32, 117, 64, 117, 18, 86, 89, 60, 8, 29, 42, 3, 72, 2, - 28, 82, 16, 54, 55, 98, 39, 18, 125, 39, 91, 34, 13, 86, 88, 125, 67, 3, 14, 19, 82, 84, 37, - 73, 124, 94, 92, 33, 58, 14, 8, 36, 17, 7, 53, 11, 58, 97, 93, 88, 83, 57, 69, 73, 114, 31, - 16, 74, 9, 97, 16, 74, 20, 89, 14, 73, 6, 82, 11, 63, 10, 42, 70, 88, 8, 55, 53, 37, 112, - 68, 62, 11, 74, 11, 51, 110, 41, 44, 107, 4, 5, 80, 31, 17, 122, 10, 19, 67, 37, 34, 10, 12, - 52, 105, 99, 85, 28, 78, 32, 74, 33, 46, 123, 123, 103, 40, 108, 116, 26, 44, 126, 81, 84, 18, 89, - 57, 99, 115, 26, 47, 75, 78, 117, 6, 76, 89, 109, 66, 38, 80, 15, 44, 69, 64, 121, 127, 84, 46, - 122, 33, 18, 93, 58, 72, 52, 115, 87, 98, 73, 71, 62, 7, 76, 65, 117, 92, 53, 32, 115, 33, 125, - 9, 104, 99, 10, 66, 69, 63, 112, 63, 42, 95, 9, 68, 5, 5, 17, 96, 125, 112, 66, 120, 124, 11, - 93, 127, 34, 14, 111, 102, 15, 1, 81, 8, 48, 25, 77, 116, 50, 20, 37, 32, 11, 62, 59, 116, 79, - 104, 78, 44, 70, 31, 32, 11, 75, 93, 30, 81, 87, 1, 18, 77, 93, 69, 36, 101, 95, 65, 60, 37, - 18, 97, 13, 86, 32, 62, 43, 55, 18, 1, 59, 44, 90, 125, 0, 52, 63, 90, 60, 97, 48, 38, 48, - 1, 75, 120, 87, 82, 61, 78, 32, 39, 46, 82, 15, 89, 69, 71, 21, 46, 78, 1, 51, 35, 30, 8, - 122, 123, 114, 36, 83, 44, 20, 74, 116, 109, 22, 17, 51, 48, 83, 90, 52, 95, 35, 11, 8, 34, 9, - 24, 21, 103, 82, 95, 97, 39, 69, 17, 5, 37, 16, 49, 125, 55, 126, 122, 3, 51, 117, 120, 27, 122, - 41, 116, 95, 89, 43, 125, 108, 56, 79, 60, 38, 94, 123, 13, 38, 77, 13, 117, 81, 8, 37, 117, 22, - 124, 47, 97, 54, 125, 95, 48, 5, 24, 78, 58, 125, 29, 54, 23, 65, 86, 85, 19, 83, 53, 95, 12, - 52, 125, 83, 68, 100, 107, 52, 106, 78, 35, 70, 61, 92, 114, 81, 120, 85, 43, 27, 14, 68, 51, 102, - 1, 79, 125, 125, 62, 67, 67, 39, 77, 83, 29, 56, 57, 100, 53, 6, 102, 101, 119, 115, 40, 117, 92, - 42, 25, 29, 89, 79, 56, 13, 38, 87, 93, 121, 20, 112, 100, 90, 43, 21, 113, 83, 119, 28, 12, 72, - 119, 80, 31, 115, 55, 63, 121, 89, 6, 126, 112, 60, 107, 99, 84, 31, 30, 83, 66, 18, 34, 62, 117, - 40, 89, 107, 41, 121, 18, 21, 72, 103, 49, 52, 11, 46, 66, 53, 22, 1, 91, 39, 69, 70, 32, 50, - 123, 9, 121, 83, 89, 9, 58, 95, 11, 104, 80, 12, 80, 89, 76, 2, 84, 113, 61, 95, 89, 106, 13, - 51, 120, 61, 33, 31, 76, 112, 55, 47, 45, 11, 40, 89, 76, 84, 26, 70, 8, 3, 25, 104, 53, 37, - 36, 112, 83, 42, 69, 111, 125, 35, 8, 20, 85, 112, 123, 73, 5, 103, 15, 90, 10, 53, 113, 69, 116, - 16, 14, 56, 70, 42, 24, 10, 78, 113, 87, 47, 104, 97, 49, 93, 33, 18, 126, 83, 55, 120, 119, 125, - 18, 114, 118, 33, 59, 11, 20, 111, 126, 102, 35, 74, 49, 109, 119, 53, 24, 89, 50, 97, 50, 23, 22, - 15, 111, 49, 103, 17, 103, 29, 66, 108, 25, 89, 47, 6, 94, 44, 63, 37, 97, 89, 87, 100, 93, 101, - 66, 31, 114, 77, 64, 75, 47, 33, 32, 36, 76, 11, 75, 10, 26, 124, 62, 60, 18, 110, 115, 84, 66, - 124, 14, 4, 99, 59, 58, 99, 36, 47, 61, 55, 50, 123, 67, 127, 66, 34, 105, 13, 87, 21, 7, 32, - 60, 5, 19, 96, 77, 78, 77, 121, 32, 106, 116, 59, 67, 53, 103, 65, 10, 126, 30, 95, 70, 123, 76, - 18, 81, 125, 27, 13, 63, 32, 8, 38, 15, 123, 67, 112, 16, 90, 43, 13, 29, 3, 20, 21, 26, 78, - 63, 38, 7, 127, 108, 127, 119, 47, 31, 88, 6, 119, 86, 56, 24, 6, 15, 119, 29, 108, 121, 96, 31, - 24, 118, 16, 81, 25, 103, 55, 21, 22, 58, 9, 116, 42, 91, 19, 120, 65, 25, 103, 24, 38, 62, 35, - 109, 44, 97, 36, 97, 64, 46, 55, 16, 74, 34, 118, 127, 20, 18, 6, 11, 22, 21, 44, 109, 48, 46, - 48, 2, 115, 42, 66, 93, 64, 15, 33, 67, 99, 22, 27, 44, 52, 35, 21, 102, 76, 6, 24, 90, 2, - 93, 94, 23, 19, 42, 57, 69, 111, 9, 92, 40, 58, 60, 36, 40, 17, 119, 57, 79, 48, 65, 90, 22, - 66, 73, 66, 20, 54, 127, 54, 37, 84, 72, 39, 8, 5, 95, 116, 82, 32, 51, 56, 97, 47, 47, 70, - 113, 108, 82, 72, 70, 54, 101, 45, 47, 12, 23, 22, 78, 107, 20, 66, 118, 81, 25, 29, 40, 95, 49, - 55, 123, 18, 19, 28, 8, 44, 122, 13, 104, 19, 73, 2, 15, 95, 65, 82, 73, 16, 110, 49, 98, 109, - 73, 42, 112, 112, 49, 43, 18, 2, 22, 40, 95, 19, 57, 15, 76, 66, 43, 91, 112, 127, 71, 21, 98, - 105, 96, 72, 118, 103, 9, 2, 74, 37, 75, 42, 98, 0, 16, 34, 63, 40, 73, 15, 117, 117, 13, 108, - 60, 55, 40, 106, 4, 19, 42, 77, 1, 40, 97, 74, 50, 13, 26, 100, 113, 40, 84, 98, 3, 112, 29, - 35, 74, 81, 22, 9, 45, 113, 69, 91, 109, 48, 24, 17, 15, 97, 125, 75, 57, 72, 57, 117, 27, 72, - 126, 100, 77, 62, 44, 28, 65, 53, 14, 126, 96, 47, 14, 94, 40, 83, 77, 5, 40, 39, 124, 98, 110, - 122, 58, 79, 38, 91, 51, 81, 101, 30, 60, 11, 3, 20, 90, 57, 63, 76, 69, 45, 89, 97, 79, 127, - 63, 8, 21, 14, 99, 90, 76, 33, 38, 35, 7, 103, 28, 71, 53, 24, 38, 20, 5, 123, 70, 30, 99, - 88, 3, 4, 56, 35, 103, 124, 81, 61, 96, 50, 12, 56, 96, 46, 45, 116, 44, 43, 53, 111, 2, 92, - 112, 116, 69, 113, 28, 72, 4, 52, 85, 105, 75, 3, 71, 77, 107, 15, 28, 117, 112, 67, 100, 103, 18, - 123, 40, 72, 16, 39, 1, 2, 57, 24, 20, 35, 29, 39, 46, 28, 86, 86, 5, 93, 65, 85, 97, 116, - 61, 31, 56, 82, 7, 59, 74, 125, 81, 115, 112, 87, 16, 40, 81, 25, 86, 125, 68, 117, 6, 124, 114, - 119, 44, 16, 11, 23, 53, 18, 16, 48, 46, 96, 82, 20, 27, 112, 20, 72, 48, 35, 49, 70, 39, 78, - 121, 35, 112, 97, 79, 60, 121, 17, 96, 115, 93, 40, 70, 64, 100, 47, 75, 120, 98, 102, 76, 65, 122, - 46, 23, 89, 68, 96, 110, 23, 1, 108, 12, 65, 48, 69, 40, 80, 19, 49, 18, 59, 126, 45, 34, 87, - 41, 50, 23, 2, 72, 106, 29, 34, 32, 43, 88, 109, 104, 118, 92, 82, 110, 30, 23, 54, 95, 28, 56, - 30, 81, 113, 78, 30, 27, 17, 62, 4, 22, 89, 78, 65, 69, 37, 109, 40, 36, 31, 91, 87, 37, 56, - 17, 81, 31, 7, 55, 51, 75, 4, 39, 98, 36, 8, 50, 117, 73, 71, 123, 48, 57, 22, 124, 40, 54, - 99, 71, 116, 74, 23, 69, 106, 93, 40, 100, 92, 76, 105, 72, 37, 6, 17, 55, 60, 91, 26, 80, 59, - 82, 35, 117, 99, 86, 23, 10, 14, 72, 124, 74, 20, 105, 42, 81, 41, 116, 61, 75, 19, 38, 69, 36, - 94, 77, 95, 114, 64, 11, 108, 96, 76, 124, 58, 8, 22, 54, 4, 47, 65, 34, 66, 116, 125, 79, 45, - 73, 14, 15, 78, 66, 68, 93, 108, 113, 44, 60, 125, 77, 86, 92, 94, 125, 53, 4, 85, 114, 33, 99, - 98, 115, 59, 4, 124, 95, 56, 21, 71, 119, 71, 74, 121, 29, 17, 94, 22, 30, 80, 29, 14, 64, 22, - 87, 115, 99, 48, 47, 40, 52, 112, 27, 51, 120, 118, 38, 6, 85, 56, 86, 3, 101, 52, 69, 91, 111, - 120, 99, 8, 123, 38, 16, 74, 88, 61, 87, 73, 7, 8, 8, 116, 65, 106, 30, 62, 73, 13, 13, 28, - 68, 101, 57, 13, 24, 102, 70, 20, 18, 27, 124, 0, 93, 85, 43, 93, 67, 114, 10, 67, 46, 58, 118, - 36, 30, 106, 74, 70, 21, 105, 88, 125, 78, 62, 112, 120, 70, 70, 73, 90, 17, 23, 41, 81, 111, 103, - 91, 37, 9, 27, 112, 10, 82, 30, 122, 8, 52, 61, 93, 71, 68, 71, 90, 36, 62, 117, 86, 79, 88, - 60, 99, 19, 9, 4, 9, 14, 43, 111, 63, 4, 19, 23, 70, 124, 16, 70, 30, 111, 115, 122, 85, 89, - 42, 36, 49, 32, 23, 91, 87, 31, 18, 114, 18, 59, 124, 23, 72, 6, 95, 112, 56, 99, 61, 42, 103, - 121, 123, 86, 83, 18, 65, 51, 105, 26, 10, 103, 107, 28, 41, 29, 11, 31, 34, 102, 20, 106, 12, 113, - 32, 93, 89, 53, 58, 83, 68, 82, 87, 113, 35, 56, 8, 23, 85, 76, 13, 67, 44, 53, 91, 9, 40, - 86, 37, 76, 65, 15, 45, 93, 99, 43, 64, 24, 115, 86, 40, 14, 12, 42, 112, 71, 99, 93, 7, 92, - 103, 72, 76, 73, 124, 119, 57, 48, 14, 64, 109, 70, 104, 3, 46, 75, 33, 78, 64, 22, 74, 83, 118, - 115, 74, 1, 122, 32, 24, 38, 83, 41, 63, 121, 22, 65, 127, 96, 104, 110, 35, 7, 2, 109, 57, 68, - 40, 87, 8, 44, 23, 111, 98, 45, 105, 11, 78, 31, 116, 48, 97, 120, 83, 95, 109, 46, 116, 95, 125, - 124, 25, 6, 101, 87, 70, 27, 74, 17, 104, 92, 15, 96, 47, 89, 102, 116, 94, 17, 34, 110, 85, 61, - 114, 126, 119, 112, 45, 98, 47, 16, 59, 74, 127, 83, 64, 91, 112, 47, 12, 3, 53, 7, 69, 75, 2, - 120, 60, 6, 31, 103, 112, 94, 101, 123, 69, 6, 58, 6, 103, 8, 46, 63, 6, 43, 59, 75, 125, 112, - 100, 95, 5, 115, 44, 62, 74, 53, 104, 69, 51, 96, 38, 95, 66, 96, 9, 6, 94, 126, 100, 93, 46, - 40, 122, 83, 12, 63, 25, 46, 115, 26, 26, 67, 34, 29, 41, 126, 29, 122, 72, 55, 68, 95, 87, 73, - 103, 109, 64, 10, 109, 92, 69, 3, 42, 54, 93, 21, 91, 77, 34, 110, 6, 118, 80, 9, 44, 20, 69, - 113, 47, 26, 88, 105, 64, 36, 5, 29, 73, 76, 46, 35, 111, 115, 122, 25, 94, 96, 64, 122, 127, 48, - 83, 93, 91, 76, 58, 127, 87, 1, 73, 21, 109, 29, 74, 113, 104, 28, 106, 25, 45, 113, 61, 104, 20, - 43, 96, 119, 36, 5, 4, 64, 71, 112, 61, 43, 124, 104, 86, 69, 51, 69, 33, 42, 60, 8, 111, 102, - 77, 20, 114, 16, 122, 113, 28, 52, 113, 81, 54, 84, 47, 96, 39, 72, 78, 55, 126, 119, 89, 117, 107, - 103, 81, 64, 27, 4, 76, 67, 40, 85, 47, 65, 30, 6, 115, 25, 56, 125, 91, 58, 18, 94, 70, 57, - 96, 70, 87, 59, 118, 102, 86, 114, 25, 5, 105, 117, 88, 94, 107, 108, 93, 54, 37, 31, 87, 52, 17, - 110, 74, 89, 83, 83, 107, 54, 83, 103, 67, 85, 63, 73, 93, 43, 67, 124, 34, 125, 5, 4, 84, 11, - 48, 13, 58, 71, 45, 113, 30, 41, 110, 119, 76, 100, 89, 8, 35, 28, 11, 114, 24, 81, 103, 122, 120, - 43, 39, 126, 5, 82, 39, 52, 22, 33, 8, 87, 122, 33, 125, 114, 99, 52, 36, 95, 93, 19, 14, 28, - 96, 57, 76, 94, 14, 102, 55, 82, 63, 78, 29, 87, 121, 63, 87, 42, 4, 45, 68, 60, 93, 74, 84, - 84, 113, 123, 87, 71, 52, 64, 51, 18, 125, 19, 61, 62, 82, 123, 10, 108, 41, 90, 78, 35, 10, 77, - 84, 19, 45, 8, 46, 37, 4, 21, 19, 15, 43, 125, 83, 119, 5, 66, 83, 23, 77, 106, 33, 79, 74, - 5, 0, 101, 26, 110, 103, 112, 59, 118, 58, 69, 109, 102, 55, 53, 8, 5, 76, 29, 20, 63, 43, 95, - 70, 17, 109, 97, 11, 30, 66, 119, 85, 93, 6, 55, 68, 12, 66, 105, 120, 120, 91, 74, 82, 99, 88, - 35, 27, 84, 43, 13, 57, 79, 106, 15, 65, 34, 25, 13, 9, 0, 65, 118, 74, 22, 75, 20, 104, 92, - 28, 89, 22, 92, 123, 77, 24, 14, 116, 100, 37, 80, 71, 93, 36, 66, 33, 50, 50, 112, 29, 20, 61, - 108, 37, 25, 33, 85, 95, 45, 97, 47, 125, 82, 95, 91, 85, 54, 117, 91, 18, 28, 45, 87, 38, 63, - 51, 71, 26, 79, 112, 5, 83, 99, 31, 70, 89, 47, 51, 125, 112, 83, 41, 67, 79, 70, 119, 57, 106, - 47, 25, 24, 61, 102, 95, 12, 78, 53, 46, 11, 50, 49, 62, 121, 116, 99, 88, 34, 20, 28, 76, 15, - 62, 63, 89, 101, 18, 103, 12, 73, 106, 26, 85, 112, 84, 105, 68, 116, 113, 110, 59, 126, 126, 2, 44, - 112, 118, 117, 40, 21, 112, 99, 98, 99, 80, 60, 97, 110, 30, 58, 81, 20, 33, 119, 58, 99, 95, 99, - 107, 82, 18, 125, 53, 20, 71, 102, 119, 51, 110, 55, 44, 115, 51, 83, 4, 9, 113, 53, 55, 3, 38, - 3, 15, 37, 109, 19, 91, 78, 64, 76, 98, 29, 111, 6, 46, 89, 5, 88, 87, 38, 91, 30, 119, 3, - 102, 102, 40, 34, 119, 69, 45, 91, 61, 69, 99, 120, 12, 102, 84, 43, 47, 13, 11, 64, 5, 126, 104, - 107, 121, 18, 30, 50, 119, 76, 77, 126, 114, 99, 59, 21, 26, 9, 5, 60, 120, 107, 70, 0, 17, 97, - 39, 92, 91, 37, 55, 4, 15, 117, 64, 69, 64, 93, 42, 122, 97, 32, 35, 42, 112, 11, 14, 82, 2, - 75, 48, 98, 105, 17, 121, 3, 40, 13, 59, 52, 83, 24, 44, 12, 99, 33, 68, 31, 94, 57, 50, 8, - 36, 101, 89, 57, 78, 79, 3, 62, 50, 75, 119, 78, 44, 14, 46, 54, 99, 62, 83, 115, 39, 56, 15, - 69, 42, 91, 42, 68, 90, 37, 43, 114, 113, 113, 114, 81, 57, 86, 27, 27, 1, 51, 39, 3, 35, 1, - 45, 117, 2, 92, 78, 57, 62, 119, 98, 126, 93, 34, 82, 114, 7, 101, 7, 40, 59, 73, 2, 54, 87, - 24, 103, 27, 118, 6, 6, 111, 2, 41, 41, 36, 46, 77, 22, 20, 83, 69, 117, 11, 28, 98, 109, 38, - 39, 60, 52, 116, 79, 108, 96, 122, 28, 119, 53, 2, 5, 59, 104, 112, 82, 113, 19, 31, 111, 115, 89, - 109, 27, 39, 78, 17, 108, 121, 75, 94, 98, 58, 10, 127, 29, 92, 51, 56, 104, 96, 92, 119, 6, 53, - 62, 79, 98, 5, 126, 122, 101, 19, 58, 78, 9, 78, 62, 16, 91, 83, 79, 90, 52, 42, 88, 30, 14, - 93, 99, 45, 7, 38, 22, 60, 104, 49, 26, 121, 36, 12, 71, 85, 39, 84, 43, 24, 10, 31, 26, 54, - 84, 61, 39, 99, 61, 69, 6, 67, 65, 101, 72, 94, 39, 42, 50, 115, 50, 5, 109, 58, 107, 98, 8, - 15, 32, 122, 86, 16, 54, 10, 56, 101, 50, 6, 75, 43, 72, 80, 34, 51, 8, 109, 27, 28, 89, 105, - 2, 120, 113, 124, 111, 55, 12, 117, 45, 117, 49, 84, 58, 47, 101, 32, 107, 12, 60, 80, 5, 84, 98, - 64, 72, 36, 109, 82, 0, 38, 0, 40, 113, 104, 109, 99, 30, 77, 31, 103, 127, 125, 17, 93, 5, 90, - 74, 48, 100, 50, 48, 77, 33, 18, 110, 3, 2, 104, 37, 124, 83, 54, 5, 48, 94, 56, 117, 115, 125, - 84, 1, 65, 13, 3, 80, 29, 83, 13, 108, 118, 32, 105, 114, 50, 80, 81, 57, 89, 120, 106, 25, 34, - 57, 9, 42, 125, 35, 41, 4, 70, 100, 49, 94, 4, 76, 54, 81, 89, 115, 81, 75, 12, 109, 84, 16, - 16, 54, 73, 114, 54, 114, 25, 110, 120, 21, 7, 35, 61, 11, 78, 123, 76, 94, 62, 98, 2, 110, 14, - 88, 114, 106, 101, 55, 2, 40, 123, 106, 48, 54, 74, 4, 111, 121, 41, 32, 7, 109, 59, 29, 124, 12, - 65, 94, 95, 69, 80, 98, 121, 86, 86, 66, 8, 76, 126, 64, 4, 60, 67, 101, 2, 65, 111, 2, 121, - 113, 2, 66, 121, 95, 98, 123, 123, 16, 61, 89, 16, 109, 22, 47, 79, 98, 76, 88, 6, 44, 24, 25, - 62, 34, 20, 59, 75, 27, 113, 118, 102, 116, 103, 100, 66, 101, 97, 73, 77, 4, 123, 27, 106, 85, 98, - 33, 69, 46, 78, 8, 49, 68, 115, 81, 66, 50, 121, 98, 2, 100, 27, 29, 68, 22, 59, 9, 108, 106, - 30, 21, 29, 115, 16, 8, 115, 60, 122, 76, 104, 66, 63, 38, 116, 85, 58, 92, 24, 47, 116, 62, 4, - 73, 113, 39, 57, 55, 21, 16, 63, 73, 60, 83, 88, 38, 126, 16, 81, 53, 18, 96, 117, 34, 33, 18, - 125, 105, 100, 92, 3, 80, 13, 47, 41, 5, 79, 76, 82, 24, 28, 90, 19, 104, 10, 32, 11, 78, 104, - 103, 117, 88, 104, 106, 126, 62, 8, 36, 67, 40, 85, 51, 112, 21, 124, 92, 49, 1, 9, 120, 31, 117, - 5, 10, 97, 66, 15, 117, 15, 71, 88, 66, 14, 82, 25, 3, 37, 112, 49, 36, 83, 36, 114, 97, 37, - 47, 121, 3, 72, 65, 7, 83, 83, 6, 90, 99, 13, 10, 108, 84, 39, 122, 92, 41, 120, 8, 47, 3, - 91, 49, 58, 81, 37, 125, 73, 75, 87, 88, 26, 49, 77, 113, 7, 36, 74, 46, 127, 16, 2, 54, 108, - 111, 52, 83, 4, 67, 71, 22, 19, 30, 100, 120, 111, 64, 20, 81, 43, 42, 78, 63, 15, 28, 107, 46, - 80, 46, 13, 28, 87, 82, 12, 10, 81, 51, 44, 80, 69, 69, 100, 68, 44, 88, 24, 112, 6, 90, 20, - 38, 28, 103, 73, 117, 71, 76, 36, 49, 68, 123, 125, 81, 51, 111, 81, 78, 81, 33, 75, 88, 30, 53, - 107, 56, 74, 2, 88, 13, 21, 35, 54, 61, 35, 102, 76, 52, 82, 63, 38, 77, 47, 104, 113, 73, 67, - 15, 59, 19, 103, 13, 19, 30, 84, 32, 123, 26, 77, 39, 18, 18, 38, 87, 75, 47, 98, 80, 23, 77, - 88, 38, 117, 85, 38, 21, 66, 24, 92, 95, 19, 47, 12, 86, 100, 14, 26, 65, 36, 79, 24, 59, 35, - 61, 123, 76, 127, 41, 112, 29, 40, 0, 23, 126, 83, 84, 75, 55, 32, 27, 34, 13, 76, 82, 111, 104, - 52, 109, 109, 27, 96, 25, 33, 112, 112, 36, 107, 10, 101, 53, 57, 51, 110, 45, 0, 25, 123, 108, 6, - 75, 66, 59, 64, 47, 51, 91, 39, 116, 18, 106, 34, 47, 48, 68, 44, 74, 77, 34, 65, 15, 28, 93, - 24, 15, 112, 99, 72, 44, 64, 49, 13, 34, 24, 20, 31, 41, 11, 22, 26, 25, 49, 79, 83, 19, 66, - 116, 70, 71, 41, 27, 1, 2, 55, 14, 106, 69, 115, 94, 69, 97, 112, 17, 61, 19, 69, 99, 127, 18, - 40, 120, 89, 44, 56, 58, 109, 123, 9, 66, 16, 119, 17, 124, 45, 34, 82, 64, 76, 13, 125, 46, 103, - 106, 104, 35, 29, 47, 101, 85, 41, 4, 127, 70, 101, 63, 10, 33, 64, 80, 98, 88, 119, 111, 84, 78, - 36, 83, 51, 75, 62, 2, 61, 87, 87, 115, 41, 79, 11, 114, 116, 15, 40, 14, 40, 39, 54, 125, 107, - 15, 124, 104, 38, 98, 12, 97, 2, 29, 113, 107, 56, 97, 101, 6, 12, 25, 6, 47, 102, 76, 57, 115, - 111, 19, 109, 64, 23, 12, 102, 103, 56, 112, 55, 30, 18, 97, 96, 3, 101, 88, 104, 95, 91, 68, 100, - 64, 71, 115, 37, 64, 92, 122, 34, 96, 21, 108, 54, 97, 46, 75, 103, 30, 76, 91, 93, 86, 107, 17, - 43, 58, 81, 52, 99, 57, 2, 27, 120, 52, 44, 84, 26, 72, 70, 122, 11, 51, 125, 51, 41, 61, 86, - 121, 0, 50, 89, 119, 121, 35, 38, 90, 47, 81, 86, 3, 38, 89, 82, 31, 38, 119, 63, 57, 77, 56, - 83, 124, 21, 74, 53, 83, 90, 102, 80, 92, 60, 4, 79, 98, 62, 81, 94, 122, 47, 28, 121, 112, 120, - 39, 46, 100, 119, 59, 102, 28, 108, 112, 41, 75, 21, 94, 76, 88, 98, 20, 7, 59, 102, 75, 103, 100, - 75, 27, 48, 4, 123, 91, 6, 42, 22, 100, 83, 11, 68, 58, 64, 81, 94, 116, 121, 90, 67, 52, 39, - 67, 110, 92, 99, 118, 3, 67, 82, 103, 99, 75, 2, 122, 54, 121, 53, 87, 65, 119, 118, 87, 62, 36, - 120, 38, 44, 52, 121, 124, 2, 105, 34, 48, 114, 105, 11, 61, 108, 106, 99, 92, 41, 103, 43, 39, 77, - 105, 34, 35, 34, 13, 79, 110, 30, 66, 124, 94, 21, 31, 30, 11, 69, 25, 69, 25, 81, 62, 99, 52, - 45, 99, 65, 90, 124, 126, 64, 46, 28, 27, 126, 81, 24, 47, 29, 48, 33, 67, 7, 52, 124, 61, 15, - 124, 126, 110, 100, 27, 43, 108, 89, 37, 112, 76, 23, 69, 96, 44, 5, 24, 28, 124, 16, 15, 74, 87, - 81, 86, 24, 63, 104, 59, 58, 93, 111, 44, 73, 81, 39, 5, 61, 67, 122, 17, 93, 55, 120, 101, 82, - 101, 10, 88, 96, 4, 123, 60, 67, 110, 46, 106, 61, 8, 24, 57, 6, 15, 122, 98, 22, 94, 50, 72, - 127, 82, 104, 37, 46, 0, 42, 2, 17, 92, 73, 7, 79, 75, 84, 2, 122, 8, 53, 115, 71, 29, 68, - 96, 30, 52, 84, 26, 76, 105, 87, 13, 115, 103, 21, 94, 41, 62, 123, 56, 31, 17, 27, 18, 39, 96, - 16, 10, 8, 16, 126, 30, 30, 102, 71, 96, 65, 119, 65, 59, 86, 28, 72, 110, 101, 90, 43, 91, 127, - 19, 52, 51, 33, 32, 2, 60, 106, 127, 73, 49, 76, 10, 86, 123, 52, 63, 12, 65, 21, 51, 23, 93, - 15, 15, 39, 87, 109, 23, 59, 25, 87, 59, 33, 117, 93, 50, 8, 7, 70, 88, 12, 102, 115, 10, 44, - 71, 22, 13, 114, 58, 20, 63, 95, 98, 46, 22, 127, 104, 39, 75, 57, 53, 95, 0, 73, 109, 46, 51, - 84, 70, 69, 49, 49, 79, 80, 41, 119, 47, 124, 61, 32, 47, 1, 14, 96, 69, 84, 33, 80, 93, 56, - 39, 124, 15, 107, 11, 86, 11, 84, 13, 116, 31, 12, 72, 11, 111, 12, 125, 16, 57, 12, 107, 31, 62, - 5, 12, 94, 98, 50, 118, 68, 70, 100, 111, 101, 36, 1, 116, 45, 98, 56, 3, 25, 16, 10, 75, 61, - 106, 101, 9, 27, 33, 69, 10, 31, 123, 13, 118, 117, 35, 22, 64, 122, 63, 91, 10, 29, 13, 51, 124, - 59, 116, 31, 119, 58, 91, 106, 51, 108, 79, 72, 120, 17, 78, 83, 1, 78, 71, 4, 83, 50, 34, 127, - 59, 94, 126, 103, 117, 65, 77, 18, 116, 85, 24, 46, 52, 44, 112, 52, 45, 124, 127, 94, 24, 72, 104, - 83, 103, 47, 5, 22, 72, 117, 68, 25, 88, 88, 97, 46, 43, 82, 48, 44, 102, 33, 59, 82, 53, 81, - 8, 69, 73, 106, 109, 107, 53, 30, 119, 100, 49, 55, 87, 83, 86, 114, 110, 70, 124, 114, 57, 101, 39, - 82, 13, 95, 38, 49, 39, 36, 30, 121, 44, 90, 24, 27, 44, 46, 69, 23, 51, 33, 111, 5, 123, 121, - 76, 51, 6, 108, 112, 89, 50, 124, 114, 33, 97, 27, 79, 92, 63, 90, 43, 109, 35, 17, 1, 32, 10, - 70, 105, 32, 124, 117, 90, 27, 73, 51, 48, 122, 75, 56, 77, 19, 109, 110, 6, 22, 53, 127, 87, 86, - 123, 118, 23, 98, 36, 81, 46, 126, 89, 96, 97, 26, 30, 7, 89, 92, 124, 59, 26, 65, 15, 22, 41, - 46, 74, 68, 67, 39, 116, 17, 94, 69, 12, 115, 7, 125, 60, 108, 104, 94, 116, 61, 85, 18, 110, 105, - 28, 113, 87, 66, 83, 24, 116, 96, 122, 103, 13, 86, 74, 80, 52, 89, 48, 54, 55, 64, 52, 60, 5, - 77, 53, 93, 105, 109, 50, 72, 26, 109, 105, 76, 45, 99, 88, 59, 56, 54, 102, 17, 66, 6, 122, 26, - 48, 94, 107, 17, 28, 121, 14, 37, 44, 84, 104, 57, 73, 93, 8, 30, 15, 48, 21, 80, 74, 124, 14, - 77, 93, 33, 17, 77, 30, 64, 71, 22, 117, 88, 56, 89, 91, 108, 54, 91, 22, 86, 37, 117, 56, 55, - 39, 16, 94, 95, 46, 120, 117, 91, 43, 11, 22, 42, 107, 43, 106, 17, 12, 41, 101, 103, 7, 74, 121, - 49, 109, 87, 124, 40, 120, 66, 51, 25, 98, 32, 85, 69, 55, 55, 104, 5, 83, 57, 104, 84, 69, 4, - 97, 14, 37, 41, 48, 71, 108, 69, 3, 107, 94, 90, 47, 97, 65, 44, 112, 26, 22, 32, 76, 74, 88, - 106, 55, 34, 46, 15, 14, 49, 29, 89, 1, 68, 23, 37, 9, 73, 59, 78, 34, 13, 74, 82, 119, 119, - 45, 47, 13, 80, 20, 17, 10, 64, 60, 101, 122, 107, 51, 15, 38, 84, 7, 115, 18, 121, 38, 92, 117, - 4, 42, 84, 75, 31, 14, 108, 38, 58, 12, 115, 55, 95, 26, 33, 6, 47, 63, 81, 120, 88, 35, 15, - 26, 117, 5, 124, 69, 87, 102, 82, 98, 15, 7, 10, 116, 88, 115, 22, 111, 15, 63, 87, 96, 9, 7, - 106, 24, 32, 71, 37, 47, 30, 85, 72, 119, 111, 21, 63, 106, 92, 96, 87, 110, 126, 66, 103, 50, 73, - 31, 113, 6, 63, 86, 123, 66, 63, 54, 12, 124, 116, 5, 115, 96, 78, 72, 116, 86, 98, 76, 108, 45, - 16, 32, 42, 44, 110, 53, 11, 121, 25, 112, 46, 43, 1, 113, 51, 61, 84, 92, 93, 105, 79, 6, 85, - 92, 85, 72, 72, 99, 81, 30, 18, 32, 26, 48, 93, 8, 14, 64, 110, 6, 50, 94, 86, 18, 123, 21, - 44, 97, 37, 74, 92, 11, 12, 23, 72, 71, 20, 104, 106, 110, 57, 24, 60, 39, 94, 110, 20, 22, 46, - 48, 57, 90, 38, 114, 105, 45, 75, 105, 78, 78, 60, 86, 122, 117, 93, 10, 29, 11, 26, 53, 115, 124, - 21, 56, 56, 83, 65, 93, 108, 42, 112, 7, 61, 114, 38, 78, 70, 119, 27, 121, 85, 114, 110, 53, 56, - 38, 4, 38, 56, 47, 28, 42, 107, 59, 24, 52, 13, 88, 81, 48, 40, 82, 80, 71, 34, 9, 124, 66, - 102, 117, 113, 21, 14, 27, 105, 98, 41, 89, 57, 83, 104, 108, 48, 53, 47, 127, 11, 32, 56, 40, 73, - 17, 50, 118, 105, 122, 5, 14, 85, 61, 57, 111, 104, 25, 18, 110, 54, 93, 98, 86, 47, 22, 95, 71, - 47, 42, 106, 40, 104, 34, 27, 29, 121, 63, 32, 79, 106, 119, 89, 109, 125, 23, 73, 75, 18, 64, 23, - 5, 51, 86, 80, 7, 81, 94, 56, 76, 52, 20, 116, 69, 82, 63, 36, 8, 73, 98, 33, 124, 8, 98, - 44, 4, 10, 47, 104, 85, 92, 37, 126, 92, 12, 86, 15, 30, 114, 100, 7, 104, 55, 37, 15, 49, 108, - 76, 98, 26, 89, 68, 96, 9, 84, 71, 19, 116, 58, 22, 125, 37, 64, 1, 30, 123, 57, 62, 10, 72, - 68, 98, 44, 118, 6, 100, 27, 41, 21, 121, 76, 34, 77, 77, 82, 53, 38, 57, 23, 115, 115, 1, 120, - 63, 88, 58, 52, 64, 107, 36, 55, 14, 4, 59, 84, 20, 113, 6, 107, 70, 84, 123, 17, 112, 103, 97, - 40, 66, 29, 25, 120, 15, 93, 106, 7, 119, 71, 48, 37, 5, 109, 3, 121, 5, 40, 113, 8, 22, 93, - 121, 82, 6, 113, 36, 65, 57, 125, 115, 89, 99, 13, 5, 125, 104, 21, 111, 76, 48, 11, 81, 54, 70, - 118, 9, 68, 68, 88, 123, 65, 18, 127, 75, 115, 6, 102, 27, 53, 9, 122, 14, 60, 88, 1, 42, 6, - 125, 89, 18, 41, 88, 122, 56, 92, 33, 62, 97, 4, 67, 60, 57, 0, 53, 10, 68, 106, 70, 55, 33, - 107, 61, 40, 105, 74, 76, 114, 33, 64, 47, 0, 27, 114, 51, 75, 3, 99, 11, 42, 53, 101, 34, 82, - 126, 27, 27, 48, 97, 65, 34, 32, 20, 64, 99, 92, 32, 8, 82, 40, 111, 37, 115, 24, 107, 106, 117, - 107, 65, 81, 4, 43, 26, 105, 10, 119, 49, 37, 53, 57, 70, 82, 15, 111, 65, 26, 26, 107, 120, 22, - 65, 98, 2, 112, 119, 93, 101, 112, 8, 55, 96, 12, 115, 21, 1, 22, 3, 40, 97, 37, 76, 51, 50, - 32, 17, 125, 76, 5, 65, 58, 59, 11, 80, 111, 121, 91, 50, 40, 5, 12, 88, 23, 7, 54, 72, 58, - 81, 107, 17, 4, 0, 36, 103, 74, 109, 34, 69, 94, 78, 84, 120, 72, 20, 32, 122, 92, 75, 85, 118, - 119, 104, 13, 64, 102, 82, 74, 42, 45, 81, 30, 114, 90, 94, 107, 5, 85, 47, 93, 33, 23, 5, 61, - 99, 90, 78, 97, 33, 110, 64, 105, 5, 38, 125, 24, 9, 39, 108, 87, 10, 9, 4, 55, 26, 64, 82, - 45, 20, 122, 11, 94, 124, 15, 43, 49, 67, 45, 30, 75, 111, 53, 9, 50, 102, 30, 28, 52, 95, 26, - 33, 107, 108, 94, 62, 111, 97, 53, 47, 43, 118, 1, 20, 34, 1, 30, 51, 114, 1, 24, 82, 16, 122, - 49, 20, 119, 94, 28, 13, 17, 31, 100, 45, 1, 93, 3, 101, 105, 38, 68, 73, 124, 46, 34, 84, 59, - 59, 93, 98, 6, 22, 17, 126, 42, 18, 85, 104, 30, 56, 73, 33, 93, 14, 112, 36, 4, 35, 26, 85, - 64, 50, 36, 64, 74, 97, 107, 61, 69, 66, 11, 102, 41, 103, 116, 120, 119, 38, 60, 67, 55, 122, 74, - 57, 118, 14, 100, 18, 14, 1, 54, 33, 118, 17, 117, 50, 104, 111, 100, 64, 20, 70, 114, 83, 82, 23, - 11, 69, 121, 100, 3, 73, 44, 47, 56, 118, 59, 85, 56, 116, 62, 31, 3, 116, 82, 119, 121, 36, 12, - 55, 30, 39, 101, 48, 21, 19, 47, 70, 118, 27, 61, 125, 64, 57, 64, 77, 120, 127, 77, 85, 119, 102, - 8, 90, 34, 30, 118, 106, 110, 92, 49, 117, 78, 71, 57, 76, 76, 76, 119, 107, 104, 16, 35, 72, 118, - 59, 51, 30, 7, 100, 14, 7, 49, 11, 53, 19, 4, 61, 74, 125, 99, 77, 24, 71, 113, 124, 11, 61, - 50, 101, 26, 17, 43, 107, 113, 19, 75, 4, 68, 66, 117, 28, 105, 79, 107, 26, 9, 91, 108, 51, 12, - 25, 101, 118, 109, 100, 45, 63, 100, 50, 57, 38, 68, 13, 111, 97, 72, 91, 94, 19, 14, 5, 103, 28, - 106, 47, 121, 20, 87, 7, 48, 91, 98, 124, 70, 15, 43, 55, 62, 83, 101, 124, 38, 67, 113, 13, 30, - 39, 116, 25, 15, 125, 98, 91, 41, 61, 57, 86, 98, 83, 7, 35, 23, 26, 115, 44, 88, 84, 19, 44, - 29, 92, 31, 23, 27, 27, 19, 108, 87, 64, 64, 49, 4, 80, 1, 99, 59, 80, 61, 1, 63, 9, 28, - 92, 96, 51, 93, 64, 13, 94, 102, 33, 40, 38, 25, 40, 20, 3, 56, 108, 53, 5, 74, 64, 70, 85, - 78, 26, 54, 82, 65, 47, 3, 51, 57, 98, 110, 79, 18, 87, 8, 119, 13, 102, 68, 85, 51, 41, 40, - 72, 17, 3, 65, 57, 46, 15, 73, 41, 31, 49, 26, 94, 21, 117, 115, 97, 37, 31, 61, 91, 45, 91, - 17, 75, 95, 126, 37, 72, 19, 1, 46, 89, 39, 49, 101, 110, 51, 18, 66, 108, 118, 26, 94, 50, 45, - 38, 109, 39, 77, 42, 101, 32, 56, 95, 81, 112, 119, 85, 101, 45, 70, 48, 106, 36, 110, 22, 99, 95, - 62, 20, 23, 44, 1, 38, 18, 42, 68, 31, 77, 119, 56, 99, 118, 109, 44, 30, 98, 111, 88, 30, 30, - 8, 73, 120, 96, 77, 12, 66, 119, 62, 95, 82, 35, 67, 76, 3, 124, 44, 61, 17, 109, 9, 9, 114, - 15, 5, 8, 83, 97, 86, 82, 44, 104, 120, 6, 21, 41, 87, 23, 33, 17, 109, 11, 20, 107, 21, 10, - 110, 20, 6, 14, 74, 14, 125, 104, 109, 125, 21, 22, 20, 80, 16, 115, 76, 75, 27, 111, 57, 79, 36, - 53, 50, 121, 118, 65, 30, 123, 121, 107, 36, 80, 54, 67, 54, 55, 122, 51, 110, 79, 74, 106, 13, 65, - 1, 86, 45, 4, 126, 35, 97, 33, 86, 92, 112, 5, 109, 99, 114, 116, 107, 116, 78, 70, 82, 29, 91, - 49, 123, 115, 44, 84, 114, 123, 43, 72, 120, 21, 81, 46, 3, 106, 62, 41, 74, 24, 38, 94, 121, 56, - 67, 122, 126, 75, 50, 39, 110, 120, 39, 82, 51, 10, 126, 67, 88, 23, 76, 65, 87, 73, 115, 19, 102, - 62, 111, 25, 8, 40, 102, 11, 123, 25, 87, 42, 87, 12, 29, 19, 35, 30, 14, 41, 0, 17, 22, 37, - 2, 20, 13, 106, 88, 31, 33, 18, 112, 32, 89, 0, 69, 90, 112, 69, 35, 8, 59, 47, 76, 108, 30, - 17, 101, 54, 117, 85, 51, 107, 63, 67, 123, 91, 102, 48, 79, 108, 51, 85, 42, 92, 113, 104, 48, 9, - 54, 102, 9, 118, 98, 40, 17, 35, 79, 37, 4, 2, 45, 21, 99, 86, 48, 105, 83, 2, 115, 88, 81, - 32, 28, 104, 94, 63, 11, 3, 102, 76, 77, 95, 23, 115, 36, 93, 55, 116, 21, 7, 21, 12, 6, 103, - 39, 87, 94, 118, 119, 29, 48, 6, 112, 48, 112, 10, 42, 103, 125, 110, 54, 49, 16, 2, 63, 107, 41, - 113, 95, 121, 58, 26, 15, 58, 8, 78, 73, 99, 4, 3, 21, 103, 67, 103, 110, 101, 99, 77, 83, 107, - 17, 14, 72, 121, 32, 100, 105, 34, 88, 99, 77, 114, 81, 87, 71, 10, 58, 114, 41, 82, 64, 79, 97, - 99, 89, 36, 22, 36, 86, 51, 100, 57, 70, 2, 104, 20, 58, 15, 42, 20, 71, 108, 95, 17, 82, 45, - 91, 68, 8, 15, 6, 36, 58, 50, 86, 62, 70, 121, 14, 26, 91, 60, 56, 27, 21, 19, 32, 68, 125, - 76, 28, 110, 87, 110, 73, 92, 114, 100, 64, 100, 59, 85, 54, 39, 78, 115, 97, 91, 50, 83, 88, 0, - 117, 67, 117, 126, 78, 80, 90, 78, 21, 18, 48, 90, 102, 91, 88, 113, 124, 103, 25, 53, 38, 105, 38, - 2, 101, 110, 98, 23, 70, 33, 114, 36, 78, 75, 118, 37, 101, 43, 22, 82, 28, 68, 126, 18, 111, 96, - 76, 2, 92, 90, 71, 6, 12, 70, 25, 72, 32, 39, 115, 42, 21, 91, 94, 35, 9, 45, 65, 16, 119, - 37, 55, 15, 30, 110, 43, 3, 46, 53, 77, 44, 81, 34, 38, 30, 46, 96, 113, 125, 9, 17, 120, 2, - 50, 50, 19, 73, 59, 22, 121, 107, 62, 69, 44, 97, 95, 35, 40, 59, 24, 44, 54, 117, 4, 0, 68, - 31, 77, 18, 14, 56, 54, 110, 109, 34, 76, 21, 76, 3, 4, 56, 21, 65, 15, 122, 48, 3, 56, 97, - 68, 50, 114, 101, 87, 87, 75, 25, 64, 51, 40, 93, 36, 120, 62, 77, 7, 111, 109, 73, 5, 3, 47, - 48, 95, 105, 52, 91, 54, 103, 71, 49, 6, 4, 6, 108, 7, 110, 62, 95, 70, 73, 45, 107, 23, 44, - 89, 65, 60, 27, 90, 55, 18, 111, 89, 46, 48, 113, 34, 81, 90, 104, 22, 107, 44, 38, 45, 102, 123, - 75, 78, 11, 50, 89, 56, 13, 92, 97, 41, 73, 58, 95, 120, 36, 102, 59, 124, 5, 114, 109, 87, 55, - 6, 55, 16, 76, 53, 58, 49, 7, 70, 57, 59, 10, 126, 125, 10, 113, 127, 118, 69, 21, 68, 59, 125, - 2, 40, 74, 16, 85, 116, 4, 33, 5, 29, 55, 63, 115, 114, 84, 95, 111, 43, 91, 73, 90, 39, 108, - 44, 36, 72, 104, 126, 112, 109, 30, 95, 33, 73, 83, 1, 116, 99, 26, 54, 3, 83, 82, 119, 79, 108, - 11, 118, 90, 42, 110, 9, 15, 110, 93, 6, 105, 103, 27, 70, 23, 97, 53, 8, 40, 42, 79, 38, 86, - 14, 79, 64, 121, 5, 106, 70, 3, 112, 75, 17, 58, 3, 79, 100, 114, 51, 88, 21, 79, 58, 99, 106, - 113, 110, 92, 109, 21, 94, 83, 3, 61, 117, 94, 32, 126, 66, 46, 12, 48, 53, 81, 29, 120, 84, 105, - 101, 49, 71, 20, 19, 25, 49, 126, 21, 86, 111, 69, 51, 45, 53, 40, 11, 91, 20, 77, 32, 5, 90, - 23, 19, 74, 121, 113, 118, 33, 19, 112, 17, 34, 30, 108, 77, 59, 39, 91, 90, 18, 83, 63, 105, 43, - 30, 54, 3, 106, 52, 41, 61, 49, 112, 5, 98, 40, 24, 14, 117, 20, 85, 66, 32, 42, 59, 66, 2, - 98, 16, 76, 27, 85, 58, 17, 42, 69, 109, 97, 2, 18, 112, 86, 127, 114, 45, 69, 45, 46, 45, 28, - 97, 42, 24, 39, 126, 42, 74, 47, 101, 58, 106, 42, 58, 123, 7, 111, 102, 36, 87, 126, 28, 115, 68, - 38, 125, 49, 7, 87, 114, 125, 27, 60, 57, 124, 89, 21, 109, 74, 64, 88, 11, 28, 4, 58, 29, 13, - 119, 1, 15, 26, 40, 99, 7, 68, 17, 105, 103, 75, 29, 48, 40, 1, 116, 0, 76, 65, 37, 52, 102, - 69, 12, 71, 19, 108, 57, 103, 45, 84, 46, 53, 39, 82, 3, 113, 75, 18, 116, 13, 40, 93, 78, 5, - 94, 112, 90, 40, 126, 79, 91, 89, 29, 58, 83, 48, 66, 101, 4, 32, 68, 96, 98, 36, 45, 111, 29, - 60, 95, 123, 38, 111, 123, 38, 35, 98, 12, 57, 126, 43, 19, 21, 108, 77, 71, 40, 109, 112, 122, 83, - 77, 70, 76, 5, 14, 115, 100, 88, 1, 2, 75, 12, 15, 74, 8, 91, 108, 96, 27, 114, 49, 19, 71, - 126, 33, 81, 93, 93, 11, 9, 87, 76, 32, 28, 102, 16, 41, 99, 75, 87, 11, 120, 126, 89, 62, 91, - 123, 89, 44, 44, 22, 2, 127, 101, 122, 90, 27, 74, 45, 107, 119, 103, 123, 68, 12, 7, 79, 104, 102, - 88, 78, 84, 119, 2, 41, 57, 31, 40, 109, 34, 64, 51, 110, 87, 125, 59, 32, 66, 95, 8, 114, 65, - 11, 53, 113, 59, 24, 57, 14, 60, 28, 50, 107, 50, 28, 106, 8, 127, 95, 61, 116, 32, 114, 22, 90, - 72, 106, 6, 49, 83, 97, 84, 3, 70, 75, 124, 88, 112, 23, 77, 2, 114, 84, 64, 103, 118, 85, 4, - 109, 40, 15, 30, 31, 6, 117, 95, 99, 107, 41, 23, 124, 76, 86, 127, 89, 86, 87, 76, 106, 73, 63, - 31, 84, 34, 102, 51, 48, 99, 58, 38, 124, 20, 20, 98, 8, 53, 1, 106, 126, 48, 103, 117, 26, 43, - 106, 115, 35, 73, 50, 48, 78, 3, 108, 66, 119, 39, 109, 53, 58, 6, 87, 103, 54, 98, 83, 56, 76, - 37, 9, 99, 8, 69, 37, 46, 19, 87, 13, 97, 42, 29, 56, 110, 28, 41, 20, 34, 119, 107, 56, 53, - 124, 59, 120, 13, 85, 1, 121, 22, 38, 96, 47, 117, 44, 51, 87, 102, 110, 119, 116, 83, 52, 47, 17, - 113, 3, 83, 95, 15, 72, 119, 127, 28, 41, 20, 36, 23, 34, 90, 40, 13, 124, 80, 0, 51, 122, 20, - 66, 14, 122, 83, 35, 115, 115, 31, 77, 42, 82, 104, 50, 91, 90, 106, 57, 5, 53, 42, 41, 35, 58, - 94, 43, 113, 88, 42, 9, 119, 125, 114, 89, 90, 83, 28, 90, 30, 87, 111, 35, 42, 6, 63, 49, 96, - 33, 61, 13, 54, 110, 113, 12, 54, 93, 117, 122, 105, 89, 34, 120, 117, 6, 97, 111, 72, 96, 71, 1, - 92, 24, 5, 50, 29, 100, 96, 61, 72, 35, 118, 93, 93, 72, 21, 95, 5, 104, 104, 90, 110, 24, 51, - 120, 10, 64, 34, 122, 31, 34, 90, 8, 61, 11, 119, 61, 111, 125, 24, 23, 72, 85, 100, 72, 54, 113, - 18, 6, 56, 9, 27, 26, 97, 127, 110, 49, 106, 76, 11, 83, 98, 123, 92, 14, 68, 121, 26, 3, 120, - 17, 24, 73, 8, 14, 39, 27, 95, 71, 67, 4, 58, 58, 5, 111, 92, 127, 6, 10, 94, 75, 69, 78, - 70, 107, 11, 117, 98, 99, 95, 95, 50, 3, 91, 71, 27, 35, 117, 56, 18, 92, 51, 66, 28, 96, 103, - 109, 111, 10, 95, 109, 110, 127, 27, 46, 67, 43, 79, 82, 31, 19, 8, 45, 9, 50, 30, 79, 97, 78, - 69, 119, 2, 46, 18, 50, 31, 85, 126, 78, 7, 67, 42, 22, 45, 25, 3, 103, 59, 36, 91, 41, 6, - 60, 42, 79, 95, 123, 4, 27, 58, 120, 6, 28, 81, 79, 112, 106, 96, 52, 18, 68, 69, 38, 74, 27, - 22, 50, 74, 103, 34, 120, 93, 122}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/bias.h new file mode 100644 index 00000000..c644a638 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int64_t int16xint8_dilation_1_bias[2] = {275113, 1548748}; + +const int64_t *const int16xint8_dilation_1_biases = int16xint8_dilation_1_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/biases_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/biases_data.h deleted file mode 100644 index 20cdb518..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/biases_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int64_t int16xint8_dilation_1_biases[2] = {3960566, 4120830}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/config_data.h index c98e91c9..aad564c6 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/config_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/config_data.h @@ -1,24 +1,25 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. #pragma once -#define INT16XINT8_DILATION_1_OUT_CH 2 #define INT16XINT8_DILATION_1_IN_CH 2 +#define INT16XINT8_DILATION_1_OUT_CH 2 #define INT16XINT8_DILATION_1_INPUT_W 32 #define INT16XINT8_DILATION_1_INPUT_H 32 -#define INT16XINT8_DILATION_1_DST_SIZE 1800 -#define INT16XINT8_DILATION_1_INPUT_SIZE 2048 -#define INT16XINT8_DILATION_1_OUT_ACTIVATION_MIN -32768 -#define INT16XINT8_DILATION_1_OUT_ACTIVATION_MAX 32767 -#define INT16XINT8_DILATION_1_INPUT_BATCHES 1 #define INT16XINT8_DILATION_1_FILTER_X 2 #define INT16XINT8_DILATION_1_FILTER_Y 2 +#define INT16XINT8_DILATION_1_PADDING VALID +#define INT16XINT8_DILATION_1_DILATION_X 2 +#define INT16XINT8_DILATION_1_DILATION_Y 2 #define INT16XINT8_DILATION_1_STRIDE_X 1 #define INT16XINT8_DILATION_1_STRIDE_Y 1 +#define INT16XINT8_DILATION_1_BATCH_SIZE 1 +#define INT16XINT8_DILATION_1_OUT_ACTIVATION_MIN -32768 +#define INT16XINT8_DILATION_1_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8_DILATION_1_INPUT_BATCHES 1 #define INT16XINT8_DILATION_1_PAD_X 0 #define INT16XINT8_DILATION_1_PAD_Y 0 -#define INT16XINT8_DILATION_1_OUTPUT_W 30 #define INT16XINT8_DILATION_1_OUTPUT_H 30 +#define INT16XINT8_DILATION_1_OUTPUT_W 30 +#define INT16XINT8_DILATION_1_DST_SIZE 1800 #define INT16XINT8_DILATION_1_INPUT_OFFSET 0 #define INT16XINT8_DILATION_1_OUTPUT_OFFSET 0 -#define INT16XINT8_DILATION_1_DILATION_X 2 -#define INT16XINT8_DILATION_1_DILATION_Y 2 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/input.h new file mode 100644 index 00000000..64f61cc4 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/input.h @@ -0,0 +1,153 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_dilation_1_input[2048] = { + 29740, -8033, -20841, -5873, -16174, 1231, -1417, 25035, -8139, -31530, -2459, 6297, -18584, -15406, + 9044, 23121, 7185, -21375, 14794, -23489, -32027, -18660, -28187, -12618, -12572, 32012, -826, -10450, + -15149, -22083, 21931, -22630, 31157, -18686, -14950, 7329, -16377, 28641, 13284, -18034, 11920, -16219, + -19236, -19674, -19378, 109, 26643, -27869, -27193, 12408, 17992, 11645, -27354, -22743, -19946, -15794, + 555, -2543, 2452, 24352, 8651, 22166, -26938, 5968, -14934, -28364, -14032, 13707, 5448, -16890, + 17055, 23060, -3435, 9701, 23111, 11340, -16521, 219, 14386, -28317, 27185, -25863, 26689, -29823, + 1044, 32207, 11927, -31789, -15170, 8258, 2165, 28121, -20943, -32260, -14877, 7677, -8756, 15513, + 11772, -1020, -30180, -349, 22248, 1753, -8272, -22264, -14282, -6088, -3886, -1314, -4665, 3004, + 13275, 16736, -5302, 28100, -4483, -1374, 26752, 15772, -10633, 3262, -19022, 31983, -22091, 1235, + 22195, 27163, -16772, -16635, 10286, -28331, -21018, 19755, 18137, 4516, -23281, -22680, 19655, -10951, + 13722, 11110, 3494, -26213, 1170, -14107, -1090, -6131, 24419, 32259, -29107, -28883, -11612, 23021, + 26640, 25621, -28642, 9469, -4106, 30701, -15646, -29802, -22209, -5953, -27972, 32303, 6313, 9090, + -14998, 24887, -10133, -30701, 10136, -29871, -19342, 20634, -18130, 20317, 32509, -24635, -32521, -16110, + 10479, 12249, 12704, 16027, -25060, -3258, 5278, -14301, 25964, -4062, -19872, -5446, 24711, 8646, + 13432, -5594, 1116, 15646, -16117, 1614, 23914, -32751, 17069, 29114, 6034, -11204, 19362, -3414, + 10276, -17426, -28306, -25306, 4821, 1839, -17242, 2915, -14503, -5227, -30555, 29707, -32254, -17082, + -28794, -31024, 22960, -7859, -1502, 3279, -24951, 16373, 32275, 25111, -31040, 17497, 28256, 20779, + -23134, 31171, -31191, -12976, -8046, -19547, -8677, -16981, -7402, -18976, -2634, -2478, 13819, 27973, + 5789, 19779, 3904, -32536, -23241, -18813, 31549, -28855, 2965, -19624, 18770, 19010, 22286, -4327, + -8272, -2919, -4475, 21398, 18789, -14632, -3149, -3427, 5700, 8620, -27110, -15467, 32385, -31049, + -7018, -27078, 11332, -11949, -9808, 17314, -24458, -709, -23243, -15495, 13005, 30665, -9764, -14268, + 3054, -28243, 6750, 2921, 5306, -26449, -1320, -15765, 27257, 559, -20818, -19585, 22003, -31752, + -28357, -12552, -19320, -20596, 7535, 14155, 32492, -13140, -10626, 22453, -21539, -16297, -24167, -23341, + 19440, -5672, 739, 15732, 14870, 30263, 8394, -21995, 18407, -13319, -19648, -29943, 26869, -29801, + -23533, 12519, -8891, -9403, 11145, -8859, 5485, -32638, -7381, 18938, -2491, -13635, 13788, 25698, + 1822, 12223, -25092, -10500, -10414, 25454, -16516, 11716, -22455, 17717, 22465, -9279, -15395, 30367, + -21418, -29248, 11043, -28109, -28140, -10710, 27199, -14195, 6697, 22750, 21875, -17370, 7909, -17982, + -17001, 22768, 12714, -21436, -22248, 5609, 27890, -7738, 5891, 22432, 6995, 26161, -13287, -22076, + 4146, -31034, -29526, 18407, -17046, 10198, -19545, -12962, 16893, 31291, 4977, -29, 403, 1998, + -24011, 27134, -6324, -9689, -4673, -18543, -13088, -15206, 12607, -10384, 6222, -28555, -30757, -4294, + -12513, 5227, -2366, -32193, 31684, 20432, 5660, 3920, 32537, -26452, 16895, 828, 19530, 27990, + 11326, -18068, -10839, 14011, 20250, -4954, 26440, -11856, -3164, -15287, -7201, 3659, 21238, 24498, + -20687, -21914, 11980, 12145, 25213, 24111, -14585, 17127, 23784, 14874, 16648, -11820, -14595, 19263, + -16930, 1375, -8009, -5272, -16082, -29785, -19460, -10051, -20252, 16165, 5587, 7627, 14988, -3232, + 17765, 9145, 22560, 2985, 4579, 24469, -9599, 14489, 19471, 12349, -3452, 19703, -3244, -20357, + 16180, -22774, 12313, -10841, -4400, 27085, -31824, 26859, 26309, -18930, 13722, 20151, -6364, -17689, + 29018, 2773, 17682, -6338, -12346, 20526, 3485, 21226, -333, 15237, 16938, 5428, 19611, 30847, + -9415, 10530, 20296, 10475, 11089, 8962, -28510, -17686, -21706, 17195, -17329, -5221, -17264, -3150, + 8407, -4670, -11305, -13906, 30316, -24611, -29645, 7655, -31972, 9110, -11504, 9152, -29405, 14439, + 6827, 12731, 3458, 14316, -10123, 14216, 23759, 18689, -10763, 1503, -11127, 18747, -348, 11918, + 27427, -11031, -25159, -25004, -21268, 3298, -21553, -22811, -13400, -1008, 18251, -5738, 22987, 11721, + -2157, -5930, -25932, -8752, -16503, -1735, 22181, 14870, -7269, -20223, 21171, 8997, 9289, -8729, + 26067, 18797, -3722, -7779, -20093, 30380, 27663, 4075, -18692, 21948, 8783, 21345, 3828, -4536, + 16077, 8882, -13237, 19961, 7159, 7649, -32629, 31241, -13524, 808, 10431, 8704, -10570, 630, + 877, -20163, -12977, 17820, 29018, 9902, 8564, -10899, 8515, 20322, 18328, -8168, -12182, 13667, + 5090, 28841, -29025, -14744, 13167, -17878, -30991, 30988, -15947, 1500, -31195, 25818, 12031, 13078, + 27455, 18432, 32279, -7132, 15746, -6698, 8598, 25235, -30001, -18571, 5018, 27562, -8555, -29301, + -22884, -15143, -18665, -20859, 31985, 23980, -26914, 11425, 6384, 21562, -19812, 28831, -12457, -9055, + -27955, -23239, -8209, 31098, 27159, 12845, 30835, 25780, -16927, -17744, -7676, 4910, -1770, -22772, + -28361, 148, 15453, 20240, 14888, 6887, -23540, -18408, -10567, -25831, -9881, 13345, 4087, -11512, + -23881, -26438, 12302, 18258, 22601, 24215, 31620, -21901, -19498, -30442, -28049, 23979, 15224, -9698, + 26882, 21192, 21626, -24777, -18963, 24723, 17812, 7016, 3163, -3027, -19965, -27930, 30216, -25529, + -699, -6706, -7035, -1356, 7302, -15640, 23660, -24611, 20704, -32268, 23374, 5584, 25568, -7783, + -27026, -27312, -19488, -18531, -20653, -32189, -26325, -18847, -14656, 20421, 22158, 23755, -31416, -8362, + 17711, 30437, 8079, 27090, 5863, 2735, 24203, -6306, 18751, -13930, 21872, 25690, 2852, 5902, + 28201, -18039, -1735, -11305, -28007, 5009, 22735, -17406, -28015, -1820, -9258, 17996, -2526, -802, + 16942, -330, 25962, -24824, 16268, -31702, -5778, -2860, -10125, 8567, 11537, -14286, 6941, 509, + 2643, 17507, 30417, -19133, 3058, -23704, 28566, -22682, 24457, -22066, -6659, -5588, -32615, 28613, + 30771, 25885, -8840, -24837, -9190, -11672, -27581, -6181, 29592, -5682, -12361, -32548, -29853, 26185, + 21248, 28677, 15198, -24135, -29785, -2569, -10499, 32225, -22382, -18119, -27393, -6832, 27229, 23438, + -22871, 12984, -8113, 20050, 8739, -1937, 29765, -18924, 11667, 9278, 2601, -5567, 29688, -6634, + 11702, 1137, 21085, 5700, -4744, -22037, -20443, 13845, -11285, 27432, -2477, -16155, -26836, -5672, + 28342, -11137, 23601, 23148, 5455, -26109, -20759, 30271, 27429, 24788, 24702, 22308, -13837, 258, + 9329, -4368, -31966, 17882, 32420, -18066, -20348, -20935, 10613, 12710, 700, -13697, -7593, -28404, + -6300, -16771, 15252, -23130, 23433, 8586, -9314, 6503, 1519, 25815, -8635, 10286, 7224, 4798, + 5052, -11600, 9119, 28094, -31893, -623, -11676, -26989, 32330, -25388, 5194, -3139, -462, 27036, + 27825, -5150, -17806, -2865, 16102, -5988, 8862, -10477, -31867, -23420, -12472, 21460, 5407, 32037, + -31564, 5166, -15293, 9897, -12739, 2683, 3182, -22769, 23925, -19440, 12480, -31465, -30460, 10106, + -7500, 11577, 20824, 32630, 10740, 13563, 588, -32671, -6668, -6632, -26844, 31151, 16701, -18574, + 24922, 32685, 20761, 8849, -16802, -11846, 3674, 1156, -15077, 10636, 20472, 8755, -19312, -27781, + -24472, -13747, -18749, 19636, -9067, 24398, -11752, 30555, 22161, 21603, 16271, 19695, -11576, 6614, + 23496, 30201, -11645, 9522, 26805, -9678, 9126, 17221, -13085, 1008, 842, -11744, 3403, -29402, + 5335, -100, -11351, -3546, -13529, 23159, -30319, 29909, -9806, 3465, -19681, -26759, -22965, 14034, + -17186, 12773, -1347, 623, -1848, -6501, -10909, -18169, -245, 25241, 4103, 19765, 16083, -16788, + -31786, -17232, 9650, 5733, 29753, 18113, 31681, -24384, -16349, 9087, -16828, -6429, 17277, -16549, + -11011, 21384, -4586, 6960, -8431, -2326, -28115, 23348, -14081, -2255, -14843, 18610, -891, 4844, + 23586, -28269, -7974, 14702, -26035, -1702, 19158, -15342, -31647, 23083, -15997, 983, -23279, -18034, + 28990, 17598, 30930, 15893, -29467, -12467, 27125, -17904, -25047, 23014, 10910, 25381, -25073, -14557, + -22679, -22175, 13116, 28116, -10250, -15206, -20963, -11483, -364, -22012, -29885, 19903, -12571, -15944, + 31364, 19101, 720, 9319, -25089, -27044, 13740, 6165, -6128, 213, 22218, 30926, -29278, -16412, + -26012, 3704, 29817, -16824, 31062, 24756, 3072, 10737, 19600, 4937, -28250, -9345, -5528, 23978, + -27340, -8108, -26052, -13975, -16532, -23381, -9584, -6123, 25716, -8587, 3159, -24911, -24196, -15967, + -5167, -30165, -32059, 19238, -15007, -22107, 20202, -13484, -20728, -27624, 3338, -11050, -1166, -12196, + -14445, 26072, 31891, -27913, -28577, -22411, -29496, -24058, -30519, -22422, 5695, -25359, 2813, -30176, + -11526, 28794, 19846, 29615, 8417, -20609, 19335, 10272, 8250, 14901, 26411, 5579, 6946, 116, + -3730, -13502, -16685, 32142, 31802, 24911, 26124, 28607, -13479, 11414, -7990, -5255, -13744, 2292, + 15440, -16201, 7220, 5869, -25451, -26671, 6080, 18850, 2850, 21486, -14874, 25280, 12982, -20184, + -28549, -23849, -14936, -13479, -31854, -21868, 24400, 12380, -5174, 16838, -19583, -26896, -30099, 25358, + 20631, 3584, 29307, -20118, 25086, 12083, -24184, 15848, -20207, -16244, -2088, -18695, -27354, 26969, + -23586, -25842, 28387, -4428, 90, -368, 21459, -3137, -12546, 14480, 6286, -23932, -21506, -28537, + -26142, 32410, -20571, 15431, -30960, 24222, 8892, 20089, 17312, -26879, 5744, 18238, -19708, 6545, + -2312, 32394, 26203, 3949, -16197, -21929, 746, -25012, -26309, 5214, 13623, 18530, -1814, 4449, + -9855, -23112, -7226, -8808, -23769, 13907, 17020, 31946, -2282, -28813, -8962, 17944, -20996, 10272, + -21676, 4550, -19871, 19416, -32364, 23493, 4979, -26668, -22357, -13246, 27146, 31769, 31565, 15331, + 28700, -14104, -11325, -9455, -27036, -7823, -20051, 19579, -24826, -12378, -12360, -9287, 18390, -14931, + -31890, 18144, 27778, 31401, -4051, 22975, 1005, -18570, 28976, -3067, -6902, 12823, -4966, -17603, + -28857, 25936, 26718, 15089, -9160, -16622, 4569, -21143, -15167, -32245, 11502, 13568, 6969, 25473, + -3709, 314, -9138, 1009, -27267, -1533, -32594, 13978, 12582, -3034, 10720, 16807, -20716, -29740, + -21745, 15942, 10089, 30400, 13235, 24608, 15141, 31324, -28705, 19308, -27144, 4005, -20894, -23563, + 21990, 5704, 1460, -3919, -10745, 19249, 13724, -906, 2117, 26146, -10023, 5813, 16044, -5266, + 11370, 15868, -30862, -18722, -30420, 14514, -26498, -9058, -9437, 7025, 255, 30062, 3094, 13333, + -6416, -1599, 1480, -11180, -26367, -16874, 8635, 6027, -28612, -21043, 687, 421, 32640, -29117, + -10856, -9353, -14639, 28617, -32050, -11264, 12601, -16896, 18845, 22404, -9150, 1360, 14449, -938, + 17366, -25989, -32616, -7402, 28920, -11710, 16986, -27398, 14103, 28235, -26900, -246, -18110, -24534, + -16803, -15286, 26140, 1239, 1575, -22972, -10489, -16780, 8047, 5464, -29461, 22961, -1849, 18640, + 14846, -23944, 26031, -9879, -19226, -25349, -2593, -7839, -27612, -8314, -32298, -7875, 5236, -19738, + -28293, 14058, 14300, -9955, 19956, 27588, 19487, -8360, 15696, -4864, -2266, -2496, -9187, 26682, + -11186, -21693, 27235, -5254, 24666, 8918, -569, -6682, -25553, -14868, 10408, -11849, -9164, -26897, + -28531, -17741, 31140, 24514, -6501, 32010, 3761, -16922, -20433, -29541, -2239, 31756, 8098, -20372, + -7206, -4025, 7127, 6333, -30134, -32448, -16396, 28070, -27203, 1409, 9348, -16602, -23830, -1728, + 15800, -5025, 4144, -10923, 14547, -23722, -27585, -6155, -7960, -26165, 19530, 7729, -20709, 5366, + -1455, 6632, 6792, -7930, 22245, -25651, 2168, -5095, -6049, -17033, 30504, -14670, -12711, 6616, + 11895, 10214, 30650, 6770, -9563, 18060, -1265, 752, 31681, -11296, -16709, 27168, 16945, 7873, + 17037, 7310, -7841, 30057, 16706, 5912, 4611, -24618, -12775, 2391, -1220, 18430, -5899, 10883, + 14364, 5601, -23374, -32098, 9474, 1660, -23894, 3609, -29027, -8157, -7730, -29543, 10982, -6660, + 31197, -6467, -28691, 4573, 28530, 22825, -15394, -16899, -13952, 31976, -11118, -20189, -25606, -28258, + -2382, 19723, 9535, -8796, 15479, 9936, 23077, -25815, 4209, -17133, -19716, -26298, 20031, 7311, + 29560, 26050, 4149, 8154, 3020, -21372, -6557, -28058, -8138, -17257, 358, 4482, 13794, 16580, + 27661, -21120, 5923, -23905, 2992, 22415, 25900, -16620, -8075, 20654, 26167, -17372, -22401, -13775, + 14451, 5931, 19980, -19039, -20331, 28521, -28780, -4882, -2226, -27933, -18098, -20175, 2416, 839, + 20785, -32261, -17655, -15280, 23579, 462, -30460, 19800, 9100, -2854, 31776, -27023, -24221, 16541, + 22937, 29466, 14147, -26469, 6210, 22962, 11794, -30714, -8555, -4238, -2511, -8145, 12337, 5220, + -13900, -25501, 11449, -8581, 29502, -7106, 4962, 5625, 18845, 21908, -9529, -14846, -7372, -14502, + 21575, 29086, 22012, 21128, -29458, -19490, 31515, -29220, -1073, 11359, 21331, 5619, 9793, 24477, + -14133, -9049, -19251, 14547, -2055, 31466, 11613, 19718, 28853, 15811, -6271, -25846, 21938, -24375, + 28974, -31246, -24579, 3533, 22179, -16534, -3480, -13432, -32260, -3638, -28193, -3006, 7177, -27380, + 16019, -4956, 16471, 16255, 28631, 25414, -26946, -6849, 12413, 13149, -12916, 10397, -19583, 3300, + -22609, -29563, 25628, 136, -29017, 6525, -3704, 10738, 17344, 26235, -12091, 7155, 5917, -23136, + 27188, 12159, 18605, 15631, 32469, -4607, -30146, -9523, -28012, 13235, -3985, 22995, -15988, 18517, + 2299, 2195, 19861, -18511, -24663, 25658, 14970, -1690, -22958, 12234, 21688, 4979, 18467, -30129, + 16373, 29636, -20155, -14767, -25048, 16984, 23181, -24065, 1212, 8705, 13933, -8051, 23004, 29475, + -4231, 29746, -26171, 31893, 14578, -6258, -24541, -24473, -25319, 19235, -4523, 26169, -18809, 7431, + -14927, -12701, 17020, 26973, 22828, -13813, 7474, 7030, 13686, -29314, 13417, -10364, 20358, 24407, + 6164, 30830, 23304, -9223, 27750, -23459, 16013, 23066, 2287, 8015, 14407, -2626, -27596, 9358, + -13112, -23638, 19498, -24828, -26690, 18387, -13691, -11703, 27148, 11117, 1910, -6727, -24284, -1360, + -12821, -29680, 28747, -32054, 358, -24120, 2738, 11356, -13742, 28045, 1904, -29705, 27522, -19341, + -9179, -7410, 4142, -31829, 13661, -28253, 1740, 19032, 5151, -5349, -9423, 50, -9828, -24670, + -13038, -26427, 32258, 20841, 22362, 14696, 22102, -15988, -5282, 30641, -25374, 14555, -24868, -32131, + 3742, 9923, 16426, -3909, 7162, 2598, -23339, 9448, -8162, -26594, -5619, -10185, -9475, 13613, + -23325, -29754, 21179, 27056, 18946, -27361, -4451, -8767, 26546, 3233, -15694, -19026, -11782, 24419, + -22474, 14403, 28551, -32347, -4808, 12721, -23585, -18576, -9377, 5106, 18964, -22540, 5359, 2935, + -27775, -16110, -6270, -6506, 19986, -25515, 16965, 10037, 14290, -3860, 28431, 10383, 18195, -17105, + 29372, 15026, 31366, -24638, -4565, -27536, 8650, -23979, -2005, 29318, 23893, 13191, -16526, -12209, + -22332, -6521, 10574, 25481, 29074, -16191, -31077, -23657, -25290, 30867, -15233, -25069, -19597, 18658, + 31181, -17310, 4596, 20620, -25729, 14643, -27880, 28204, 26997, 31071, 30870, -30163, -13888, 13248, + -30372, 5895, -28438, 11092, -23649, 29357, -29601, -17997, 25831, -708, 16692, 22194, 29034, -20339, + -5496, -18366, 13535, 22878}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/input_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/input_data.h deleted file mode 100644 index 3f30318a..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/input_data.h +++ /dev/null @@ -1,114 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int16_t int16xint8_dilation_1_input[2048] = { - -124, 106, -17, 42, 73, -106, 100, 113, 73, -128, 18, 123, 58, 96, -14, 17, 82, -120, 119, - 115, 35, 23, 43, -127, 95, -22, -1, -10, -121, -53, 51, 124, 98, 5, 48, -40, 5, 39, - -87, 94, 68, 82, 63, -27, 108, 26, -18, 67, 40, 69, -101, 79, 42, 30, 17, 54, -99, - 43, 98, 59, 68, -30, 121, -118, 48, 108, 43, -15, 73, -22, 107, -96, -114, 49, 43, -61, - -81, -61, -36, -98, 5, 79, -124, -13, -9, -77, -3, -108, -113, -8, -94, -82, 25, 119, 114, - 30, 66, -126, 113, -66, -6, -111, 6, -44, 83, 93, 60, -36, -125, -127, 88, 53, -28, -121, - 61, 3, 6, -25, 34, 58, 120, 110, 76, 46, 10, 66, -26, -72, -92, 5, -104, -122, 32, - -101, 89, -39, -85, 86, 55, 103, -63, -19, 71, 25, 61, 7, 95, -113, 118, -62, 78, 14, - -84, 75, 5, -23, 119, 20, -83, -33, -105, 20, -64, 59, -16, -79, -65, -34, 41, 66, 37, - -101, 31, 8, 53, -50, 73, 71, -20, 72, -40, -108, -124, -123, -86, 67, -93, 3, -34, 50, - -87, 86, -114, 74, 101, -116, -88, -56, 53, 93, -15, 113, 1, -12, -62, -112, 98, -5, -73, - -62, 27, 39, 72, -77, 14, -33, -109, -112, -85, 30, -85, -38, -44, -1, -92, 59, -87, -5, - -113, 75, 97, -92, 94, 29, -97, 53, 57, 53, -125, -120, -97, -46, 58, 16, -83, -78, -29, - 110, 20, 68, 125, -32, -41, -46, 107, 73, -60, 126, -113, -116, 75, -5, 84, 84, 39, -128, - 118, 104, -11, -6, 55, -84, -55, -74, -46, 97, -48, 68, 71, 91, 51, -115, 119, -13, -103, - 125, 119, -16, -11, 113, -69, 90, 123, 56, -52, -82, 97, -56, -63, -13, 58, 91, -77, 84, - 66, 48, -7, -49, 84, 84, -50, 112, 88, 100, 104, -120, 66, 64, -58, -101, 55, -18, 116, - -89, -34, 74, -91, 116, 73, -88, -4, 126, -113, 67, 55, -71, 121, -116, 6, 73, 83, 112, - -120, -17, 16, 33, -21, -63, 118, -71, -75, -71, 35, 54, -58, 5, -33, 20, 49, 11, 26, - 123, 53, -77, 105, 22, -36, -127, 110, -6, -91, 7, 96, 120, 66, -46, -98, 52, 9, -6, - -114, 30, 98, -60, 111, -61, 40, -88, 103, -42, -8, 38, -40, 48, 19, -77, -35, -48, -29, - 3, -54, 106, 105, -122, -79, -81, 69, -111, 43, -56, -52, -28, -82, -112, -108, 105, 85, -94, - 72, -76, 28, -97, -125, 14, -104, -18, 56, 66, -114, -7, -101, -65, -68, 91, -27, -77, 44, - 92, 18, -72, 91, 120, 93, 113, -114, -23, -103, -19, 76, 90, 58, 55, -28, 20, 107, -4, - 119, 116, -53, -4, -103, -104, 93, -95, 54, -15, 41, -76, -15, -74, -63, -114, -43, -70, -119, - 106, 60, 27, 70, 33, -105, 59, -108, -85, -108, 15, 110, 103, 20, -51, 122, -41, -60, -84, - -127, 56, 27, 37, 81, 94, 125, -120, -72, 79, -110, 39, -37, -115, -38, -19, 117, -53, -98, - -80, 118, 8, -107, 11, 12, 59, 34, -11, -31, 96, 126, 30, -15, 77, -83, 19, 101, -50, - -123, 1, 51, -128, 112, 39, -92, -126, -1, 4, -64, -111, -36, 57, 78, 71, 106, 5, 25, - 111, -103, -49, 84, 31, 118, 73, -77, 50, 97, 105, -29, 91, -42, -93, 119, -69, 28, 56, - -70, -80, -96, 47, 68, -73, -103, 120, -88, 110, -30, 0, -36, 58, -65, 51, -75, -81, -48, - -104, 82, -93, 117, 88, -57, -113, 58, 91, -68, 49, -101, -88, 103, -101, 7, -45, 32, -114, - -69, -39, 118, -114, 116, 125, 118, -100, 15, 121, 3, -122, 6, -76, -122, -120, 122, 114, 79, - -125, -33, -109, 39, -74, 41, -96, 68, -100, 43, 85, -71, -118, 31, -46, -106, -59, 36, -8, - -87, -8, -88, 76, 115, -5, 34, -36, -99, -3, 120, -67, -119, 33, -47, -82, 117, 76, 37, - -56, 49, -37, 15, 6, 15, -112, -37, -115, 119, -42, 50, -103, 39, -106, 115, 80, -14, 102, - 54, -73, -126, -6, -51, -18, 25, -19, 72, 8, 45, 60, 46, -79, 3, -114, 43, 13, -8, - -54, 47, -107, -63, 28, 4, -43, 33, -33, 83, 8, 90, 95, 35, -64, 103, -84, 60, 1, - -29, 12, 46, -54, -74, 16, 58, 97, 110, -127, 44, -90, 112, -126, 120, -16, 76, -124, 11, - -70, 123, 126, 4, -18, -98, -90, 74, 14, 5, -28, 118, 37, 21, 95, 76, 29, -81, 53, - -60, 59, 114, -40, -37, 49, -99, -50, -109, -95, 33, -23, -127, 60, 94, -29, -26, 46, 45, - -73, -97, -35, -19, 60, 103, 54, -111, -13, 108, 7, -37, -19, -70, 126, -123, -40, 77, -6, - 39, 40, -48, 71, -95, 86, -34, -38, -26, -6, -1, 55, 13, -124, 115, 8, -112, 41, -92, - 113, -93, 82, 63, -59, 67, -105, 111, 126, 17, -86, 39, 57, 29, 45, -115, 12, 83, 93, - 89, -21, 9, -72, 25, 96, 18, -102, 68, 101, -110, 87, -29, 41, -23, 32, -115, 31, 17, - 16, 80, 97, 120, 86, -54, 74, 22, 64, 43, 15, -95, 118, -73, -110, 44, -60, 5, 29, - 72, 104, 49, -49, 80, -24, 64, -83, 35, -128, 65, 95, 99, -58, -80, -113, 112, -53, 11, - -42, 77, -19, -6, -52, 119, -71, -108, 125, -36, -70, 86, 30, -61, 47, 49, -127, -124, -71, - -113, -73, 31, -80, -6, -74, -59, -115, -27, -49, 10, -23, -35, -11, 39, -16, -30, 104, 19, - 14, 10, -47, -8, -107, -116, 80, 25, 22, -23, -40, -24, -24, -84, -120, 115, 51, -120, 26, - 42, 49, 105, -75, -32, -30, -77, 42, -92, 44, -113, 120, -13, -9, -3, -19, 116, -91, -115, - 58, -9, -52, 59, -116, 7, -10, 45, 62, 47, 102, -77, -14, -83, 50, 31, -75, -69, -33, - -54, -53, 113, -58, 67, 97, -73, -71, -28, -122, 43, 3, -90, 14, -13, -82, -110, 93, 57, - 39, -128, -28, -68, 113, -2, 114, 91, 62, 32, -89, 99, 92, 55, 122, 5, -107, 2, 43, - -1, 65, -1, 8, -125, 17, -34, -24, 123, -80, -84, 102, -121, 65, 5, -19, -66, -67, 80, - -120, 120, -96, 94, -81, -98, -106, 121, 13, -111, -45, 19, -115, -119, 80, 66, 22, 12, 40, - 32, -120, 105, 80, -96, -62, -11, 103, 34, 119, 80, 115, -95, 121, 79, -123, -42, -73, -100, - -28, 11, -85, -27, 48, -15, -16, -71, 105, -91, -81, -127, 123, -24, 104, -45, -69, -58, 105, - 39, -92, -34, 126, -52, 110, -62, -69, 33, -111, -125, 52, -115, 40, -112, 98, -60, 39, 79, - -25, -104, -59, 57, 41, 66, -71, -65, 113, -99, -33, -104, 100, 107, -56, 125, -95, 110, 8, - 15, 88, -61, -56, -42, 118, -111, 47, -82, -69, 39, 94, 116, 65, 27, 79, -127, -47, -38, - 10, -20, 62, -64, -60, 6, 65, 3, -24, 113, -124, -6, -104, -108, -122, -53, 49, -103, -18, - -67, 112, 45, -84, -47, -10, -94, -84, -96, -75, -72, -128, -121, 15, 117, 53, -4, -67, -114, - -101, 34, -83, 41, -18, 21, 7, -125, -17, 114, -108, -6, 83, -3, 64, 14, 4, 3, -13, - 69, 34, 69, -44, -5, -121, -10, 2, -53, 6, 85, -52, -14, -107, 11, -1, 43, 16, -68, - 86, -62, -19, -66, -42, 16, -25, 17, 74, 124, -3, -10, -105, -96, 47, -51, 29, 30, 75, - -93, -36, -77, 52, -128, -50, -20, 85, -29, 117, 31, -31, 63, 120, 37, -78, -29, -113, -63, - -2, -34, 18, 126, -16, 12, 89, 37, -41, -29, 46, -38, -3, -88, 14, -117, 12, -86, 69, - 124, 27, 112, -34, -103, 37, 67, -114, -122, 58, 46, 51, 19, 79, 53, -76, -14, -123, 20, - 47, -60, 82, -104, 41, 57, 46, -21, -58, 64, 9, -84, 56, -31, 35, 31, -80, -22, 115, - -98, -75, 97, 18, -72, -11, -8, -29, 75, 8, -1, 13, 125, 93, -118, 53, 19, 84, 71, - -19, 24, -69, 37, 49, -105, -13, 55, 20, -33, -124, 68, 34, 5, 35, 14, 22, 94, 7, - 56, 80, 95, 37, -80, 100, 16, -54, -60, 80, 77, 56, 47, -42, 34, 16, 62, 50, 106, - 36, 29, 42, -6, 37, 62, -28, 4, -46, 117, 93, -73, 22, -21, -69, 8, 54, -47, 60, - -110, 43, -83, -92, 20, 112, -20, 115, -122, 108, 122, 19, -27, 109, 51, -25, 46, 60, 7, - 112, 38, 46, 44, -110, -4, 2, -94, -38, 15, 2, -6, -99, -1, 18, -45, 27, 85, 66, - 69, -102, 55, 51, 6, 25, 77, 112, -96, 104, -34, -60, -26, 61, 24, 54, 50, -72, -77, - -90, -118, -31, 14, -23, 41, -77, 5, 37, 50, -41, 28, 126, -128, -29, -118, 76, 14, 123, - 26, -101, 54, 91, 58, 79, 26, 16, -108, 43, -30, -37, 24, -38, -64, -36, 101, 101, 65, - 43, 122, 40, -22, 11, 86, -48, -77, -122, 113, 90, -127, 64, -23, -57, 10, -14, 50, -94, - 108, -29, 25, 14, -65, -71, -31, -52, 43, -120, 11, -49, 17, -30, 51, -5, -99, -108, 123, - 126, 51, 61, 103, -97, 59, 7, 119, 13, 58, -12, 113, -28, 83, -104, -95, -97, -107, -105, - -104, -119, 59, -18, 19, -18, -80, 118, -16, 77, 9, 68, -78, -4, 83, -34, 37, 88, 124, - 120, 48, 102, -45, -67, -29, -119, 99, -64, -111, -12, 93, 31, -128, 70, 96, -9, 81, 58, - -31, 80, 22, 19, -61, 8, 49, -33, -83, -70, -127, 71, -92, 102, 40, -54, 56, -83, -38, - 48, -63, -71, -4, 9, 125, 110, -36, -108, -22, 32, -102, 21, -52, 21, 44, -52, 110, -20, - 27, 93, -55, -101, 108, -14, 22, -84, -111, -32, 98, -112, -18, 108, -49, -88, 72, -99, -96, - 110, 126, -35, -113, 79, 32, -12, -33, 54, 51, 54, 0, 110, 67, 23, 100, -120, 88, 116, - 98, 27, -53, 50, 15, 75, 57, 47, -24, -46, -56, -54, 84, -53, 55, -9, -12, -125, -119, - -18, 112, -8, 3, 49, 80, -63, -89, -33, -74, 114, 47, 109, 9, 70, 10, 43, -85, 37, - -29, -37, -89, 44, 115, 59, 36, -103, 65, 112, -73, 30, -38, 11, -39, -38, 11, -55, 60, - 99, 57, -17, -74, -2, 42, -43, 110, 2, 60, -47, -104, -94, 48, -53, -73, 121, 28, -40, - -83, 50, -96, 13, 74, -71, -65, -110, -32, -128, -18, -24, 106, 112, 13, -67, 80, -83, 17, - -5, -44, 115, -5, -9, -13, 51, 82, -72, -39, -86, 25, 13, -77, -103, 125, -11, 29, -106, - -128, 54, 85, -54, -49, 68, -10, -102, 4, -76, -84, 7, -36, -6, -96, -70, -36, -73, 21, - -14, 119, 52, -116, 61, 36, -68, 125, 105, 60, 118, -46, -23, -122, -41, 74, -108, -35, -9, - -91, 101, -50, -87, 13, 115, -77, -84, -99, -100, 29, 17, -17, 126, 94, -85, -48, -93, 67, - 101, 82, 33, -128, -121, 78, 97, -1, 29, 111, -28, -104, 68, 65, 71, 109, -25, -53, 26, - 65, 50, -114, -70, -91, -97, -93, -29, 11, -1, 114, -121, 112, 91, 117, 72, -121, -49, 38, - -26, 97, 6, -39, -64, -54, 121, 10, -124, 58, -117, -34, 60, 57, 27, 16, -28, -123, 73, - -88, 76, -81, 63, -68, -101, 118, -28, 100, -9, 92, 57, 125, -114, -117, -96, 13, 22, -75, - -115, -46, 36, 15, -64, -75, -20, 80, -14, 89, -112, 93, -75, -33, -32, 109, -48, -108, 101, - 28, -58, 39, 9, -72, -103, 84, 11, -105, 124, 116, 123, 28, -2, 15, 119, -125, 60, -1, - 45, 14, -91, -18, 38, -16, -119, -15, 90, -78, 125, -102, -104, -99, -93, -125, 117, 20, -56, - 122, 13, -92, -104, -41, 121, 112, 26, -32, 71, -88, -119, -32, 49, -24, -89, -9, -96, 93, - -31, 43, -61, 121, 1, 120, -69, 98, 39, -5, -32, 26, -101, -31, 123, -22, 113, 40, -123, - -74, 111, -94, 16, -15, -9, -73, -104, 85, 80, -1, 32, -15, -70, 94, 102, -93, -2, 33, - -25, 60, 101, 12, -4, -118, -101, -124, 20, 37, 72, 88, 32, 81, -101}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output.h new file mode 100644 index 00000000..aa0f7791 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output.h @@ -0,0 +1,137 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_dilation_1_output[1800] = { + 4733, 12597, 6781, -739, -1664, 19271, 23620, 15035, -21144, 4063, 22171, 3102, -17915, -11019, + -1907, 10514, -13283, -103, 15947, 6583, 5737, -13831, -29179, 8393, 14815, 28603, -32768, -26070, + -32193, 198, 7912, 3939, 9047, 6109, -20106, 12981, -11417, 24681, 8563, 4032, 13398, 18695, + -32768, -16854, 19088, 5174, -14627, 4490, 18829, 28611, 13508, 782, -27204, 6127, 5815, -7548, + 11151, 1031, 30671, 32767, -29809, -1265, 4699, -5333, 2544, -8173, 16215, 19496, 2026, 21015, + -5412, -4057, -30031, -11547, -32768, -18884, 20360, -10325, -32768, -19979, 31539, 32767, 1490, -10209, + -7643, 15792, 32767, 32767, 4706, 11738, -7309, 23579, 24305, 32767, -11139, -16485, -21573, 3983, + 4905, 20743, -18334, -21359, -12181, 13356, 11546, -10566, 24352, 26873, 18489, 32767, 14886, 19283, + 9038, 13256, 28365, 24640, 8200, 13283, 29026, 16611, 17671, 19720, -27606, -31813, 13418, 21402, + -7896, -6407, -21977, -25324, -15332, 5900, 2173, 14569, -16601, -18018, 2726, -3976, 10138, 14910, + 32767, 32767, -14864, -31216, 30317, 27359, 32767, 18071, 5846, 18768, 13338, 32767, 20413, 14724, + 6878, 16, 32767, 32767, 8919, 14614, -545, 11873, 2926, -3803, 17243, 1279, -9452, -3677, + 29647, 32767, 4099, -16589, -20933, 4901, 22786, 32767, -4988, 4862, -8757, -20759, -23468, 6052, + 5305, -452, 17606, 13994, -17097, 733, 19024, 2091, -13287, -15210, 2448, 21113, -10674, -17118, + 6015, 27040, 1268, 6217, -8386, -11794, 16448, 10481, 22187, 20479, 4079, 11031, 25708, 21267, + -32768, -18155, -21891, -1682, 17646, 14882, -6710, 10774, 23343, 30973, 27971, 5970, 32767, 32767, + 32767, 32767, 15744, 20164, -24729, 9379, -7761, -13024, -2757, -1517, -8583, -22215, 13480, 4638, + -1577, 24411, -30443, -25289, -3802, -10951, -14279, -8840, 13786, 20957, 14341, 3088, -16955, 12787, + -2863, 22632, -6731, 8181, 9121, 4435, -32768, -10680, -14809, -2213, -21427, 2511, 6775, 1098, + 13277, 13142, 25830, 32388, 12107, -4766, -9738, -6558, 13149, 32767, -23820, 1230, -32084, -12356, + 6034, -1201, -31702, -17970, -12381, -16827, -17266, -6432, -2473, -8445, -10676, -8312, -7306, 6199, + -30745, -25260, 30859, 5363, -8424, 5548, -21391, 984, 2318, -7063, -11838, -2699, 2134, 26423, + -15136, -16000, -31672, -20866, 4005, 6608, -219, 6752, -302, 11327, -29031, -597, 5951, 14843, + -24926, 1127, 9852, 10567, -3827, -6993, 20340, 15906, 25868, 4608, 1652, 3597, 28909, 29816, + -2638, -2780, 32767, 29161, 629, 10999, -11073, 1942, -9299, -14450, -32768, -10320, -14718, 12803, + -14798, -19221, -2348, 9674, 15809, 10954, -29072, -26986, 22950, 13100, -5828, 601, 11425, 10526, + -5738, 7213, 8966, 9646, 12457, -11554, 11763, 10366, 10883, 21080, -11020, 7405, 20388, 32767, + 32767, 27004, 8350, 10404, 7621, 21216, 864, -15065, -28358, 3843, -32333, 4868, 7119, 15810, + -13171, 9122, -22332, -5589, -17068, -3309, -19467, -7697, -20231, -9143, -11787, 6532, -9571, -170, + -77, 5531, 32767, 11369, -13905, 4439, -15073, 13110, -6694, 16688, -4749, 10461, -4263, -15051, + -28704, -1226, 32767, 30728, 6327, 3183, -5221, 12927, 23134, 10475, 12699, 3174, 6832, -652, + -9376, 11562, -4140, 14753, -2396, -18411, -7888, 9585, -7709, 4233, -5707, -559, -13590, -10170, + 7911, 12691, 20821, 9451, 149, 30154, 19665, 22182, 11116, 11811, -15603, 10592, -30236, -10364, + 7418, 8419, 24484, -2404, -7705, 7854, 10918, 9177, -19887, -15087, 4606, 15289, -18659, -7602, + 13261, 22205, 11426, -3449, -2116, 25179, 17214, 11910, 16613, 6940, -2882, -11247, 31706, 14323, + 19281, 12733, 5449, 19304, 26357, 19048, -1327, 5078, -17311, 15128, -32768, -2823, 9111, -9149, + 3856, 14272, 19181, 11532, 32767, 32767, -4758, 9552, -14, 24944, 7432, 20641, 15576, -3311, + 17914, 1301, 32767, 32767, 9454, 9830, -21210, 3274, 3926, 32553, 24511, 4164, -512, -6437, + 2663, 19482, -25104, -6806, 1784, 6540, -8873, 54, 2599, -12392, -7907, -16637, 3434, 20393, + -32768, 4141, 10167, 2915, -8107, -14910, 32767, 15695, -21083, 3925, 32767, 24115, 17918, 13473, + 7845, 25184, 14182, -2305, 22383, 13563, 12853, 19174, 32767, 32249, 13885, 3597, 15864, 9908, + 23486, 1139, 9664, -1412, 29458, 28490, -14945, -2449, -8292, 16096, 490, 21990, -14584, 1561, + 16638, 8661, -4941, 15171, 18432, 13358, 763, 15193, 27970, 10684, -5632, -11703, 8588, 11061, + -8351, -14387, 5404, 16588, 8626, 16284, 6896, -2999, 24141, 32767, -24944, 1414, 30292, 32767, + -2625, -7112, -12788, -24814, 10885, -6573, 28290, 26349, 28836, 25492, 12560, 12626, 25837, 29313, + 23566, 9668, -16788, -25327, 17160, 17100, 20648, 4636, 23504, 5282, -32768, -4524, 27027, 32767, + -3006, -22046, -2545, 3385, 18062, 31088, 11579, 30106, -1308, -21008, -32768, -8403, 12850, 32767, + 2983, -12952, 18963, 29764, 7741, 16466, -32768, -6918, 1184, -6313, -31531, 5276, 32767, 32767, + -21760, -15836, 15415, 2847, 6299, 12812, -32768, -8220, -20503, -24136, 4444, -5374, -14981, -14690, + -32768, -8295, -31879, 1850, -18397, -6855, -32768, -14192, -3697, 27969, 15936, -894, -26216, -22557, + -15208, -3105, -14514, 3909, -10383, -23990, 29835, 15824, 16567, 18697, 5112, 122, 24237, 32767, + -2588, -5461, -11957, 12371, 11803, -1225, -5861, 11883, 15734, -1445, -32768, -24151, 13767, 19120, + 5664, 2889, 759, 11350, -11323, 2113, -22807, -9685, -10710, -922, -5705, 18387, -4219, 637, + -20712, -21621, 48, 7945, 4083, 582, -22435, -16582, -1225, 23565, -20258, -19566, -32768, -24893, + -22499, 7909, 26318, 13549, -11308, -9268, 3888, 32767, 25608, 32767, 3500, 12561, -16592, -6890, + -9972, -12985, 32103, 7952, -32768, -4842, -16290, 13652, 32767, 28506, 32767, 32767, -32768, -1238, + 11757, 1084, 32767, 14308, 956, -1117, -20143, 10054, -6977, 836, 482, 7937, -3676, -7611, + -14925, 4087, -20080, 5104, -17081, 11334, 14158, 21577, -2596, 5123, 1583, -173, 16966, 17630, + -32768, -9068, -6191, -11416, -27037, 1820, 32767, 15018, -13003, -15979, 20258, 26233, 27101, 25190, + 12596, 13365, 22546, 10671, -32768, -9097, 8156, 25019, 2484, 15291, -23507, -5995, -3638, 19448, + -11450, -6843, -10289, -4632, 11778, 15786, 18052, 17642, 24233, 17430, -3689, -143, -998, 22657, + 21459, 12614, 14182, 6601, -26578, -25009, -18120, 1655, -4194, 1317, -19462, -15085, 26461, 32101, + -17387, -3740, -11353, 3562, -475, 23279, 11524, 13426, 2141, 7193, 29773, 25554, 32767, 15722, + 12053, 19810, -15686, 14614, -18900, -13614, -29047, 5483, 5248, 15405, -16632, 4331, 17672, -7694, + 13462, -484, -2888, 30406, -10974, -7025, 1246, 23714, -11183, 3818, 32767, 24502, 14387, 19292, + 1573, 9994, 1791, 2520, -10821, 29160, 12733, 23353, 21461, -13245, 4313, 2664, 30971, 32767, + -2240, 2818, 25574, 21890, 30351, 11189, 13675, 30921, -536, 24606, -1030, -2930, 6838, -4986, + 14867, 5920, -206, 861, -12773, 15716, -1360, 2593, -1612, 10686, 22495, 25965, 30455, 27036, + 28660, 30140, 26376, 12826, 32767, 18908, -4527, 4339, 11252, 18706, 16433, -3131, -142, 7896, + -10083, 5615, 31271, 32767, 12, 5566, -4780, -27154, -16917, 12439, 32767, 32767, 6613, 19990, + -22397, -5991, 780, 1669, 4888, 11259, 11729, 10182, 28861, 14507, 3583, 712, 29462, 20353, + 9940, -5693, -27668, -4789, 2839, 12107, -12931, 7505, -10277, -11705, 32767, 4941, 4487, 10602, + 19959, 30259, -14444, 4108, -7870, -18576, 20063, 19933, -22792, 14236, 10718, 986, 29368, 20310, + 5047, 10327, -23753, 1978, 17439, 32767, -3781, -12344, 14358, 7849, -16465, 7174, -1730, 26896, + -10208, -12585, 19474, 5167, 12294, -3279, -8784, 8120, -1224, 8972, 24097, 17791, 32767, 32767, + -32768, -4421, -5085, -13620, -5211, -4019, 19669, 8741, 32542, 30765, 14087, 3288, 1148, 14203, + 14761, 32767, -18730, 11836, -2824, 21631, -32768, -22583, -14580, -12156, -4585, 2295, -30992, 3466, + 28399, 13687, -21064, -4828, -16116, 10634, -10736, -12891, 21253, 9899, -32768, -12733, 6828, 25886, + 4087, 18055, -10502, -9692, -32299, -14719, -31764, -7846, 1551, 5946, -20834, -8428, 7353, 31223, + 16369, 32767, -21192, -12160, -16612, 14556, 10511, 4054, 11635, -3278, 32767, 332, -20543, -8550, + 19661, 29555, 32767, 32767, 23575, 32767, 12006, 17207, -32768, -16304, -12955, 17023, 6450, -4615, + 7335, 14428, -11217, -11713, 32767, 12056, -2379, 17472, 4298, -7911, -4065, -217, -8521, -8097, + -1001, 21232, 32767, 21622, -26345, -18827, -12644, 6793, -6498, 2313, 12780, 21608, 4039, 32767, + 14979, 9731, 17990, -565, -21427, 7033, -20533, 16956, -29242, -16874, -15640, -12478, 19086, 2778, + -6101, 19048, -456, 31813, 20343, 16064, 24, -16059, 32767, 32767, 85, 13697, -11872, 835, + 18530, 18658, -4799, 3631, 32767, 13001, -12518, -9131, 22333, 32767, -18858, -6789, 5287, 9199, + 12339, 18970, 12794, 14517, 6184, 1348, 9102, 12591, -5505, 6474, 32767, 32767, 8102, -386, + 22129, 417, 32767, 23805, 32767, 31939, -20406, 24308, 21114, 15681, -14483, -21161, -14707, -1167, + 5897, 5870, 19654, 13650, 14404, 30372, 8434, -9141, 9684, -2800, 25774, 15628, -22762, 5711, + 18479, 22624, -413, 4761, 32365, 6718, 10240, 20652, -11730, 7294, -4247, -6845, 515, 26575, + 16947, 7997, 4589, 20840, -8329, -226, -7029, 9800, -15879, 55, 15875, 14810, 6254, 32767, + 20270, 10592, 29884, 11262, -8301, -9988, 100, -3112, 8977, 13794, 30394, 32281, -16480, -6204, + 17440, -1259, 32767, 9570, 32767, 32767, 32767, 32767, 22377, 15492, -24065, 1669, -31230, -180, + 32248, 4350, 2213, 7479, 11680, 9694, 16500, 23591, 4950, 16620, 2269, 1263, 25733, 20150, + 30172, 17812, -295, 14802, 10232, 6382, 22350, 32767, 11896, 9000, 14675, 9485, 5821, -5745, + -11780, 17054, 5795, 10833, -32768, -30254, 3494, 21508, 18418, 6902, 12277, 8004, 9993, 5635, + -7556, -2622, -1431, 2039, 5255, -2041, -30604, 5727, 15124, 7870, -31896, -31943, -31959, 1618, + -5283, -5214, 3808, -14141, 10828, 32767, -7102, -4537, -32768, -24223, -14427, 3957, 6052, 1383, + -19365, -13857, 15646, 13000, 11147, 13040, 3764, 16736, 4358, -2148, 7359, 16728, 11098, 28024, + -21070, 2917, 21334, 2955, -31224, -26782, 11567, 23885, -26360, -24713, 14384, 26031, 10390, 14521, + 11365, 11597, -4065, 20597, -10869, 11335, -15237, -12334, 6109, 596, 32767, 10777, -19113, -4175, + -32362, 4304, 3930, -1931, -12054, -26549, 19439, 2814, 16444, 18545, 15339, 28733, 739, 2853, + -28279, -9585, 31000, 22966, -15494, -23343, 5788, 11865, 22907, 13295, 4291, -11843, -17056, 7490, + -16823, -11106, -12156, -13575, 17708, 24856, -11576, 11386, -14016, -3986, 9251, 14512, 20284, 12889, + -5968, -4703, -26982, 3197, -3432, -9063, -12999, 16724, -29701, -16390, -7029, -17879, -1111, 14980, + -19783, -14342, 32767, 15270, 12674, 9975, -9582, -1754, 21070, 18619, 2925, 1665, 10660, 10813, + 25321, 25792, -1382, -357, -4370, 873, 23038, 14508, 5851, -10916, -4024, 10598, -5901, 12731, + 18736, 8418, 17504, 876, -19635, 4344, -9191, -13493, -32768, -28201, 6296, 14869, -17072, 4580, + -8380, 11897, 32767, 26162, -3296, -9712, 28124, 32767, 4836, -15897, -20130, -24858, 9679, 26432, + -21241, -20369, 2262, 9666, -5310, 19193, -20326, 7156, -28248, -22117, -1884, 267, 14550, 10726, + -6779, -4060, -18909, 7103, -10846, -15885, 2148, 3824, -29529, 8954, -3922, 19188, 1210, -16708, + -32768, -4708, 27633, 22983, -20717, -14638, -30247, -20666, 32767, 10615, 11302, -13222, -8591, 28953, + -11675, 16551, -17875, -6706, -32768, -2298, -465, 4717, -27485, -26220, 14378, 18659, -5545, -2172, + -18354, 19775, 13557, 565, 659, -19784, -15965, -4897, 31915, 32767, -32768, -1837, 22985, 11381, + -30891, -12667, -15965, -12233, -13792, -12907, -6431, 10134, -28422, -1959, -4674, -10690, -12010, 6711, + -54, 22107, 18850, 24301, -22150, -578, -10395, 3492, 27131, 22746, -31493, -24064, 2970, -465, + 13865, 8175, 32767, 30912, 3721, -10273, 10251, -4753, 8835, 8611, 5162, 13098, 50, 2837, + -32768, -782, 2912, 4472, -25964, -26346, -14990, 20291, 14162, 17077, 16274, -5971, -9195, 822, + -10575, 16348, -7528, -2197, -5637, -19382, 17981, 17910, 28416, 22343, 9128, 18904, 29061, 19679, + 20754, 7520, -7218, 8231, -2356, -6127, 15656, 3786, 4441, 3712, 29310, 17234, 13451, 25326, + -4900, -8144, 18233, 8961, 27431, 1073, 20001, 10219, 17189, 30111, 10713, 30558, -13297, 5389, + 32422, 6953, -5324, -6866, 32767, 32767, -13370, -41, -7159, 8619, -3449, 9233, -2115, 13399, + 32767, 24249, -32768, -21316, 20284, 18283, -26816, -27919, 2260, 9270, 22137, 20552, 32767, 32767, + 19440, 2970, 18264, 28960, 28617, 30002, -2592, 526, 32767, 12907, 22596, 21857, 9919, 24453, + -32768, -7665, 19886, 10584, -20649, -27175, 16118, -1074, 12185, 2041, 2667, -25, -10581, -3964, + -12457, -10002, 11437, 17173, 32767, 9094, -14204, 12384, -21050, 16271, 25751, 1284, -11922, -23321, + 5049, 24130, -19593, 7258, 26814, 32767, -19651, 11724, -32768, -27913, -32768, -20142, -27967, 921, + 13602, 22174, -8392, -6112, -5247, -9457, -15529, -3027, -32768, 2476, -19545, 10379, -14386, 5190, + -32286, 1573, 25347, 12061, 2112, 168, -10585, -9836}; + +const int16_t *const int16xint8_dilation_1_output_ref = int16xint8_dilation_1_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_mult_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_mult_data.h deleted file mode 100644 index aa7e721f..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_mult_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int32_t int16xint8_dilation_1_output_mult[2] = {1893501671, 1089510535}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_multiplier.h new file mode 100644 index 00000000..cfcaceb7 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_multiplier.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_dilation_1_output_multiplier[2] = {1368746838, 1133491224}; + +const int32_t *const int16xint8_dilation_1_output_mult = int16xint8_dilation_1_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_ref_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_ref_data.h deleted file mode 100644 index b0f6df66..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_ref_data.h +++ /dev/null @@ -1,101 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int16_t int16xint8_dilation_1_output_ref[1800] = { - 6831, 8144, 6820, 8169, 6833, 8236, 6809, 8257, 6859, 8087, 6827, 8198, 6838, 8237, 6833, 8152, 6831, 8179, 6799, - 8318, 6824, 8240, 6825, 8163, 6823, 8175, 6818, 8127, 6841, 8142, 6826, 8210, 6822, 8133, 6812, 8094, 6824, 8205, - 6818, 8150, 6847, 8206, 6791, 8192, 6833, 8225, 6784, 8190, 6818, 8153, 6816, 8072, 6781, 8185, 6819, 8165, 6857, - 8133, 6858, 8223, 6842, 8138, 6830, 8289, 6802, 8180, 6851, 8177, 6811, 8083, 6821, 8202, 6800, 8103, 6799, 8168, - 6803, 8192, 6828, 8146, 6768, 8128, 6804, 8156, 6805, 8092, 6863, 8095, 6831, 8218, 6843, 8199, 6854, 8143, 6827, - 8167, 6874, 8110, 6816, 8213, 6794, 8260, 6842, 8083, 6828, 8103, 6819, 8220, 6821, 8095, 6834, 8206, 6845, 8172, - 6855, 8165, 6816, 8176, 6808, 8282, 6862, 8136, 6851, 8171, 6789, 8122, 6856, 8210, 6773, 8199, 6831, 8193, 6826, - 8122, 6830, 8272, 6843, 8221, 6879, 8172, 6811, 8113, 6835, 8206, 6824, 8221, 6796, 8211, 6837, 8159, 6803, 8163, - 6851, 8165, 6815, 8096, 6833, 8154, 6820, 8162, 6815, 8261, 6850, 8167, 6853, 8183, 6834, 8101, 6824, 8258, 6793, - 8221, 6832, 8152, 6828, 8051, 6828, 8169, 6757, 8136, 6797, 8187, 6821, 8215, 6830, 8073, 6855, 8183, 6782, 8240, - 6862, 8134, 6830, 8085, 6815, 8234, 6828, 8258, 6829, 8148, 6825, 8185, 6803, 8107, 6816, 8115, 6789, 8127, 6787, - 8182, 6793, 8140, 6798, 8124, 6854, 8169, 6855, 8179, 6797, 8151, 6855, 8190, 6761, 8160, 6795, 8230, 6820, 8121, - 6816, 8216, 6815, 8137, 6848, 8105, 6826, 8227, 6824, 8144, 6839, 8192, 6807, 8234, 6831, 8144, 6821, 8254, 6836, - 8167, 6835, 8111, 6809, 8260, 6814, 8194, 6808, 8120, 6828, 8046, 6786, 8201, 6817, 8193, 6808, 8244, 6775, 8102, - 6853, 8210, 6784, 8142, 6826, 8111, 6804, 8210, 6782, 8197, 6812, 8237, 6835, 8128, 6834, 8124, 6801, 8086, 6840, - 8182, 6801, 8143, 6865, 8176, 6791, 8125, 6858, 8226, 6838, 8279, 6834, 8167, 6829, 8155, 6824, 8154, 6813, 8163, - 6855, 8238, 6796, 8156, 6799, 8097, 6821, 8193, 6835, 8195, 6794, 8184, 6829, 8152, 6758, 8165, 6792, 8195, 6811, - 8164, 6841, 8228, 6847, 8124, 6834, 8177, 6803, 8094, 6825, 8125, 6838, 8197, 6828, 8101, 6844, 8214, 6811, 8189, - 6807, 8217, 6835, 8230, 6844, 8117, 6834, 8166, 6854, 8163, 6755, 8245, 6833, 8104, 6804, 8090, 6824, 8217, 6838, - 8181, 6824, 8192, 6823, 8146, 6843, 8197, 6814, 8214, 6848, 8138, 6805, 8133, 6862, 8178, 6803, 8140, 6820, 8210, - 6857, 8147, 6775, 8158, 6810, 8199, 6766, 8087, 6858, 8157, 6825, 8228, 6854, 8190, 6818, 8188, 6791, 8141, 6856, - 8130, 6809, 8156, 6797, 8210, 6824, 8164, 6847, 8129, 6822, 8119, 6850, 8136, 6821, 8212, 6811, 8153, 6796, 8196, - 6774, 8206, 6835, 8139, 6871, 8164, 6847, 8145, 6811, 8133, 6793, 8171, 6829, 8175, 6840, 8185, 6802, 8194, 6839, - 8230, 6802, 8195, 6820, 8109, 6809, 8060, 6826, 8130, 6790, 8184, 6778, 8156, 6765, 8227, 6807, 8186, 6813, 8162, - 6854, 8184, 6799, 8257, 6828, 8129, 6754, 8145, 6834, 8200, 6809, 8118, 6849, 8184, 6758, 8221, 6778, 8158, 6786, - 8200, 6800, 8210, 6819, 8153, 6794, 8137, 6813, 8160, 6829, 8161, 6814, 8160, 6866, 8136, 6794, 8171, 6786, 8215, - 6844, 8164, 6761, 8154, 6866, 8218, 6829, 8140, 6818, 8179, 6804, 8229, 6800, 8130, 6798, 8119, 6823, 8162, 6812, - 8181, 6790, 8198, 6787, 8273, 6816, 8255, 6850, 8124, 6814, 8125, 6810, 8215, 6816, 8108, 6808, 8236, 6844, 8237, - 6823, 8131, 6809, 8161, 6778, 8208, 6818, 8168, 6777, 8190, 6811, 8128, 6800, 8171, 6806, 8236, 6800, 8186, 6855, - 8153, 6840, 8160, 6795, 8229, 6814, 8209, 6818, 8094, 6791, 8268, 6843, 8157, 6838, 8108, 6797, 8244, 6793, 8211, - 6817, 8225, 6827, 8141, 6846, 8306, 6793, 8214, 6834, 8159, 6814, 8234, 6796, 8150, 6855, 8184, 6858, 8180, 6810, - 8280, 6860, 8160, 6846, 8174, 6860, 8167, 6854, 8121, 6792, 8188, 6824, 8161, 6801, 8145, 6824, 8113, 6829, 8173, - 6828, 8128, 6787, 8227, 6861, 8211, 6803, 8082, 6824, 8228, 6845, 8105, 6841, 8196, 6816, 8188, 6859, 8130, 6837, - 8195, 6814, 8221, 6867, 8171, 6857, 8116, 6857, 8165, 6852, 8167, 6812, 8099, 6842, 8241, 6761, 8198, 6817, 8201, - 6850, 8108, 6863, 8102, 6844, 8104, 6832, 8288, 6786, 8238, 6858, 8179, 6818, 8196, 6843, 8147, 6832, 8146, 6842, - 8219, 6816, 8154, 6858, 8226, 6821, 8268, 6856, 8163, 6847, 8127, 6841, 8168, 6813, 8146, 6862, 8157, 6863, 8231, - 6842, 8228, 6873, 8231, 6876, 8154, 6870, 8204, 6811, 8175, 6878, 8087, 6816, 8178, 6789, 8298, 6840, 8158, 6846, - 8129, 6824, 8205, 6802, 8143, 6823, 8276, 6764, 8216, 6801, 8123, 6823, 8220, 6788, 8151, 6785, 8237, 6800, 8120, - 6813, 8206, 6848, 8102, 6826, 8214, 6785, 8158, 6822, 8083, 6806, 8137, 6781, 8142, 6826, 8185, 6784, 8124, 6780, - 8163, 6778, 8162, 6818, 8180, 6827, 8134, 6818, 8181, 6790, 8178, 6827, 8132, 6799, 8132, 6817, 8152, 6812, 8221, - 6860, 8126, 6804, 8116, 6774, 8125, 6802, 8155, 6810, 8181, 6840, 8222, 6855, 8120, 6837, 8166, 6795, 8252, 6831, - 8141, 6870, 8092, 6810, 8220, 6823, 8165, 6802, 8212, 6834, 8118, 6792, 8132, 6785, 8260, 6818, 8186, 6796, 8129, - 6840, 8149, 6830, 8104, 6853, 8115, 6774, 8189, 6812, 8201, 6830, 8206, 6761, 8162, 6806, 8153, 6817, 8193, 6808, - 8131, 6826, 8136, 6846, 8168, 6821, 8256, 6860, 8114, 6846, 8232, 6854, 8158, 6890, 8159, 6812, 8174, 6868, 8247, - 6830, 8203, 6841, 8169, 6806, 8110, 6829, 8159, 6827, 8153, 6821, 8097, 6838, 8235, 6771, 8208, 6832, 8110, 6850, - 8068, 6815, 8128, 6804, 8176, 6789, 8203, 6792, 8141, 6801, 8216, 6810, 8144, 6794, 8130, 6829, 8157, 6797, 8242, - 6850, 8161, 6785, 8118, 6853, 8172, 6777, 8165, 6831, 8209, 6818, 8200, 6881, 8171, 6833, 8097, 6829, 8173, 6866, - 8089, 6775, 8215, 6789, 8151, 6808, 8126, 6799, 8131, 6883, 8157, 6797, 8161, 6851, 8102, 6864, 8164, 6809, 8147, - 6874, 8135, 6818, 8200, 6816, 8120, 6807, 8121, 6824, 8157, 6780, 8182, 6842, 8129, 6869, 8128, 6865, 8086, 6813, - 8135, 6805, 8272, 6828, 8122, 6824, 8144, 6795, 8201, 6826, 8081, 6838, 8134, 6809, 8103, 6784, 8220, 6802, 8182, - 6815, 8166, 6847, 8215, 6828, 8184, 6852, 8065, 6845, 8227, 6811, 8151, 6800, 8148, 6820, 8165, 6846, 8129, 6822, - 8122, 6789, 8152, 6818, 8145, 6789, 8137, 6795, 8203, 6840, 8195, 6833, 8170, 6832, 8183, 6850, 8150, 6831, 8066, - 6795, 8219, 6788, 8058, 6820, 8103, 6807, 8125, 6820, 8265, 6843, 8122, 6798, 8123, 6788, 8188, 6820, 8110, 6809, - 8202, 6773, 8153, 6824, 8240, 6819, 8175, 6786, 8227, 6849, 8142, 6828, 8104, 6794, 8145, 6767, 8159, 6796, 8124, - 6803, 8170, 6790, 8112, 6822, 8198, 6785, 8179, 6819, 8142, 6795, 8183, 6838, 8143, 6797, 8102, 6808, 8151, 6788, - 8147, 6806, 8090, 6823, 8195, 6779, 8185, 6858, 8169, 6846, 8105, 6814, 8148, 6796, 8119, 6810, 8131, 6861, 8164, - 6859, 8164, 6887, 8196, 6813, 8163, 6813, 8154, 6780, 8176, 6782, 8140, 6803, 8192, 6839, 8145, 6776, 8219, 6815, - 8154, 6819, 8085, 6822, 8145, 6833, 8161, 6848, 8118, 6840, 8231, 6800, 8201, 6826, 8146, 6796, 8194, 6839, 8090, - 6799, 8122, 6836, 8110, 6789, 8217, 6793, 8207, 6811, 8145, 6844, 8134, 6810, 8061, 6864, 8137, 6815, 8162, 6793, - 8234, 6846, 8125, 6860, 8134, 6803, 8149, 6824, 8154, 6838, 8187, 6812, 8123, 6833, 8161, 6813, 8191, 6826, 8243, - 6839, 8184, 6830, 8144, 6816, 8175, 6821, 8184, 6831, 8187, 6818, 8121, 6844, 8170, 6786, 8178, 6810, 8195, 6811, - 8181, 6840, 8182, 6828, 8174, 6868, 8181, 6810, 8210, 6828, 8145, 6814, 8177, 6839, 8104, 6807, 8173, 6791, 8217, - 6806, 8167, 6820, 8156, 6819, 8121, 6827, 8189, 6824, 8143, 6837, 8253, 6798, 8233, 6814, 8138, 6838, 8122, 6843, - 8184, 6830, 8124, 6815, 8194, 6824, 8141, 6825, 8137, 6839, 8093, 6841, 8171, 6872, 8167, 6797, 8234, 6854, 8232, - 6801, 8080, 6844, 8151, 6788, 8144, 6831, 8211, 6804, 8174, 6830, 8164, 6798, 8137, 6806, 8191, 6826, 8134, 6829, - 8185, 6808, 8243, 6825, 8172, 6823, 8179, 6834, 8146, 6842, 8103, 6805, 8190, 6840, 8160, 6809, 8078, 6793, 8201, - 6825, 8153, 6819, 8125, 6842, 8198, 6815, 8150, 6846, 8179, 6845, 8185, 6818, 8085, 6861, 8192, 6808, 8222, 6848, - 8182, 6843, 8111, 6816, 8175, 6851, 8142, 6818, 8145, 6844, 8251, 6798, 8186, 6842, 8241, 6801, 8148, 6837, 8176, - 6815, 8129, 6820, 8272, 6821, 8171, 6843, 8166, 6842, 8140, 6797, 8187, 6829, 8212, 6801, 8226, 6822, 8170, 6802, - 8131, 6790, 8208, 6808, 8138, 6786, 8166, 6782, 8184, 6816, 8130, 6789, 8152, 6848, 8201, 6783, 8205, 6827, 8230, - 6815, 8211, 6806, 8157, 6795, 8176, 6784, 8218, 6789, 8139, 6798, 8162, 6808, 8172, 6828, 8189, 6822, 8193, 6854, - 8106, 6848, 8126, 6849, 8180, 6840, 8208, 6833, 8238, 6855, 8196, 6799, 8117, 6808, 8170, 6793, 8157, 6804, 8137, - 6816, 8256, 6811, 8168, 6803, 8189, 6864, 8117, 6834, 8190, 6830, 8171, 6793, 8117, 6775, 8188, 6824, 8112, 6843, - 8123, 6839, 8124, 6829, 8169, 6788, 8203, 6801, 8160, 6821, 8235, 6814, 8122, 6825, 8159, 6823, 8158, 6845, 8123, - 6845, 8182, 6821, 8185, 6834, 8275, 6783, 8177, 6864, 8169, 6779, 8093, 6791, 8224, 6794, 8167, 6852, 8180, 6807, - 8202, 6847, 8116, 6805, 8218, 6791, 8239, 6873, 8115, 6813, 8200, 6863, 8123, 6839, 8198, 6852, 8072, 6849, 8308, - 6804, 8273, 6872, 8175, 6838, 8228, 6864, 8213, 6850, 8177, 6801, 8179, 6799, 8186, 6806, 8147, 6814, 8126, 6825, - 8111, 6781, 8192, 6827, 8140, 6798, 8184, 6800, 8137, 6825, 8247, 6840, 8155, 6881, 8141, 6842, 8174, 6815, 8212, - 6812, 8200, 6865, 8131, 6812, 8166, 6850, 8130, 6809, 8162, 6817, 8235, 6848, 8127, 6817, 8129, 6819, 8174, 6816, - 8136, 6782, 8160, 6813, 8106, 6813, 8184, 6807, 8170, 6798, 8173, 6815, 8190, 6799, 8184, 6882, 8075, 6804, 8190, - 6816, 8176, 6803, 8057, 6773, 8156, 6812, 8163, 6837, 8244, 6818, 8137, 6820, 8197, 6823, 8227, 6825, 8212, 6794, - 8190, 6882, 8159, 6811, 8106, 6822, 8138, 6813, 8256, 6778, 8077, 6861, 8205, 6762, 8125, 6819, 8219, 6782, 8175, - 6856, 8131, 6816, 8233, 6817, 8184, 6847, 8115, 6790, 8166, 6812, 8178, 6826, 8203, 6808, 8197, 6801, 8201, 6880, - 8177, 6837, 8214, 6832, 8191, 6805, 8125, 6847, 8131, 6822, 8097, 6821, 8267, 6789, 8140, 6844, 8129, 6807, 8094, - 6819, 8090, 6805, 8206, 6796, 8199, 6807, 8181, 6812, 8069, 6837, 8230, 6821, 8213, 6823, 8127, 6825, 8191, 6792, - 8208, 6825, 8166, 6833, 8163, 6805, 8191, 6826, 8246, 6844, 8101, 6830, 8146, 6789, 8173, 6825, 8193, 6803, 8065, - 6844, 8225, 6772, 8251, 6802, 8124, 6839, 8187, 6814, 8166, 6807, 8187, 6832, 8173, 6830, 8096, 6845, 8111, 6811, - 8283, 6808, 8218, 6825, 8115, 6824, 8174, 6805, 8182, 6868, 8141, 6819, 8112, 6850, 8152, 6803, 8179, 6842, 8254, - 6823, 8170, 6781, 8135, 6821, 8236, 6781, 8082, 6816, 8096, 6807, 8180, 6796, 8129, 6803, 8188, 6800, 8167, 6829, - 8190, 6797, 8153, 6803, 8252, 6871, 8099, 6809, 8125, 6804, 8245, 6780, 8225, 6855, 8248, 6850, 8076, 6833, 8163, - 6813, 8170, 6839, 8127, 6826, 8083, 6804, 8201, 6803, 8122, 6840, 8100, 6831, 8247, 6807, 8134, 6855, 8068, 6841, - 8145, 6772, 8208, 6868, 8148, 6805, 8079, 6841, 8270, 6787, 8180, 6822, 8169, 6809, 8167, 6798, 8118, 6784, 8231, - 6786, 8136, 6823, 8176, 6835, 8202, 6841, 8215, 6827, 8202, 6778, 8205, 6828, 8252, 6837, 8189, 6830, 8120, 6835, - 8144, 6804, 8198, 6853, 8159, 6819, 8063, 6852, 8191, 6810, 8195, 6790, 8140, 6821, 8176, 6781, 8127, 6814, 8171, - 6862, 8191, 6845, 8155, 6840, 8129, 6847, 8212, 6791, 8234, 6850, 8162, 6820, 8115}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_shift.h new file mode 100644 index 00000000..b0614661 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_dilation_1_output_shift[2] = {-7, -7}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_shift_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_shift_data.h deleted file mode 100644 index 7cdd8f29..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/output_shift_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int32_t int16xint8_dilation_1_output_shift[2] = {-9, -8}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/test_data.h index 8102687f..33835748 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/test_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/test_data.h @@ -1,9 +1,7 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#include "biases_data.h" +#include "bias.h" #include "config_data.h" -#include "input_data.h" -#include "output_mult_data.h" -#include "output_ref_data.h" -#include "output_shift_data.h" -#include "weights_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/weights.h new file mode 100644 index 00000000..b0c176c8 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/weights.h @@ -0,0 +1,7 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8_dilation_1_weights[16] = + {23, 113, -127, 98, 24, -5, -25, -75, 14, 127, -81, 21, -119, 7, 15, -40}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/weights_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/weights_data.h deleted file mode 100644 index 58c5ce91..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_1/weights_data.h +++ /dev/null @@ -1,7 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int8_t int16xint8_dilation_1_weights[16] = - {-6, -48, 127, -18, -44, 110, 20, 59, 127, 104, 45, -106, 116, -125, 90, 127}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/bias.h new file mode 100644 index 00000000..8e9aece8 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int64_t int16xint8_dilation_2_bias[4] = {4659699, -33336, 2109336, 52520}; + +const int64_t *const int16xint8_dilation_2_biases = int16xint8_dilation_2_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/biases_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/biases_data.h deleted file mode 100644 index 06e0c841..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/biases_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int64_t int16xint8_dilation_2_biases[4] = {-2344429, -202449, -1602646, 330522}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/config_data.h index 1e775b12..bce76a62 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/config_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/config_data.h @@ -1,24 +1,25 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. #pragma once -#define INT16XINT8_DILATION_2_OUT_CH 4 #define INT16XINT8_DILATION_2_IN_CH 3 +#define INT16XINT8_DILATION_2_OUT_CH 4 #define INT16XINT8_DILATION_2_INPUT_W 7 #define INT16XINT8_DILATION_2_INPUT_H 8 -#define INT16XINT8_DILATION_2_DST_SIZE 224 -#define INT16XINT8_DILATION_2_INPUT_SIZE 168 -#define INT16XINT8_DILATION_2_OUT_ACTIVATION_MIN -13335 -#define INT16XINT8_DILATION_2_OUT_ACTIVATION_MAX 32767 -#define INT16XINT8_DILATION_2_INPUT_BATCHES 1 #define INT16XINT8_DILATION_2_FILTER_X 2 #define INT16XINT8_DILATION_2_FILTER_Y 4 +#define INT16XINT8_DILATION_2_BATCH_SIZE 2 +#define INT16XINT8_DILATION_2_PADDING SAME +#define INT16XINT8_DILATION_2_DILATION_X 2 +#define INT16XINT8_DILATION_2_DILATION_Y 2 +#define INT16XINT8_DILATION_2_OUT_ACTIVATION_MIN -13335 #define INT16XINT8_DILATION_2_STRIDE_X 1 #define INT16XINT8_DILATION_2_STRIDE_Y 1 +#define INT16XINT8_DILATION_2_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8_DILATION_2_INPUT_BATCHES 2 #define INT16XINT8_DILATION_2_PAD_X 1 #define INT16XINT8_DILATION_2_PAD_Y 3 -#define INT16XINT8_DILATION_2_OUTPUT_W 7 #define INT16XINT8_DILATION_2_OUTPUT_H 8 +#define INT16XINT8_DILATION_2_OUTPUT_W 7 +#define INT16XINT8_DILATION_2_DST_SIZE 448 #define INT16XINT8_DILATION_2_INPUT_OFFSET 0 #define INT16XINT8_DILATION_2_OUTPUT_OFFSET 0 -#define INT16XINT8_DILATION_2_DILATION_X 2 -#define INT16XINT8_DILATION_2_DILATION_Y 2 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/input.h new file mode 100644 index 00000000..8cadec8b --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/input.h @@ -0,0 +1,30 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_dilation_2_input[336] = { + 5147, -2038, 14990, -26963, -28228, 30837, -11373, -22761, 11555, -5395, 10855, -11798, -18668, -17227, + -23653, 15840, 23637, 2609, 30313, -13884, -24237, 20524, -19156, -1649, -6434, -11284, 25418, 31510, + -4564, -31430, -18807, -17122, 6691, -8745, -20134, -12330, -19469, -21323, -2558, -8048, -24590, 15523, + 5824, 28516, -22451, 16238, -12581, -22737, -2621, 23739, -24145, 12222, 2050, -462, 15506, -25822, + 21677, -7780, 4756, 6766, -16364, 591, -7672, 8028, 3377, -18188, -14756, -16472, -13509, -31281, + 3190, 18502, 8819, 17688, -25072, 18778, -26202, 8023, 12478, -29695, -4089, 12035, -882, 14860, + 23155, -29432, -645, -18147, 22340, 25217, 15607, -12699, 30305, 26128, -12549, -2753, -10600, -3738, + -1105, -4255, 26352, -10436, -14300, 992, 19910, 9072, 30203, 1007, -23382, 17401, 8604, 15230, + -23978, 20270, -29247, -30384, 22781, 32706, 6473, -19259, -30629, -1892, -30298, -25273, -17511, -27923, + 18037, 14722, 13161, -26931, -30294, -16244, 22864, -12432, 29463, 9174, -14283, 13160, 26040, 17922, + -28102, 20081, -26863, -29102, -11964, 29457, -11931, 19174, -21397, -17645, -2202, -9724, -20057, -163, + 2955, -22627, 15005, -29284, -17185, -28885, -4708, 23308, 9682, -531, -16895, -3826, -31625, -30387, + 21206, 4226, -32146, 27376, -29644, -21885, 24635, -18279, 17249, -8854, 26862, -8887, 32521, -16185, + 10477, -1284, 2982, 3947, -17078, 30348, -13805, -2845, 2358, 27442, -25162, 1569, 32698, 26019, + 20381, -7382, 9996, 15270, -32618, -32573, -8780, -9107, -15515, 12323, 8593, -28228, -20696, 16841, + 6762, -17542, -20745, -26011, -11644, -26694, 24601, 23577, -25987, -20265, -25118, 13306, -8335, -18675, + -659, -11031, -11655, -31503, -21048, -5596, 16250, 8312, -10042, 10777, -12758, 25719, 28165, -24208, + -27472, 5176, 27098, -21948, 14891, 14600, -13614, -19267, 24484, 3189, -31431, -16309, 14263, 29459, + 14930, 10804, 19783, 31108, -7659, -16701, -21913, -8084, 16686, 21581, -16776, 18518, -1948, -9870, + 11561, -22585, -4013, 3389, 26761, 22286, 11909, 27227, -8491, -18530, -20079, 3169, -29452, -1254, + 28084, 4287, 19225, 9362, 6008, -13949, 2499, 9992, 30266, -26422, 15427, -180, -18231, -19898, + -10817, -23394, 13016, 8595, -11843, 12138, 32600, 1352, 11802, -18802, -6838, 24941, 32253, -3372, + 19421, 2448, -25207, 29618, -22193, -16614, 31290, -20382, 10759, 32113, 18153, -12806, 11717, -15847, + -19131, -25512, -29790, 32123, 10071, -24550, 22901, 29966, 6211, 29783, 27879, 25141, 17028, 16592}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/input_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/input_data.h deleted file mode 100644 index f013596c..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/input_data.h +++ /dev/null @@ -1,18 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int16_t int16xint8_dilation_2_input[168] = { - -13359, -13521, -30507, 15100, -18116, -16273, -28549, 211, -22513, -25756, -2605, -6144, -17260, -1001, - -29915, 8296, -1605, -6875, 15063, -15341, -8748, 24427, 22086, -31283, 15927, 14365, -1185, 10153, - 10600, 20208, 15815, 1158, -21122, -13706, -2787, 8929, 31303, 9394, -10622, -6220, -32612, 8563, - 21200, -25490, 11546, 1725, 24367, -7434, -20863, -24633, -17992, -593, 25018, -9190, 23584, -9282, - 29216, -24138, 13800, -1683, 14603, 17623, -11550, -16707, -1439, 23273, -1526, -5025, -9610, 20727, - 10838, 9732, 23286, 17081, -29352, -26654, 4654, -20271, -28811, 7793, 17359, 28101, 28186, -23226, - 20180, 12275, -7648, 21538, 28201, 31921, -27739, -27491, -31431, -25508, -18390, 17648, 17499, -2855, - 10394, 30182, 11109, 31308, 15875, -28892, 11587, 5627, -250, 16245, -12146, 30905, 534, -25807, - -17766, -983, -27084, -13972, 6932, -4702, -4650, -26272, -19557, -3076, 1789, -32635, 27784, -9316, - -16673, 4687, 22748, -23790, 11842, 31226, 22127, 1050, -5839, 29294, 25774, -28256, -7944, -21063, - -19168, 31984, -9172, 27536, 20901, -1026, 29304, -3397, 8690, 17629, 31162, -15743, -17353, 28506, - 12932, -21413, 31853, -25404, 10921, -16014, 5007, -8685, -12784, -13122, 5209, -25243, -10485, 4491}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output.h new file mode 100644 index 00000000..e5503d9f --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output.h @@ -0,0 +1,40 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_dilation_2_output[448] = { + 6910, 3403, -701, 8091, 3888, 7235, 20068, 12396, 12680, -13335, 11186, 7494, 31926, 5270, + 2709, 756, 17211, -2793, 8662, -10110, 5276, -8922, -4124, -314, 2901, -11404, -2032, 901, + 350, 9889, 14205, 6431, 12611, 6219, -13038, -13335, 12790, 12408, 8048, -7615, 9891, 13721, + -13335, 271, 2793, -13335, 7185, 11810, 20273, -2307, 17194, -13335, 9508, 1483, 13946, 89, + 7994, 734, 10485, 2211, 28313, 14448, -8528, -13335, 5029, 24204, 11510, -13335, 10710, -11664, + -13335, 1861, 23201, 3613, -13335, 19816, -1515, 11327, 4755, 17537, 16033, 752, 26452, 17357, + 24342, 22601, -13335, -7068, 4543, 10290, 16896, 6871, 20101, -13335, -10994, 1569, 12387, -13335, + -3564, -13335, 3757, -8441, -2215, 6736, -13335, 919, 16795, 6812, 12953, -5178, -4663, -211, + 19761, 12180, -2130, -1689, -12697, -7187, 9773, 23104, 32767, -6687, -13335, -10210, -8470, 13705, + 31239, -13335, 31072, -13335, -8104, -13335, 32767, 13605, -13335, -3035, 13991, 1925, -13335, 9390, + 3308, -10241, 15837, -3668, -8160, 5598, -13335, 15480, -753, -10190, 14927, -6259, -8862, 19767, + 7040, -7388, 9577, 2368, 1681, 12337, 18230, 8536, 11747, 95, 16921, -7240, 15870, 17620, + 8421, -88, 6042, 2168, 24147, 1310, 714, 9087, 4817, -13335, 19266, 11065, 24662, 1932, + -13335, -13335, 2776, 16772, 16727, -2641, 18150, 2348, 5746, -9496, 14124, 210, 16534, 9771, + 20590, 10775, 1262, 10073, 3651, 10117, 7050, -7715, 14585, -94, 759, -12419, 18968, 1819, + -3936, -13335, 17878, 275, 241, -13335, 13093, 292, -439, 26833, 11780, 7241, -13335, 11175, + -566, 4004, 17488, 2187, -8606, 8447, -2054, -11245, 6511, 4399, 3240, -13335, 32667, -10051, + -5495, -2381, 17772, -10573, -13335, 2205, 5184, -5475, 8001, -1272, 6590, -2351, 4485, -2613, + 32767, -13335, -9330, -13335, 8332, 10785, -9166, -1738, 11773, 1836, -13335, 7639, 29043, 9597, + -13335, -10481, 2800, -13335, 7163, -13335, -840, -3243, 3833, 5878, 17073, -1345, 3040, 9626, + -9758, 6263, 8589, 22628, 6582, -13335, 15202, -6545, 9794, -7863, 18672, -5222, 2167, 8260, + 16868, 7611, 3120, 1421, 14572, 1203, 8926, 10766, 12552, 14053, 9336, -6363, -4250, 1633, + 2594, 7316, 10938, -13335, 6743, 1010, -1087, -11507, -5886, 15254, 17308, 25881, -3684, 2615, + 9291, -13335, 13582, 12565, 8051, -13335, -13335, 19156, 9901, -6564, 7311, -7631, -13335, -4538, + 17898, 6097, 1638, 329, 8665, 12832, 8087, 1711, 1330, -13335, 1432, -10954, 21627, 10760, + 1829, -11052, 11075, 20321, 543, 14133, 15563, 9295, -10090, 6680, 7862, 6233, 7249, 6358, + 19922, -7112, -10050, -10254, -13335, -5809, 25716, 13062, 11423, 8342, -13335, 8791, -8461, 19230, + 9122, 7274, -6499, -1230, -136, -2696, 9001, 2086, 6284, 5956, -7491, -5332, 21089, -595, + 13000, 7471, 3017, 24626, 17071, 1965, -10254, -12334, 12463, -3455, 19189, -12328, -4033, -11058, + 21201, 3604, -7185, -3788, 54, -13335, 254, 12507, -975, -4213, -4118, 17050, -9010, -8889, + 624, -4865, 10611, -11648, 21623, 8300, -10530, -13335, -9158, 21885, 11034, 301, 16043, -1294, + -13335, -6383, 12491, 9034, 6011, -13335, -4538, 6771, 8803, 7066, 7579, 2941, -3573, -6206}; + +const int16_t *const int16xint8_dilation_2_output_ref = int16xint8_dilation_2_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_mult_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_mult_data.h deleted file mode 100644 index 84a53a1a..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_mult_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int32_t int16xint8_dilation_2_output_mult[4] = {1583886484, 1523207209, 1678512219, 1697115592}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_multiplier.h new file mode 100644 index 00000000..0e132e5d --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_multiplier.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_dilation_2_output_multiplier[4] = {2107752354, 1150320541, 1174633973, 1187624979}; + +const int32_t *const int16xint8_dilation_2_output_mult = int16xint8_dilation_2_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_ref_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_ref_data.h deleted file mode 100644 index 18487b37..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_ref_data.h +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int16_t int16xint8_dilation_2_output_ref[224] = { - -5992, 9620, -3673, 4491, -3457, 1746, 12484, -13173, -11833, 86, -6711, 5045, -4775, 16148, - 55, -1638, -1511, 608, -13335, -13335, -6580, -13335, -7705, 13352, 4683, 3576, -3773, -1655, - -13335, -13335, -5202, -8624, -11410, 17673, -13335, -4940, -8443, 17019, 1722, -13335, -13335, -13335, - -13335, 15349, -13335, -13335, 23939, -2310, -6508, 21018, -5568, -6062, -6058, 2170, 6206, -13335, - -10782, -11988, -13335, -998, 21380, 17503, 4300, 23823, 8441, -13154, -13335, -2699, -8615, 10083, - 20952, 30348, -3808, -10827, 3501, -3050, -13335, 9415, -5743, 15641, -33, -13335, 7940, 27276, - -13335, 3351, -13335, 1457, -4969, -3154, -5145, -414, 7114, 3634, 14042, 11471, 11593, 20711, - -9083, -8115, -4201, -13335, -7916, 1255, 2587, -13335, -13335, 10452, -3935, 28896, 3646, -773, - -13335, -3347, 24923, 4727, 4725, -13335, 4403, 10237, -13335, -13335, 499, -6565, -13335, -9365, - -13335, -2119, -13335, 2263, 11893, 32767, -13335, -12556, -13335, -13335, -7677, 5, 2016, 20981, - -6403, 556, 21251, 4668, -13335, 25437, -12258, 7263, 3854, 1279, 30868, 32767, 3746, -8279, - -13335, -13335, 32767, 10041, 882, -12518, -13335, 13978, 537, -11175, 3786, -3104, -4063, 16829, - 2736, -1205, -13335, 6035, -13335, 5113, 2462, 9109, 5689, 11245, -13335, 19540, -13335, 13573, - -6288, -13335, 8898, 16378, -11461, 7958, -13335, -13335, -94, 25572, -10891, -2051, -1229, -3336, - 1883, -3734, 11094, 9591, -4390, 10513, -13335, 2141, -6439, -10109, -13335, -13335, -4201, -13335, - -12889, 2103, 11698, -13335, 8739, -8030, -7922, 10576, -12348, -13335, -13335, 2047, -3990, -4736}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_shift.h new file mode 100644 index 00000000..32bbecf6 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_dilation_2_output_shift[4] = {-9, -8, -8, -8}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_shift_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_shift_data.h deleted file mode 100644 index 7a9c9d0c..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/output_shift_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int32_t int16xint8_dilation_2_output_shift[4] = {-8, -8, -8, -8}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/test_data.h index 8102687f..33835748 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/test_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/test_data.h @@ -1,9 +1,7 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#include "biases_data.h" +#include "bias.h" #include "config_data.h" -#include "input_data.h" -#include "output_mult_data.h" -#include "output_ref_data.h" -#include "output_shift_data.h" -#include "weights_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/weights.h new file mode 100644 index 00000000..151991e3 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/weights.h @@ -0,0 +1,11 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8_dilation_2_weights[96] = { + -42, 28, 112, -127, -7, 64, -9, -1, -65, 91, -99, -109, 31, 68, -119, -101, -81, -119, -94, 15, + -54, 67, -33, -63, 86, 4, -22, -28, -100, 127, 49, -113, 17, -85, -50, 6, 47, 37, -27, 46, + 43, 50, -10, 120, 23, -74, -72, 82, 73, -76, 18, 127, 47, -39, -127, 115, 24, -91, 55, 4, + 94, -123, 82, -37, 33, 2, -77, 107, -121, -20, 87, 90, -58, 0, -81, -48, 105, 88, 52, 20, + -121, -124, 108, 55, 83, -57, -118, 127, -53, 116, -75, -31, -117, -76, 99, -109}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/weights_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/weights_data.h deleted file mode 100644 index 84c72d82..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_2/weights_data.h +++ /dev/null @@ -1,11 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int8_t int16xint8_dilation_2_weights[96] = { - -56, 56, -117, -112, -8, 105, 13, 106, -16, 49, -4, 112, 21, 44, 0, 100, -127, 21, -60, 70, - 36, -57, -96, 5, 59, -122, 75, -127, -50, -63, -59, -33, -9, -84, -62, 120, 97, -44, 45, 61, - 102, 43, 65, -75, 104, -81, -54, -93, -34, 76, 40, -47, 74, 9, -3, 83, 3, -61, -125, 125, - -55, 127, 17, -125, 127, 105, -17, -74, 67, 84, -52, -58, 14, 127, -120, 27, 69, -85, 42, 101, - -13, -75, -6, 40, -50, -1, 113, 17, 25, -18, -122, -126, -36, -43, 5, -45}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/bias.h new file mode 100644 index 00000000..f8038852 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int64_t int16xint8_dilation_3_bias[4] = {-1273501, 4307254, 3533314, 369726}; + +const int64_t *const int16xint8_dilation_3_biases = int16xint8_dilation_3_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/biases_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/biases_data.h deleted file mode 100644 index f4e2b416..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/biases_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int64_t int16xint8_dilation_3_biases[4] = {-327603, 1841278, 110314, -3869773}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/config_data.h index 030eb35f..94f3079c 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/config_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/config_data.h @@ -1,24 +1,25 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. #pragma once -#define INT16XINT8_DILATION_3_OUT_CH 4 #define INT16XINT8_DILATION_3_IN_CH 3 +#define INT16XINT8_DILATION_3_OUT_CH 4 #define INT16XINT8_DILATION_3_INPUT_W 7 #define INT16XINT8_DILATION_3_INPUT_H 8 -#define INT16XINT8_DILATION_3_DST_SIZE 224 -#define INT16XINT8_DILATION_3_INPUT_SIZE 168 -#define INT16XINT8_DILATION_3_OUT_ACTIVATION_MIN -13335 -#define INT16XINT8_DILATION_3_OUT_ACTIVATION_MAX 32767 -#define INT16XINT8_DILATION_3_INPUT_BATCHES 1 #define INT16XINT8_DILATION_3_FILTER_X 2 #define INT16XINT8_DILATION_3_FILTER_Y 4 +#define INT16XINT8_DILATION_3_PADDING SAME +#define INT16XINT8_DILATION_3_DILATION_X 2 +#define INT16XINT8_DILATION_3_OUT_ACTIVATION_MIN -23335 #define INT16XINT8_DILATION_3_STRIDE_X 1 #define INT16XINT8_DILATION_3_STRIDE_Y 1 +#define INT16XINT8_DILATION_3_DILATION_Y 1 +#define INT16XINT8_DILATION_3_BATCH_SIZE 1 +#define INT16XINT8_DILATION_3_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8_DILATION_3_INPUT_BATCHES 1 #define INT16XINT8_DILATION_3_PAD_X 1 #define INT16XINT8_DILATION_3_PAD_Y 1 -#define INT16XINT8_DILATION_3_OUTPUT_W 7 #define INT16XINT8_DILATION_3_OUTPUT_H 8 +#define INT16XINT8_DILATION_3_OUTPUT_W 7 +#define INT16XINT8_DILATION_3_DST_SIZE 224 #define INT16XINT8_DILATION_3_INPUT_OFFSET 0 #define INT16XINT8_DILATION_3_OUTPUT_OFFSET 0 -#define INT16XINT8_DILATION_3_DILATION_X 2 -#define INT16XINT8_DILATION_3_DILATION_Y 1 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/input.h new file mode 100644 index 00000000..06494e51 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/input.h @@ -0,0 +1,18 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_dilation_3_input[168] = { + -1229, 15733, 21897, -13468, -20913, -21296, -11691, -426, 12280, -17919, -14660, -6571, -19584, 16752, + 16395, 25314, 7943, 4327, 23794, -8980, 2684, 20569, -18134, -11325, 7617, -21086, -1769, 3189, + 13434, -31126, 11307, -4284, -13474, 28644, 27075, 18692, -12361, 2926, -6885, 15100, -18081, -16391, + -18279, 18568, 5841, -20636, 4286, -9342, 27264, 13557, 8453, 12844, 11029, -5611, -12202, -1826, + 19746, -27787, -11694, 21132, 13369, 7172, 8501, -24924, -17660, -7199, -1253, 13079, -2631, -12749, + -27019, -10900, 25273, 30240, 20142, 31247, -12112, -30323, 13006, 8012, -16895, -8467, -22651, 21461, + 28702, 27090, -12750, 17166, 30867, 13522, -30707, -12329, -9213, -24312, -26573, 26387, 18452, -7254, + 1105, 20991, 25897, -15939, 12538, 15734, -11419, 12717, 32505, -28008, -4830, -4276, -32041, 15686, + 6714, -23851, -28181, -19872, 11772, -25450, 29481, 31819, -6011, -1577, 14201, -14328, 7467, 2616, + 19161, 14250, -5004, 32335, -30703, -1093, 3808, 28265, 4092, -10866, 21841, -10182, -13471, -7930, + 28510, -21027, 62, 28749, 30622, -26109, -29345, -2707, 28342, 4264, -24323, -20065, 31848, -1833, + -8035, -17121, -20655, 27655, -18501, -26939, 4279, 14051, 5290, -10796, 29530, -12679, 2204, 28443}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/input_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/input_data.h deleted file mode 100644 index 129ba415..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/input_data.h +++ /dev/null @@ -1,18 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int16_t int16xint8_dilation_3_input[168] = { - 5754, -30090, 26353, -8581, 15375, 14757, -32401, 17750, -12796, 4716, 26883, -6446, 4544, 6728, - 2452, -32672, 13377, 28147, 19640, -3589, -928, 25574, 29042, 20297, 1584, 31370, 13792, 205, - 3469, 11815, -1585, -2793, 32252, -5119, 11567, -4344, 31796, 30066, -18362, -60, -13844, 1166, - -19006, -28957, 31277, 12084, -18541, -27737, 9344, 31710, 15136, -18745, 16787, -29994, -2538, -14004, - 28917, -8236, -9542, -23379, 13877, -14459, 13511, 14394, 32375, -16967, -23385, 13275, 14151, -9147, - -18332, 14233, 5395, -18350, 24454, 1524, 4234, 6062, -13966, -2452, -8093, 6796, -13347, -17759, - -13142, 25717, 15664, -23392, -15152, -21830, -17074, -30730, -21221, -24414, -28857, 13242, -8764, 23892, - -23896, 27342, -3129, 3481, -11542, -6384, 18547, -22736, -12115, -7486, 13167, -20528, -12394, 29769, - 15389, -7464, 10948, -26204, 14212, 15010, 23835, 807, -15162, -6914, 19906, -30807, 5614, -17663, - -28132, 27464, -10064, 1782, 18376, 19486, -7974, -1552, -14509, -27260, -23933, -18326, 6182, 24089, - 3361, 31681, 24173, -27249, 26548, -16539, 23384, -12583, -20332, 5421, 22264, 10934, -10912, -2639, - -445, -18587, 26946, 29134, 25598, -19766, 16766, -19138, -1281, -31858, -25652, 15611, -16581, 13683}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output.h new file mode 100644 index 00000000..5d1d0c9c --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output.h @@ -0,0 +1,24 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_dilation_3_output[224] = { + 2522, 1821, 7398, 858, -15493, 23495, 13779, -10431, -13527, 4168, 10630, -4901, -22358, 2458, + -5371, -2964, -2107, 323, -5922, 4854, 3881, 21634, 23710, 3719, -3794, 19334, 8244, -470, + 2900, 19466, 6949, -18818, -4022, -8744, 14590, -1309, -14010, 12456, 9732, -23335, -5389, -7233, + 22102, 22600, 2906, 2940, 809, -7919, 11563, 5639, 1888, -2675, 10578, -1095, 7590, 4775, + -12647, 23123, 4722, -18633, 25329, -12804, -5144, 26789, -5543, -9847, 7993, 493, -9174, 18257, + 10639, 29583, -9948, 32767, 30316, -3140, 4961, 22001, -8407, 11497, -3923, 1514, 538, -5502, + -7169, -9924, 13222, 5865, 11511, 7733, 11219, -19184, 12110, 4361, -7747, 27522, 4000, -6139, + -348, -819, -10927, 10230, 19620, 6450, -15161, 10961, 5105, -14699, -11809, 7145, 8733, -13130, + 72, 5001, 11682, 7368, -23295, 14358, 14168, -23335, 7588, 21752, -8059, 18461, -1924, 12701, + -3986, -12101, 18724, 5768, -17726, 4623, 9838, 16582, 32767, 3047, -2775, 14403, 15353, 5883, + 926, -8298, 5387, 16883, -5710, -6129, 30624, -8138, -23335, 17788, 6374, -6888, -13572, 11533, + -15768, 9104, 7114, 8547, -4093, -15500, 6235, 16201, 9408, 18336, 8377, 18467, 4949, 5916, + 17889, 12852, 2467, -3371, 10224, 21756, 3129, 8897, -12272, 8585, 2275, -13491, -9110, 6642, + 12907, 14883, -16724, -485, 1444, -2591, 16846, 351, 537, -19648, 4651, 7846, 4883, 3012, + -6872, 29357, -1514, -5201, 9273, 3807, 19380, 10714, 5931, 2138, 12929, 11141, -20137, 5809, + 1045, -5412, -17706, 606, 9714, 7015, -690, 22159, -10428, -6206, 163, 10371, -3342, -10525}; + +const int16_t *const int16xint8_dilation_3_output_ref = int16xint8_dilation_3_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_mult_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_mult_data.h deleted file mode 100644 index ec411f2c..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_mult_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int32_t int16xint8_dilation_3_output_mult[4] = {1329225195, 1440392595, 1414304507, 1407575743}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_multiplier.h new file mode 100644 index 00000000..7610256d --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_multiplier.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_dilation_3_output_multiplier[4] = {1850194896, 1898755970, 2002272360, 2039348437}; + +const int32_t *const int16xint8_dilation_3_output_mult = int16xint8_dilation_3_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_ref_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_ref_data.h deleted file mode 100644 index 2eab85ad..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_ref_data.h +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int16_t int16xint8_dilation_3_output_ref[224] = { - 2962, 6087, -4248, 21, 7163, -13335, -13335, -12464, 11408, -8555, 1739, -13276, 2623, 10128, - 14607, 3068, 6448, -5758, 25446, -2739, -13335, 20540, -6284, -1581, -1909, 3074, -4739, -8973, - 3424, -6535, -2345, 5268, 12933, 20342, 12750, -13335, -13335, 20859, 246, -11249, 9978, -5309, - 1394, -5438, 8037, 21868, -13335, -12704, -1316, 3181, 13854, 3625, -13335, 10846, -9617, -13335, - 10740, 2283, 500, -13316, 10407, 15637, 82, 32767, 29118, 6282, 29519, -2632, -13335, 14193, - -4053, -13335, -13335, -13335, -5945, -13335, 9560, 19275, 18834, -5881, 15015, 16059, 8670, -13335, - -13335, -5617, 22252, -10352, -13335, -13335, 17123, -13335, -7671, 32767, 25101, -13335, 16104, 1795, - -13335, -13335, 32767, 24132, -3473, -13335, -732, 3661, 1315, -6446, -3290, 2386, -9613, 8496, - 16327, -7620, -1464, -13335, 24348, 32767, 15469, -13335, 25712, 11476, -1252, 25368, 7300, -13335, - -13335, 2916, -13335, 2799, -13335, -5435, -13335, 1185, 29575, -13335, 19556, -8850, 23985, -13335, - -2549, 23635, -13335, -13335, -13335, 26734, -13335, -13335, -7638, -5658, 14307, -13335, -6115, 5025, - -10309, -13335, 8619, -5277, -9559, 15901, 27006, 9819, 32767, -9660, -5452, 5446, -10532, -13225, - -7899, 8376, -3925, 2592, -11210, -13335, 11055, -13335, 15579, 10788, 3760, -13335, -12757, -7, - 5251, -10335, -13335, -13335, -13335, 27955, -7597, 32767, -3987, -13335, -13335, 9775, -12446, -13335, - -596, -700, -8101, -357, 23420, 1934, -12290, -13335, -13335, 30708, -13335, -4712, 11240, -13335, - 7854, -8657, -13227, -8350, 15259, -13335, -12426, 16133, 9126, -3697, 13629, 12924, 10638, -6040}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_shift.h new file mode 100644 index 00000000..582d9e47 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_dilation_3_output_shift[4] = {-9, -9, -9, -9}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_shift_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_shift_data.h deleted file mode 100644 index b9f24c0b..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/output_shift_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int32_t int16xint8_dilation_3_output_shift[4] = {-8, -8, -8, -8}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/test_data.h index 8102687f..33835748 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/test_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/test_data.h @@ -1,9 +1,7 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#include "biases_data.h" +#include "bias.h" #include "config_data.h" -#include "input_data.h" -#include "output_mult_data.h" -#include "output_ref_data.h" -#include "output_shift_data.h" -#include "weights_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/weights.h new file mode 100644 index 00000000..4c3f4813 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/weights.h @@ -0,0 +1,11 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8_dilation_3_weights[96] = { + 123, -6, 49, 119, 111, -98, 21, 4, 84, 127, -66, -50, -78, 82, 115, -112, -64, -12, 40, 13, + -50, -34, -3, -89, 66, 53, -44, 118, -115, -54, 66, -23, 127, -28, -74, 98, 34, 91, -4, -107, + 17, -64, -93, -98, 59, 70, 101, 109, 127, -103, -31, -51, 36, 73, -11, 93, -25, 33, -105, -89, + 57, 108, 52, 46, 77, -52, -71, 3, -26, 116, -48, -71, 96, -45, -119, 96, 125, 72, -46, 66, + 12, 101, 127, 83, 47, -109, 24, 94, -101, 66, -16, -126, -42, -110, -35, -110}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/weights_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/weights_data.h deleted file mode 100644 index 04685c9b..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_dilation_3/weights_data.h +++ /dev/null @@ -1,11 +0,0 @@ -// Generated by generate_test_data.py using tensorflow version 2.10.0 (Keras version 2.10.0). -// Interpreter from tensorflow version 2.10.0 and revision upstream/v2.10.0-0-g359c3cdfc5f. -#pragma once -#include - -const int8_t int16xint8_dilation_3_weights[96] = { - -48, 109, -101, -103, 38, 74, -50, -117, 66, -121, 6, -69, -2, -43, 35, 105, 41, 112, 127, 61, - -53, -119, -28, 23, 76, 55, -63, -122, -101, -46, -9, 56, 23, 127, -88, 92, -103, -41, -109, 32, - 25, 98, -91, -8, 29, -57, -95, 61, 81, -7, -127, 117, -10, 18, 40, 68, -15, -125, -30, 48, - -104, 66, 101, -101, -84, 14, -19, 106, -124, -34, -113, 78, 2, -83, 15, 60, 16, 63, -59, -77, - -52, 84, 115, 94, 104, 12, 15, 114, -84, 47, -78, 90, 96, -43, -127, -51}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/bias.h new file mode 100644 index 00000000..2f83b5bf --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/bias.h @@ -0,0 +1,9 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int64_t int16xint8_spill_bias[9] = + {-884417, 3945708, 3406942, 2133137, 3248303, 3305055, -1536011, -3483503, -3626630}; + +const int64_t *const int16xint8_spill_biases = int16xint8_spill_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/biases_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/biases_data.h deleted file mode 100644 index e6f7ade2..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/biases_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int64_t *int16xint8_spill_biases = NULL; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/config_data.h index 7aa2ee73..8d68e6e3 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/config_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/config_data.h @@ -1,24 +1,27 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. #pragma once -#define INT16XINT8_SPILL_OUT_CH 9 #define INT16XINT8_SPILL_IN_CH 55 +#define INT16XINT8_SPILL_OUT_CH 9 #define INT16XINT8_SPILL_INPUT_W 10 #define INT16XINT8_SPILL_INPUT_H 8 -#define INT16XINT8_SPILL_DST_SIZE 90 -#define INT16XINT8_SPILL_INPUT_SIZE 4400 -#define INT16XINT8_SPILL_OUT_ACTIVATION_MIN 32667 -#define INT16XINT8_SPILL_OUT_ACTIVATION_MAX 32767 -#define INT16XINT8_SPILL_INPUT_BATCHES 1 #define INT16XINT8_SPILL_FILTER_X 9 #define INT16XINT8_SPILL_FILTER_Y 4 +#define INT16XINT8_SPILL_PADDING VALID +#define INT16XINT8_SPILL_INPUT_MIN 32667 +#define INT16XINT8_SPILL_INPUT_MAX 32767 +#define INT16XINT8_SPILL_OUT_ACTIVATION_MIN 32667 #define INT16XINT8_SPILL_STRIDE_X 1 #define INT16XINT8_SPILL_STRIDE_Y 1 +#define INT16XINT8_SPILL_DILATION_X 1 +#define INT16XINT8_SPILL_DILATION_Y 1 +#define INT16XINT8_SPILL_BATCH_SIZE 1 +#define INT16XINT8_SPILL_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8_SPILL_INPUT_BATCHES 1 #define INT16XINT8_SPILL_PAD_X 0 #define INT16XINT8_SPILL_PAD_Y 0 -#define INT16XINT8_SPILL_OUTPUT_W 2 #define INT16XINT8_SPILL_OUTPUT_H 5 +#define INT16XINT8_SPILL_OUTPUT_W 2 +#define INT16XINT8_SPILL_DST_SIZE 90 #define INT16XINT8_SPILL_INPUT_OFFSET 0 #define INT16XINT8_SPILL_OUTPUT_OFFSET 0 -#define INT16XINT8_SPILL_DILATION_X 1 -#define INT16XINT8_SPILL_DILATION_Y 1 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/input.h new file mode 100644 index 00000000..f802f4ab --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/input.h @@ -0,0 +1,281 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_spill_input[4400] = { + 32735, 32721, 32695, 32724, 32737, 32709, 32684, 32738, 32751, 32759, 32684, 32742, 32752, 32692, 32683, 32727, + 32752, 32696, 32765, 32724, 32730, 32757, 32685, 32715, 32748, 32743, 32700, 32669, 32755, 32752, 32764, 32671, + 32706, 32717, 32717, 32710, 32719, 32728, 32677, 32706, 32704, 32708, 32693, 32748, 32732, 32692, 32691, 32723, + 32733, 32743, 32670, 32722, 32724, 32706, 32764, 32693, 32679, 32762, 32726, 32756, 32675, 32765, 32722, 32723, + 32716, 32753, 32674, 32706, 32745, 32708, 32730, 32723, 32671, 32682, 32693, 32735, 32707, 32752, 32736, 32762, + 32732, 32742, 32746, 32677, 32729, 32764, 32722, 32695, 32710, 32680, 32762, 32695, 32670, 32690, 32718, 32730, + 32718, 32748, 32707, 32753, 32671, 32731, 32679, 32697, 32713, 32700, 32750, 32685, 32684, 32719, 32686, 32698, + 32708, 32739, 32715, 32708, 32673, 32739, 32678, 32763, 32755, 32672, 32739, 32760, 32687, 32667, 32738, 32688, + 32723, 32731, 32722, 32721, 32693, 32699, 32765, 32715, 32718, 32746, 32714, 32705, 32678, 32765, 32764, 32740, + 32710, 32680, 32764, 32667, 32692, 32722, 32747, 32703, 32716, 32757, 32718, 32674, 32676, 32675, 32691, 32755, + 32702, 32732, 32715, 32753, 32746, 32683, 32689, 32689, 32728, 32685, 32687, 32711, 32730, 32678, 32693, 32738, + 32727, 32706, 32672, 32745, 32699, 32758, 32755, 32669, 32737, 32740, 32748, 32766, 32737, 32763, 32740, 32698, + 32729, 32719, 32692, 32692, 32692, 32740, 32705, 32694, 32755, 32676, 32744, 32713, 32715, 32689, 32672, 32682, + 32678, 32724, 32748, 32669, 32730, 32689, 32751, 32683, 32701, 32767, 32705, 32732, 32688, 32703, 32751, 32758, + 32752, 32707, 32709, 32731, 32750, 32710, 32683, 32712, 32727, 32714, 32753, 32738, 32718, 32715, 32741, 32713, + 32690, 32741, 32670, 32737, 32729, 32713, 32674, 32715, 32745, 32713, 32716, 32689, 32685, 32732, 32739, 32754, + 32669, 32724, 32742, 32705, 32762, 32762, 32713, 32679, 32711, 32678, 32746, 32711, 32742, 32752, 32710, 32699, + 32706, 32761, 32767, 32675, 32723, 32680, 32744, 32676, 32671, 32739, 32686, 32729, 32752, 32718, 32722, 32764, + 32692, 32711, 32712, 32669, 32718, 32695, 32708, 32750, 32760, 32726, 32715, 32751, 32698, 32737, 32708, 32742, + 32753, 32746, 32701, 32733, 32691, 32721, 32714, 32759, 32764, 32678, 32759, 32692, 32730, 32699, 32755, 32714, + 32688, 32679, 32696, 32703, 32765, 32673, 32705, 32749, 32722, 32741, 32677, 32735, 32727, 32750, 32726, 32694, + 32730, 32710, 32765, 32672, 32765, 32706, 32765, 32707, 32728, 32760, 32744, 32724, 32741, 32710, 32744, 32748, + 32731, 32689, 32716, 32739, 32718, 32692, 32692, 32727, 32675, 32702, 32715, 32764, 32733, 32671, 32685, 32679, + 32708, 32766, 32720, 32697, 32715, 32679, 32727, 32683, 32754, 32672, 32744, 32706, 32691, 32695, 32681, 32719, + 32759, 32685, 32677, 32724, 32756, 32727, 32685, 32753, 32748, 32727, 32720, 32690, 32720, 32687, 32684, 32756, + 32717, 32682, 32720, 32674, 32749, 32708, 32681, 32684, 32724, 32760, 32741, 32709, 32678, 32757, 32751, 32687, + 32695, 32761, 32695, 32740, 32722, 32686, 32688, 32748, 32721, 32756, 32765, 32732, 32742, 32751, 32762, 32746, + 32727, 32746, 32737, 32728, 32724, 32675, 32702, 32718, 32697, 32683, 32736, 32674, 32680, 32737, 32716, 32683, + 32728, 32713, 32725, 32697, 32765, 32697, 32677, 32726, 32692, 32701, 32737, 32708, 32717, 32746, 32733, 32691, + 32730, 32734, 32728, 32704, 32708, 32727, 32749, 32764, 32695, 32692, 32749, 32695, 32731, 32738, 32715, 32714, + 32735, 32736, 32704, 32669, 32728, 32691, 32722, 32765, 32715, 32667, 32694, 32697, 32763, 32696, 32670, 32721, + 32762, 32725, 32758, 32681, 32675, 32742, 32758, 32713, 32753, 32680, 32701, 32672, 32683, 32762, 32763, 32744, + 32763, 32725, 32690, 32744, 32675, 32734, 32671, 32766, 32722, 32752, 32699, 32671, 32718, 32758, 32742, 32694, + 32766, 32717, 32696, 32747, 32682, 32727, 32694, 32762, 32765, 32698, 32737, 32728, 32756, 32744, 32670, 32706, + 32759, 32755, 32672, 32714, 32746, 32743, 32730, 32713, 32691, 32706, 32675, 32676, 32706, 32746, 32709, 32667, + 32708, 32750, 32679, 32728, 32755, 32756, 32729, 32737, 32694, 32700, 32713, 32756, 32741, 32733, 32730, 32715, + 32741, 32696, 32708, 32701, 32677, 32681, 32719, 32736, 32761, 32762, 32746, 32764, 32703, 32677, 32678, 32738, + 32670, 32710, 32692, 32765, 32691, 32758, 32733, 32719, 32754, 32760, 32697, 32760, 32714, 32672, 32681, 32680, + 32722, 32744, 32731, 32743, 32721, 32736, 32683, 32762, 32693, 32684, 32672, 32734, 32714, 32748, 32711, 32743, + 32677, 32726, 32713, 32685, 32681, 32720, 32763, 32715, 32752, 32749, 32713, 32700, 32681, 32730, 32755, 32699, + 32676, 32709, 32726, 32670, 32715, 32726, 32762, 32757, 32672, 32757, 32759, 32713, 32699, 32757, 32673, 32739, + 32673, 32712, 32680, 32678, 32751, 32705, 32750, 32766, 32681, 32759, 32709, 32674, 32735, 32744, 32762, 32724, + 32701, 32753, 32686, 32731, 32669, 32690, 32717, 32672, 32739, 32685, 32698, 32680, 32677, 32699, 32754, 32676, + 32704, 32682, 32732, 32719, 32749, 32686, 32746, 32686, 32726, 32692, 32698, 32758, 32704, 32723, 32667, 32708, + 32677, 32712, 32740, 32673, 32747, 32760, 32745, 32749, 32672, 32720, 32696, 32691, 32735, 32762, 32676, 32710, + 32766, 32751, 32710, 32712, 32742, 32732, 32695, 32737, 32695, 32732, 32765, 32734, 32668, 32734, 32723, 32695, + 32753, 32693, 32686, 32726, 32723, 32761, 32756, 32721, 32688, 32732, 32672, 32673, 32740, 32702, 32727, 32756, + 32680, 32687, 32717, 32725, 32737, 32746, 32671, 32710, 32750, 32764, 32751, 32741, 32677, 32713, 32762, 32680, + 32742, 32697, 32724, 32725, 32735, 32706, 32684, 32684, 32712, 32741, 32714, 32681, 32711, 32767, 32727, 32740, + 32709, 32758, 32722, 32755, 32740, 32694, 32755, 32739, 32734, 32748, 32668, 32735, 32742, 32700, 32703, 32720, + 32726, 32679, 32760, 32683, 32727, 32698, 32700, 32696, 32751, 32705, 32669, 32701, 32729, 32684, 32743, 32742, + 32695, 32709, 32698, 32730, 32733, 32694, 32732, 32710, 32732, 32728, 32762, 32692, 32675, 32672, 32743, 32762, + 32735, 32747, 32734, 32690, 32688, 32705, 32744, 32711, 32756, 32766, 32734, 32704, 32717, 32679, 32684, 32760, + 32711, 32733, 32708, 32698, 32673, 32720, 32671, 32702, 32673, 32710, 32689, 32763, 32722, 32717, 32726, 32705, + 32753, 32697, 32707, 32743, 32733, 32694, 32734, 32685, 32669, 32713, 32718, 32674, 32730, 32744, 32762, 32747, + 32762, 32767, 32692, 32723, 32676, 32682, 32737, 32749, 32757, 32715, 32680, 32672, 32678, 32753, 32749, 32754, + 32739, 32702, 32725, 32686, 32693, 32700, 32724, 32676, 32696, 32686, 32734, 32754, 32682, 32756, 32707, 32703, + 32764, 32755, 32704, 32764, 32685, 32718, 32725, 32707, 32729, 32695, 32744, 32756, 32701, 32729, 32734, 32692, + 32689, 32725, 32761, 32730, 32741, 32716, 32713, 32720, 32724, 32741, 32724, 32685, 32746, 32733, 32699, 32753, + 32672, 32729, 32755, 32675, 32748, 32677, 32673, 32667, 32670, 32743, 32673, 32701, 32687, 32699, 32701, 32742, + 32697, 32707, 32749, 32691, 32669, 32714, 32734, 32691, 32723, 32711, 32733, 32758, 32727, 32688, 32730, 32691, + 32710, 32704, 32689, 32758, 32756, 32753, 32721, 32688, 32680, 32752, 32686, 32749, 32735, 32698, 32707, 32757, + 32707, 32711, 32758, 32673, 32669, 32758, 32718, 32765, 32712, 32721, 32753, 32699, 32668, 32691, 32673, 32711, + 32692, 32744, 32764, 32745, 32723, 32688, 32744, 32730, 32709, 32687, 32747, 32743, 32724, 32737, 32677, 32722, + 32740, 32681, 32749, 32744, 32739, 32742, 32765, 32730, 32700, 32679, 32718, 32698, 32750, 32703, 32740, 32748, + 32702, 32702, 32717, 32757, 32728, 32716, 32763, 32679, 32755, 32715, 32725, 32765, 32714, 32734, 32749, 32743, + 32672, 32733, 32712, 32722, 32684, 32675, 32765, 32761, 32766, 32753, 32698, 32711, 32707, 32763, 32721, 32755, + 32700, 32694, 32705, 32694, 32690, 32718, 32728, 32761, 32703, 32711, 32724, 32673, 32763, 32722, 32712, 32726, + 32706, 32690, 32755, 32684, 32673, 32762, 32737, 32707, 32723, 32678, 32744, 32762, 32708, 32670, 32733, 32684, + 32757, 32756, 32708, 32751, 32717, 32738, 32706, 32698, 32736, 32675, 32710, 32755, 32713, 32714, 32684, 32760, + 32741, 32722, 32753, 32730, 32694, 32674, 32757, 32670, 32706, 32672, 32674, 32744, 32686, 32676, 32708, 32743, + 32668, 32750, 32765, 32750, 32738, 32737, 32701, 32720, 32707, 32689, 32767, 32726, 32691, 32690, 32719, 32708, + 32760, 32759, 32699, 32688, 32738, 32730, 32684, 32683, 32706, 32761, 32684, 32717, 32716, 32742, 32703, 32766, + 32693, 32679, 32668, 32763, 32765, 32761, 32706, 32704, 32669, 32707, 32764, 32721, 32752, 32676, 32756, 32720, + 32763, 32747, 32717, 32742, 32744, 32762, 32726, 32760, 32716, 32765, 32753, 32745, 32715, 32691, 32702, 32674, + 32756, 32739, 32745, 32703, 32701, 32720, 32672, 32728, 32670, 32745, 32670, 32765, 32681, 32742, 32697, 32750, + 32701, 32680, 32671, 32736, 32680, 32738, 32694, 32724, 32736, 32672, 32760, 32754, 32687, 32745, 32678, 32688, + 32767, 32692, 32729, 32748, 32760, 32709, 32763, 32752, 32715, 32756, 32712, 32758, 32746, 32685, 32732, 32670, + 32695, 32738, 32745, 32672, 32676, 32762, 32703, 32736, 32726, 32750, 32722, 32726, 32760, 32682, 32686, 32688, + 32760, 32704, 32692, 32690, 32711, 32706, 32729, 32744, 32668, 32695, 32737, 32675, 32726, 32688, 32733, 32680, + 32763, 32685, 32676, 32716, 32742, 32719, 32669, 32678, 32746, 32684, 32713, 32753, 32709, 32754, 32762, 32757, + 32717, 32727, 32669, 32747, 32668, 32723, 32766, 32736, 32695, 32685, 32711, 32729, 32715, 32727, 32673, 32675, + 32692, 32692, 32745, 32728, 32678, 32683, 32732, 32693, 32753, 32760, 32729, 32757, 32743, 32764, 32733, 32757, + 32714, 32680, 32762, 32704, 32757, 32686, 32735, 32717, 32676, 32711, 32713, 32744, 32737, 32699, 32742, 32714, + 32715, 32690, 32760, 32672, 32682, 32694, 32702, 32682, 32696, 32724, 32756, 32685, 32708, 32698, 32714, 32763, + 32755, 32737, 32726, 32729, 32671, 32736, 32698, 32699, 32702, 32683, 32766, 32687, 32757, 32729, 32732, 32682, + 32758, 32745, 32704, 32713, 32757, 32710, 32736, 32697, 32671, 32715, 32701, 32706, 32722, 32669, 32743, 32695, + 32688, 32674, 32721, 32686, 32713, 32701, 32694, 32722, 32672, 32681, 32716, 32723, 32691, 32748, 32712, 32688, + 32686, 32703, 32682, 32726, 32726, 32669, 32698, 32758, 32741, 32670, 32725, 32671, 32712, 32732, 32670, 32705, + 32678, 32727, 32705, 32676, 32701, 32708, 32714, 32758, 32764, 32701, 32752, 32674, 32709, 32701, 32741, 32698, + 32732, 32718, 32687, 32756, 32704, 32755, 32700, 32697, 32749, 32749, 32762, 32680, 32698, 32726, 32684, 32709, + 32742, 32668, 32765, 32731, 32765, 32685, 32750, 32668, 32734, 32749, 32727, 32715, 32717, 32685, 32714, 32698, + 32685, 32677, 32736, 32757, 32709, 32736, 32708, 32679, 32766, 32706, 32698, 32750, 32686, 32740, 32687, 32763, + 32725, 32744, 32716, 32765, 32687, 32704, 32707, 32695, 32761, 32721, 32673, 32737, 32719, 32704, 32707, 32709, + 32721, 32755, 32683, 32681, 32685, 32685, 32719, 32670, 32719, 32681, 32720, 32711, 32718, 32704, 32760, 32749, + 32747, 32717, 32761, 32736, 32705, 32672, 32723, 32717, 32757, 32710, 32765, 32720, 32700, 32752, 32753, 32757, + 32745, 32737, 32702, 32767, 32714, 32712, 32730, 32719, 32738, 32687, 32762, 32726, 32684, 32706, 32671, 32726, + 32693, 32728, 32694, 32688, 32690, 32682, 32703, 32719, 32742, 32713, 32758, 32687, 32684, 32714, 32711, 32671, + 32723, 32718, 32710, 32670, 32715, 32761, 32699, 32695, 32754, 32738, 32764, 32741, 32730, 32736, 32679, 32733, + 32694, 32675, 32733, 32748, 32734, 32734, 32718, 32761, 32668, 32687, 32716, 32721, 32669, 32758, 32686, 32738, + 32726, 32738, 32694, 32679, 32710, 32755, 32733, 32728, 32738, 32763, 32724, 32737, 32732, 32679, 32688, 32690, + 32740, 32750, 32744, 32677, 32726, 32710, 32739, 32762, 32719, 32736, 32718, 32675, 32723, 32762, 32763, 32751, + 32724, 32764, 32673, 32719, 32683, 32744, 32720, 32740, 32701, 32764, 32668, 32744, 32733, 32708, 32748, 32748, + 32764, 32693, 32701, 32756, 32711, 32752, 32730, 32675, 32721, 32728, 32735, 32748, 32702, 32711, 32758, 32695, + 32747, 32766, 32678, 32671, 32690, 32758, 32680, 32756, 32721, 32764, 32767, 32672, 32694, 32726, 32683, 32669, + 32740, 32766, 32756, 32690, 32741, 32709, 32695, 32757, 32693, 32722, 32670, 32722, 32766, 32669, 32743, 32734, + 32761, 32728, 32701, 32712, 32738, 32667, 32733, 32752, 32678, 32684, 32742, 32689, 32687, 32711, 32746, 32708, + 32714, 32756, 32733, 32740, 32687, 32680, 32727, 32738, 32719, 32764, 32710, 32681, 32726, 32757, 32690, 32691, + 32686, 32740, 32739, 32766, 32683, 32737, 32671, 32676, 32687, 32699, 32704, 32760, 32723, 32716, 32672, 32765, + 32709, 32758, 32692, 32743, 32752, 32747, 32697, 32731, 32689, 32767, 32721, 32766, 32692, 32669, 32686, 32694, + 32707, 32730, 32753, 32752, 32756, 32756, 32729, 32766, 32737, 32752, 32759, 32730, 32689, 32698, 32680, 32692, + 32733, 32672, 32688, 32757, 32694, 32721, 32710, 32692, 32748, 32726, 32714, 32746, 32743, 32758, 32752, 32682, + 32697, 32725, 32709, 32692, 32706, 32753, 32733, 32694, 32682, 32710, 32722, 32714, 32722, 32751, 32712, 32707, + 32761, 32671, 32697, 32749, 32740, 32737, 32684, 32727, 32755, 32690, 32732, 32729, 32733, 32676, 32715, 32695, + 32697, 32684, 32738, 32729, 32716, 32728, 32718, 32730, 32697, 32762, 32679, 32679, 32680, 32753, 32745, 32733, + 32732, 32721, 32732, 32715, 32731, 32697, 32765, 32693, 32734, 32750, 32764, 32737, 32724, 32680, 32766, 32739, + 32747, 32748, 32695, 32765, 32674, 32688, 32743, 32733, 32683, 32702, 32674, 32695, 32695, 32700, 32685, 32700, + 32677, 32749, 32751, 32726, 32667, 32715, 32749, 32701, 32687, 32766, 32697, 32699, 32706, 32730, 32670, 32756, + 32733, 32723, 32708, 32746, 32697, 32741, 32667, 32717, 32723, 32680, 32691, 32761, 32742, 32761, 32740, 32695, + 32756, 32746, 32706, 32706, 32673, 32670, 32754, 32753, 32704, 32674, 32756, 32754, 32703, 32706, 32752, 32731, + 32713, 32751, 32725, 32719, 32708, 32681, 32668, 32689, 32740, 32723, 32737, 32692, 32759, 32690, 32707, 32673, + 32759, 32748, 32685, 32679, 32682, 32730, 32710, 32721, 32691, 32676, 32751, 32711, 32703, 32736, 32723, 32750, + 32713, 32748, 32670, 32684, 32675, 32683, 32723, 32734, 32697, 32761, 32693, 32742, 32682, 32713, 32727, 32720, + 32677, 32670, 32762, 32670, 32748, 32764, 32721, 32738, 32681, 32740, 32765, 32709, 32728, 32717, 32673, 32680, + 32750, 32696, 32718, 32759, 32759, 32760, 32748, 32672, 32682, 32701, 32712, 32714, 32764, 32669, 32744, 32677, + 32701, 32763, 32698, 32701, 32748, 32671, 32674, 32738, 32694, 32700, 32703, 32734, 32732, 32730, 32720, 32729, + 32737, 32758, 32730, 32668, 32725, 32687, 32713, 32703, 32668, 32681, 32695, 32744, 32752, 32673, 32764, 32706, + 32764, 32676, 32697, 32720, 32712, 32702, 32717, 32705, 32702, 32759, 32706, 32730, 32692, 32694, 32731, 32674, + 32676, 32701, 32763, 32698, 32674, 32679, 32676, 32758, 32719, 32696, 32695, 32756, 32694, 32715, 32693, 32682, + 32718, 32749, 32680, 32761, 32728, 32755, 32742, 32761, 32698, 32762, 32748, 32740, 32671, 32677, 32695, 32743, + 32685, 32709, 32759, 32747, 32667, 32743, 32696, 32734, 32746, 32708, 32711, 32737, 32727, 32756, 32753, 32716, + 32751, 32686, 32668, 32751, 32692, 32749, 32673, 32763, 32739, 32742, 32738, 32676, 32682, 32736, 32705, 32723, + 32727, 32757, 32722, 32761, 32700, 32738, 32729, 32712, 32719, 32764, 32747, 32671, 32731, 32693, 32671, 32684, + 32752, 32694, 32739, 32738, 32736, 32754, 32766, 32758, 32672, 32731, 32717, 32681, 32713, 32723, 32750, 32685, + 32672, 32752, 32703, 32673, 32671, 32668, 32696, 32748, 32754, 32732, 32762, 32741, 32733, 32710, 32676, 32667, + 32737, 32680, 32757, 32719, 32753, 32733, 32687, 32714, 32725, 32713, 32691, 32724, 32731, 32696, 32674, 32683, + 32691, 32702, 32691, 32722, 32696, 32743, 32717, 32752, 32706, 32678, 32746, 32677, 32729, 32751, 32757, 32728, + 32707, 32711, 32693, 32674, 32704, 32743, 32679, 32735, 32737, 32702, 32755, 32765, 32682, 32710, 32680, 32751, + 32757, 32758, 32711, 32727, 32738, 32728, 32686, 32691, 32671, 32670, 32667, 32730, 32717, 32732, 32705, 32747, + 32679, 32696, 32681, 32732, 32695, 32711, 32680, 32675, 32708, 32708, 32748, 32762, 32738, 32703, 32710, 32706, + 32687, 32723, 32696, 32761, 32693, 32745, 32737, 32669, 32739, 32723, 32750, 32699, 32737, 32708, 32765, 32757, + 32731, 32723, 32735, 32707, 32757, 32764, 32733, 32762, 32749, 32708, 32708, 32742, 32721, 32668, 32679, 32674, + 32762, 32742, 32701, 32763, 32751, 32735, 32761, 32668, 32751, 32738, 32679, 32681, 32765, 32720, 32764, 32698, + 32684, 32743, 32723, 32675, 32687, 32751, 32675, 32691, 32724, 32670, 32749, 32684, 32719, 32704, 32766, 32703, + 32672, 32681, 32724, 32728, 32722, 32696, 32714, 32729, 32741, 32686, 32766, 32703, 32760, 32674, 32751, 32700, + 32766, 32716, 32676, 32691, 32756, 32715, 32766, 32736, 32765, 32694, 32765, 32672, 32738, 32721, 32749, 32679, + 32724, 32698, 32706, 32695, 32756, 32723, 32733, 32738, 32681, 32709, 32764, 32722, 32760, 32752, 32674, 32706, + 32741, 32766, 32745, 32670, 32759, 32732, 32767, 32678, 32762, 32684, 32670, 32715, 32674, 32688, 32732, 32749, + 32713, 32707, 32757, 32702, 32748, 32719, 32740, 32679, 32737, 32671, 32755, 32731, 32725, 32725, 32693, 32751, + 32733, 32687, 32706, 32670, 32726, 32753, 32742, 32715, 32761, 32724, 32672, 32757, 32742, 32747, 32747, 32689, + 32725, 32677, 32724, 32725, 32757, 32702, 32699, 32726, 32749, 32700, 32713, 32749, 32762, 32674, 32766, 32707, + 32725, 32765, 32685, 32699, 32694, 32761, 32699, 32677, 32687, 32698, 32677, 32767, 32714, 32752, 32692, 32724, + 32744, 32694, 32695, 32707, 32730, 32739, 32689, 32719, 32701, 32751, 32730, 32750, 32691, 32669, 32691, 32756, + 32731, 32674, 32689, 32743, 32686, 32718, 32681, 32695, 32672, 32750, 32724, 32679, 32708, 32699, 32759, 32715, + 32731, 32712, 32746, 32708, 32702, 32736, 32699, 32759, 32739, 32710, 32736, 32696, 32734, 32676, 32728, 32719, + 32703, 32725, 32678, 32703, 32756, 32677, 32668, 32726, 32754, 32761, 32739, 32767, 32755, 32700, 32679, 32753, + 32760, 32693, 32750, 32730, 32705, 32711, 32745, 32763, 32692, 32762, 32738, 32736, 32715, 32694, 32681, 32707, + 32684, 32748, 32695, 32763, 32705, 32669, 32696, 32707, 32701, 32680, 32676, 32669, 32746, 32668, 32670, 32689, + 32705, 32695, 32735, 32750, 32751, 32747, 32694, 32751, 32720, 32721, 32763, 32701, 32720, 32716, 32669, 32710, + 32694, 32731, 32715, 32727, 32732, 32761, 32747, 32694, 32727, 32679, 32735, 32696, 32717, 32709, 32731, 32706, + 32742, 32674, 32671, 32673, 32756, 32677, 32757, 32718, 32690, 32694, 32760, 32751, 32698, 32697, 32755, 32668, + 32691, 32713, 32700, 32741, 32683, 32759, 32680, 32690, 32723, 32751, 32711, 32740, 32722, 32700, 32692, 32677, + 32677, 32697, 32699, 32760, 32720, 32743, 32670, 32680, 32703, 32758, 32724, 32763, 32698, 32711, 32718, 32712, + 32756, 32759, 32669, 32736, 32727, 32667, 32714, 32740, 32741, 32706, 32684, 32707, 32759, 32676, 32725, 32685, + 32737, 32745, 32745, 32742, 32706, 32696, 32727, 32713, 32733, 32767, 32714, 32753, 32702, 32762, 32754, 32691, + 32756, 32718, 32691, 32678, 32749, 32717, 32730, 32693, 32764, 32711, 32714, 32679, 32679, 32712, 32677, 32712, + 32696, 32690, 32720, 32727, 32671, 32691, 32735, 32719, 32736, 32741, 32698, 32680, 32725, 32713, 32678, 32692, + 32717, 32685, 32695, 32690, 32676, 32668, 32713, 32732, 32754, 32714, 32693, 32745, 32671, 32727, 32743, 32757, + 32689, 32739, 32747, 32672, 32737, 32692, 32749, 32744, 32706, 32691, 32703, 32676, 32752, 32714, 32697, 32673, + 32752, 32688, 32721, 32714, 32679, 32730, 32743, 32734, 32764, 32739, 32722, 32762, 32671, 32729, 32764, 32731, + 32731, 32750, 32723, 32742, 32756, 32716, 32684, 32712, 32689, 32682, 32722, 32691, 32698, 32692, 32693, 32708, + 32725, 32710, 32688, 32707, 32714, 32711, 32743, 32733, 32763, 32692, 32715, 32726, 32677, 32764, 32756, 32713, + 32720, 32708, 32686, 32757, 32687, 32677, 32700, 32750, 32735, 32716, 32721, 32682, 32704, 32761, 32721, 32680, + 32743, 32714, 32699, 32720, 32725, 32685, 32736, 32749, 32754, 32740, 32702, 32734, 32715, 32694, 32690, 32749, + 32672, 32719, 32755, 32751, 32673, 32703, 32728, 32729, 32750, 32732, 32678, 32758, 32726, 32688, 32714, 32674, + 32733, 32748, 32707, 32670, 32761, 32762, 32704, 32719, 32753, 32740, 32733, 32677, 32704, 32746, 32694, 32704, + 32751, 32712, 32726, 32749, 32748, 32703, 32679, 32668, 32741, 32687, 32676, 32699, 32746, 32670, 32708, 32670, + 32676, 32723, 32692, 32752, 32702, 32724, 32751, 32711, 32754, 32712, 32722, 32712, 32671, 32708, 32746, 32671, + 32678, 32682, 32698, 32744, 32706, 32719, 32758, 32701, 32753, 32707, 32693, 32689, 32740, 32725, 32759, 32751, + 32752, 32760, 32702, 32764, 32727, 32707, 32680, 32727, 32726, 32693, 32704, 32716, 32718, 32699, 32711, 32767, + 32675, 32752, 32729, 32725, 32755, 32709, 32678, 32690, 32674, 32746, 32689, 32751, 32737, 32745, 32758, 32668, + 32726, 32678, 32698, 32681, 32748, 32727, 32747, 32756, 32674, 32672, 32761, 32728, 32694, 32704, 32764, 32671, + 32700, 32674, 32684, 32694, 32758, 32680, 32733, 32671, 32758, 32715, 32746, 32749, 32749, 32743, 32719, 32700, + 32708, 32740, 32732, 32704, 32717, 32706, 32723, 32690, 32700, 32673, 32730, 32760, 32728, 32673, 32693, 32716, + 32712, 32744, 32699, 32734, 32706, 32737, 32713, 32757, 32726, 32704, 32716, 32690, 32714, 32727, 32764, 32680, + 32761, 32681, 32757, 32672, 32675, 32681, 32758, 32712, 32681, 32721, 32742, 32667, 32711, 32726, 32722, 32693, + 32757, 32681, 32679, 32743, 32714, 32761, 32716, 32695, 32740, 32742, 32709, 32705, 32706, 32748, 32760, 32693, + 32714, 32764, 32719, 32718, 32736, 32743, 32685, 32750, 32762, 32713, 32704, 32703, 32765, 32707, 32737, 32689, + 32741, 32723, 32693, 32702, 32757, 32675, 32756, 32720, 32689, 32723, 32720, 32756, 32752, 32693, 32688, 32690, + 32739, 32670, 32671, 32690, 32759, 32669, 32761, 32728, 32728, 32721, 32708, 32679, 32757, 32687, 32759, 32729, + 32730, 32669, 32747, 32685, 32724, 32721, 32716, 32732, 32697, 32760, 32676, 32766, 32684, 32704, 32690, 32667, + 32750, 32668, 32669, 32676, 32764, 32739, 32716, 32739, 32700, 32763, 32764, 32761, 32693, 32750, 32749, 32681, + 32678, 32694, 32732, 32678, 32749, 32743, 32706, 32692, 32753, 32674, 32718, 32718, 32714, 32751, 32724, 32707, + 32672, 32741, 32745, 32764, 32701, 32685, 32674, 32734, 32705, 32763, 32704, 32697, 32763, 32688, 32678, 32759, + 32698, 32694, 32712, 32737, 32736, 32687, 32757, 32705, 32705, 32760, 32673, 32682, 32697, 32708, 32743, 32720, + 32669, 32688, 32668, 32679, 32742, 32749, 32731, 32684, 32721, 32756, 32755, 32694, 32686, 32699, 32716, 32695, + 32719, 32757, 32752, 32750, 32749, 32678, 32713, 32738, 32733, 32674, 32708, 32724, 32742, 32706, 32706, 32756, + 32680, 32683, 32753, 32734, 32703, 32756, 32716, 32701, 32758, 32719, 32763, 32681, 32740, 32672, 32762, 32702, + 32745, 32738, 32712, 32700, 32747, 32752, 32761, 32725, 32735, 32754, 32700, 32686, 32753, 32724, 32712, 32759, + 32677, 32762, 32672, 32762, 32759, 32755, 32731, 32707, 32688, 32691, 32738, 32760, 32672, 32744, 32707, 32718, + 32738, 32675, 32714, 32729, 32756, 32714, 32753, 32701, 32718, 32738, 32696, 32714, 32687, 32744, 32668, 32705, + 32725, 32710, 32754, 32711, 32682, 32719, 32693, 32669, 32708, 32709, 32669, 32691, 32705, 32729, 32672, 32718, + 32763, 32697, 32763, 32673, 32747, 32729, 32757, 32720, 32744, 32697, 32704, 32727, 32709, 32710, 32739, 32671, + 32705, 32724, 32743, 32688, 32713, 32691, 32733, 32668, 32761, 32753, 32733, 32747, 32685, 32754, 32679, 32732, + 32701, 32675, 32718, 32732, 32710, 32720, 32689, 32738, 32670, 32702, 32745, 32727, 32752, 32754, 32672, 32672, + 32762, 32742, 32691, 32731, 32760, 32750, 32710, 32759, 32692, 32743, 32707, 32728, 32725, 32753, 32712, 32717, + 32754, 32728, 32725, 32681, 32722, 32732, 32750, 32751, 32711, 32737, 32743, 32678, 32747, 32761, 32744, 32717, + 32721, 32738, 32682, 32701, 32681, 32754, 32677, 32725, 32753, 32728, 32724, 32740, 32731, 32758, 32699, 32699, + 32752, 32686, 32671, 32721, 32699, 32731, 32762, 32752, 32713, 32761, 32761, 32767, 32719, 32737, 32766, 32742, + 32687, 32746, 32737, 32760, 32685, 32699, 32701, 32722, 32684, 32683, 32678, 32675, 32710, 32741, 32764, 32706, + 32753, 32709, 32764, 32713, 32680, 32761, 32707, 32763, 32688, 32717, 32682, 32693, 32671, 32676, 32726, 32743, + 32694, 32705, 32742, 32685, 32700, 32714, 32672, 32744, 32755, 32714, 32742, 32765, 32757, 32763, 32734, 32716, + 32760, 32725, 32731, 32698, 32695, 32689, 32684, 32731, 32685, 32756, 32742, 32700, 32748, 32727, 32691, 32714, + 32748, 32677, 32719, 32721, 32761, 32704, 32717, 32761, 32686, 32739, 32741, 32717, 32729, 32671, 32689, 32738, + 32700, 32678, 32713, 32740, 32677, 32685, 32748, 32767, 32677, 32697, 32675, 32669, 32673, 32721, 32699, 32668, + 32705, 32691, 32743, 32697, 32706, 32674, 32740, 32704, 32714, 32733, 32687, 32711, 32697, 32679, 32759, 32766, + 32709, 32686, 32737, 32756, 32709, 32743, 32684, 32752, 32767, 32714, 32746, 32724, 32712, 32766, 32749, 32724, + 32738, 32756, 32751, 32749, 32685, 32697, 32725, 32723, 32765, 32702, 32692, 32701, 32722, 32689, 32744, 32749, + 32728, 32713, 32672, 32717, 32703, 32752, 32706, 32675, 32713, 32738, 32711, 32667, 32760, 32723, 32687, 32702, + 32747, 32713, 32735, 32703, 32676, 32671, 32691, 32707, 32730, 32683, 32696, 32720, 32763, 32696, 32731, 32737, + 32696, 32726, 32765, 32733, 32714, 32672, 32688, 32691, 32670, 32739, 32743, 32765, 32714, 32756, 32681, 32742, + 32755, 32692, 32730, 32690, 32738, 32680, 32692, 32696, 32719, 32680, 32732, 32671, 32673, 32709, 32763, 32731, + 32752, 32694, 32766, 32670, 32691, 32690, 32737, 32713, 32697, 32706, 32754, 32741, 32691, 32684, 32697, 32738, + 32746, 32734, 32730, 32735, 32738, 32671, 32755, 32670, 32719, 32705, 32725, 32702, 32708, 32722, 32706, 32721, + 32699, 32756, 32735, 32761, 32736, 32742, 32760, 32758, 32759, 32672, 32703, 32710, 32686, 32694, 32760, 32670, + 32758, 32741, 32693, 32668, 32757, 32742, 32747, 32761, 32706, 32697, 32703, 32764, 32756, 32673, 32745, 32724, + 32739, 32703, 32681, 32725, 32677, 32691, 32736, 32719, 32766, 32764, 32753, 32703, 32667, 32706, 32681, 32667, + 32669, 32765, 32681, 32727, 32758, 32750, 32729, 32767, 32731, 32716, 32703, 32675, 32719, 32669, 32712, 32755, + 32712, 32757, 32738, 32685, 32694, 32749, 32737, 32725, 32728, 32717, 32711, 32753, 32709, 32676, 32742, 32744, + 32669, 32752, 32709, 32704, 32751, 32679, 32750, 32712, 32677, 32721, 32720, 32746, 32714, 32733, 32750, 32752, + 32721, 32756, 32735, 32717, 32697, 32727, 32698, 32685, 32703, 32682, 32762, 32699, 32685, 32747, 32676, 32763, + 32680, 32708, 32734, 32677, 32714, 32701, 32719, 32730, 32675, 32731, 32721, 32680, 32667, 32669, 32705, 32675, + 32728, 32703, 32760, 32717, 32711, 32725, 32766, 32765, 32751, 32708, 32753, 32749, 32743, 32742, 32715, 32712, + 32711, 32717, 32749, 32681, 32686, 32678, 32717, 32675, 32757, 32723, 32743, 32721, 32753, 32699, 32718, 32757, + 32677, 32674, 32670, 32688, 32675, 32746, 32678, 32724, 32737, 32732, 32765, 32750, 32684, 32712, 32718, 32723, + 32715, 32680, 32696, 32766, 32748, 32728, 32692, 32688, 32756, 32752, 32760, 32668, 32671, 32707, 32748, 32670, + 32693, 32682, 32714, 32723, 32668, 32741, 32732, 32678, 32692, 32701, 32714, 32766, 32691, 32694, 32717, 32760, + 32751, 32713, 32725, 32739, 32739, 32731, 32673, 32720, 32715, 32713, 32708, 32747, 32711, 32714, 32742, 32695, + 32740, 32735, 32724, 32764, 32696, 32741, 32764, 32756, 32702, 32748, 32743, 32698, 32717, 32748, 32698, 32677, + 32745, 32748, 32672, 32685, 32698, 32686, 32722, 32754, 32693, 32683, 32710, 32737, 32749, 32695, 32713, 32672, + 32691, 32690, 32742, 32754, 32750, 32673, 32751, 32681, 32695, 32720, 32691, 32763, 32703, 32694, 32667, 32713, + 32729, 32693, 32764, 32766, 32669, 32699, 32679, 32725, 32725, 32723, 32673, 32698, 32741, 32743, 32707, 32764, + 32720, 32716, 32761, 32721, 32705, 32752, 32674, 32760, 32720, 32733, 32697, 32689, 32743, 32695, 32744, 32674, + 32722, 32685, 32721, 32733, 32699, 32718, 32699, 32748, 32684, 32739, 32690, 32734, 32727, 32721, 32735, 32761, + 32741, 32674, 32694, 32677, 32703, 32688, 32736, 32700, 32706, 32691, 32727, 32698, 32672, 32721, 32767, 32722, + 32713, 32678, 32740, 32688, 32694, 32759, 32720, 32739, 32754, 32691, 32698, 32760, 32696, 32758, 32746, 32676, + 32704, 32668, 32766, 32718, 32701, 32680, 32752, 32682, 32675, 32758, 32722, 32671, 32738, 32747, 32721, 32751, + 32713, 32764, 32682, 32758, 32766, 32688, 32712, 32707, 32694, 32747, 32691, 32713, 32740, 32683, 32697, 32706, + 32766, 32743, 32722, 32762, 32734, 32672, 32752, 32720, 32753, 32732, 32679, 32741, 32710, 32718, 32723, 32754, + 32752, 32701, 32671, 32760, 32755, 32744, 32725, 32717, 32676, 32713, 32756, 32746, 32765, 32736, 32676, 32735, + 32725, 32681, 32757, 32757, 32743, 32765, 32729, 32724, 32710, 32707, 32699, 32735, 32747, 32750, 32673, 32740, + 32728, 32745, 32761, 32761, 32680, 32693, 32693, 32728, 32717, 32701, 32688, 32742, 32736, 32715, 32716, 32715, + 32746, 32730, 32742, 32756, 32673, 32729, 32688, 32704, 32697, 32758, 32740, 32728, 32707, 32674, 32717, 32713, + 32735, 32696, 32676, 32699, 32737, 32706, 32710, 32667, 32723, 32740, 32715, 32673, 32674, 32690, 32766, 32759, + 32730, 32712, 32731, 32681, 32728, 32723, 32762, 32699, 32760, 32712, 32677, 32736, 32756, 32676, 32719, 32701, + 32750, 32763, 32684, 32700, 32708, 32753, 32691, 32727, 32686, 32766, 32704, 32725, 32680, 32738, 32721, 32688, + 32754, 32747, 32752, 32677, 32718, 32748, 32709, 32705, 32745, 32759, 32695, 32743, 32677, 32710, 32686, 32708, + 32762, 32726, 32686, 32739, 32731, 32670, 32669, 32672, 32686, 32760, 32696, 32724, 32681, 32706, 32714, 32693, + 32729, 32699, 32683, 32739, 32729, 32732, 32730, 32671, 32682, 32673, 32689, 32672, 32686, 32716, 32758, 32743, + 32720, 32699, 32713, 32718, 32682, 32689, 32753, 32726, 32764, 32680, 32710, 32755, 32719, 32756, 32736, 32709, + 32738, 32763, 32711, 32726, 32764, 32754, 32725, 32672, 32678, 32711, 32732, 32714, 32766, 32750, 32697, 32673, + 32760, 32755, 32717, 32670, 32670, 32679, 32716, 32715, 32704, 32758, 32755, 32681, 32705, 32758, 32754, 32729, + 32688, 32697, 32757, 32674, 32753, 32757, 32744, 32706, 32745, 32764, 32764, 32718, 32765, 32734, 32688, 32671, + 32729, 32737, 32762, 32731, 32693, 32735, 32667, 32707, 32710, 32730, 32745, 32668, 32703, 32752, 32669, 32675, + 32761, 32729, 32744, 32741, 32741, 32677, 32737, 32744, 32765, 32748, 32749, 32742, 32674, 32711, 32700, 32741, + 32673, 32693, 32694, 32691, 32721, 32748, 32711, 32705, 32676, 32705, 32679, 32733, 32699, 32766, 32693, 32734, + 32672, 32668, 32757, 32692, 32710, 32670, 32692, 32727, 32701, 32733, 32700, 32765, 32717, 32754, 32699, 32754, + 32752, 32752, 32701, 32723, 32762, 32730, 32744, 32724, 32765, 32718, 32763, 32695, 32731, 32673, 32742, 32668, + 32721, 32708, 32668, 32723, 32706, 32694, 32692, 32698, 32752, 32678, 32716, 32677, 32677, 32755, 32746, 32686, + 32684, 32737, 32708, 32721, 32706, 32746, 32738, 32754, 32741, 32699, 32755, 32714, 32763, 32764, 32753, 32757, + 32707, 32740, 32714, 32724, 32758, 32741, 32736, 32761, 32753, 32675, 32758, 32673, 32677, 32713, 32743, 32716, + 32756, 32679, 32754, 32729, 32728, 32729, 32669, 32721, 32764, 32724, 32722, 32688, 32699, 32722, 32739, 32700, + 32748, 32668, 32670, 32742, 32694, 32716, 32679, 32677, 32747, 32745, 32676, 32752, 32703, 32675, 32734, 32668, + 32756, 32742, 32713, 32730, 32735, 32686, 32711, 32686, 32676, 32756, 32766, 32668, 32746, 32749, 32706, 32676, + 32712, 32715, 32763, 32709, 32723, 32716, 32707, 32720, 32718, 32725, 32736, 32754, 32677, 32691, 32753, 32754}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/input_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/input_data.h deleted file mode 100644 index dd1ccfce..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/input_data.h +++ /dev/null @@ -1,281 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int16_t int16xint8_spill_input[4400] = { - 32755, 32727, 32721, 32721, 32701, 32721, 32750, 32682, 32669, 32691, 32714, 32670, 32699, 32722, 32730, 32726, - 32684, 32730, 32734, 32682, 32699, 32743, 32697, 32740, 32677, 32731, 32721, 32667, 32712, 32747, 32674, 32684, - 32751, 32713, 32737, 32672, 32696, 32728, 32761, 32690, 32740, 32687, 32672, 32757, 32691, 32742, 32719, 32687, - 32672, 32672, 32717, 32719, 32753, 32722, 32695, 32695, 32741, 32673, 32701, 32721, 32750, 32739, 32731, 32743, - 32679, 32762, 32678, 32725, 32675, 32716, 32741, 32735, 32757, 32762, 32719, 32709, 32766, 32738, 32694, 32761, - 32702, 32764, 32694, 32758, 32716, 32744, 32736, 32701, 32720, 32766, 32710, 32685, 32730, 32743, 32676, 32756, - 32685, 32692, 32693, 32700, 32715, 32708, 32761, 32693, 32732, 32726, 32674, 32766, 32676, 32680, 32705, 32678, - 32707, 32704, 32713, 32733, 32761, 32753, 32731, 32692, 32731, 32704, 32753, 32667, 32740, 32738, 32755, 32683, - 32673, 32671, 32681, 32723, 32751, 32671, 32766, 32692, 32724, 32764, 32723, 32673, 32679, 32697, 32678, 32761, - 32726, 32698, 32677, 32735, 32690, 32754, 32692, 32752, 32737, 32761, 32674, 32744, 32762, 32731, 32720, 32732, - 32749, 32713, 32691, 32742, 32675, 32707, 32736, 32712, 32681, 32700, 32737, 32752, 32764, 32742, 32725, 32708, - 32732, 32687, 32681, 32680, 32672, 32680, 32760, 32712, 32719, 32689, 32713, 32757, 32710, 32757, 32681, 32704, - 32674, 32670, 32714, 32683, 32740, 32757, 32728, 32751, 32720, 32722, 32725, 32676, 32684, 32720, 32688, 32681, - 32725, 32705, 32679, 32714, 32750, 32758, 32721, 32742, 32760, 32691, 32698, 32761, 32708, 32667, 32670, 32745, - 32740, 32748, 32733, 32727, 32739, 32763, 32716, 32683, 32754, 32669, 32746, 32746, 32696, 32764, 32736, 32720, - 32720, 32683, 32714, 32727, 32756, 32706, 32761, 32691, 32718, 32762, 32692, 32736, 32716, 32733, 32761, 32719, - 32720, 32698, 32710, 32733, 32732, 32722, 32764, 32732, 32690, 32766, 32694, 32667, 32688, 32695, 32689, 32737, - 32706, 32705, 32711, 32676, 32683, 32730, 32685, 32741, 32762, 32742, 32692, 32696, 32674, 32757, 32721, 32762, - 32673, 32673, 32758, 32708, 32758, 32722, 32682, 32674, 32748, 32745, 32688, 32760, 32683, 32756, 32724, 32668, - 32694, 32753, 32687, 32746, 32738, 32680, 32759, 32676, 32688, 32689, 32736, 32702, 32689, 32762, 32713, 32752, - 32679, 32682, 32682, 32677, 32685, 32737, 32695, 32766, 32667, 32759, 32731, 32714, 32668, 32732, 32715, 32700, - 32715, 32755, 32737, 32694, 32729, 32766, 32734, 32762, 32701, 32674, 32726, 32682, 32766, 32748, 32749, 32743, - 32762, 32679, 32713, 32756, 32751, 32677, 32734, 32759, 32727, 32668, 32750, 32695, 32738, 32742, 32702, 32755, - 32698, 32710, 32733, 32745, 32765, 32713, 32680, 32710, 32681, 32763, 32725, 32697, 32668, 32723, 32689, 32711, - 32686, 32743, 32685, 32724, 32750, 32722, 32679, 32751, 32726, 32763, 32686, 32751, 32703, 32668, 32745, 32748, - 32739, 32691, 32673, 32756, 32735, 32727, 32715, 32747, 32734, 32722, 32706, 32716, 32721, 32766, 32702, 32744, - 32704, 32668, 32726, 32763, 32713, 32720, 32676, 32738, 32684, 32672, 32747, 32735, 32680, 32693, 32739, 32748, - 32689, 32718, 32704, 32722, 32676, 32676, 32692, 32756, 32766, 32713, 32713, 32690, 32749, 32754, 32707, 32751, - 32707, 32760, 32699, 32759, 32735, 32696, 32745, 32743, 32736, 32755, 32686, 32766, 32710, 32667, 32712, 32701, - 32733, 32669, 32755, 32756, 32685, 32762, 32737, 32754, 32733, 32728, 32722, 32700, 32690, 32722, 32751, 32668, - 32695, 32737, 32676, 32741, 32724, 32758, 32714, 32684, 32706, 32703, 32699, 32743, 32682, 32719, 32759, 32737, - 32685, 32752, 32757, 32753, 32721, 32748, 32753, 32679, 32760, 32681, 32708, 32691, 32747, 32732, 32708, 32679, - 32678, 32737, 32716, 32700, 32723, 32694, 32707, 32721, 32728, 32725, 32749, 32723, 32722, 32713, 32688, 32675, - 32717, 32764, 32709, 32733, 32738, 32755, 32678, 32676, 32714, 32706, 32689, 32727, 32730, 32720, 32681, 32676, - 32676, 32763, 32692, 32722, 32714, 32694, 32746, 32682, 32723, 32712, 32678, 32742, 32722, 32731, 32761, 32756, - 32677, 32688, 32741, 32729, 32694, 32730, 32722, 32679, 32754, 32674, 32739, 32739, 32700, 32739, 32669, 32730, - 32756, 32744, 32689, 32765, 32682, 32689, 32685, 32680, 32758, 32764, 32678, 32668, 32679, 32743, 32697, 32725, - 32690, 32696, 32763, 32689, 32734, 32737, 32699, 32687, 32675, 32760, 32695, 32692, 32677, 32679, 32706, 32725, - 32693, 32762, 32763, 32675, 32685, 32672, 32748, 32749, 32701, 32746, 32730, 32753, 32731, 32738, 32681, 32677, - 32676, 32687, 32747, 32761, 32759, 32719, 32676, 32733, 32753, 32686, 32686, 32758, 32706, 32703, 32759, 32704, - 32669, 32725, 32744, 32686, 32721, 32764, 32754, 32729, 32731, 32677, 32741, 32728, 32679, 32722, 32678, 32674, - 32672, 32672, 32676, 32681, 32729, 32706, 32726, 32669, 32694, 32677, 32762, 32702, 32745, 32739, 32729, 32702, - 32673, 32739, 32715, 32720, 32723, 32715, 32753, 32704, 32683, 32732, 32763, 32766, 32683, 32724, 32733, 32759, - 32764, 32704, 32724, 32747, 32751, 32719, 32673, 32752, 32765, 32737, 32707, 32677, 32679, 32688, 32681, 32671, - 32721, 32689, 32720, 32708, 32702, 32722, 32707, 32691, 32716, 32710, 32764, 32672, 32762, 32742, 32749, 32749, - 32735, 32753, 32718, 32677, 32753, 32672, 32765, 32699, 32694, 32736, 32728, 32743, 32696, 32739, 32740, 32705, - 32677, 32670, 32758, 32674, 32676, 32766, 32702, 32750, 32696, 32674, 32720, 32725, 32701, 32679, 32760, 32712, - 32714, 32714, 32698, 32669, 32763, 32755, 32669, 32765, 32754, 32735, 32729, 32676, 32682, 32741, 32704, 32698, - 32725, 32748, 32757, 32685, 32748, 32680, 32671, 32718, 32733, 32742, 32737, 32693, 32701, 32675, 32700, 32698, - 32702, 32766, 32685, 32742, 32697, 32728, 32677, 32747, 32678, 32764, 32676, 32731, 32763, 32684, 32720, 32747, - 32695, 32765, 32753, 32726, 32711, 32686, 32734, 32699, 32765, 32704, 32765, 32719, 32690, 32714, 32739, 32763, - 32748, 32761, 32760, 32748, 32763, 32758, 32755, 32757, 32746, 32766, 32672, 32711, 32714, 32691, 32744, 32762, - 32671, 32737, 32752, 32753, 32739, 32687, 32726, 32726, 32750, 32687, 32673, 32754, 32676, 32765, 32690, 32714, - 32762, 32724, 32766, 32733, 32715, 32674, 32715, 32731, 32699, 32674, 32694, 32746, 32743, 32705, 32689, 32668, - 32745, 32718, 32675, 32678, 32743, 32706, 32730, 32679, 32680, 32704, 32692, 32717, 32689, 32761, 32724, 32729, - 32753, 32668, 32762, 32691, 32675, 32702, 32678, 32673, 32711, 32668, 32718, 32675, 32671, 32736, 32729, 32743, - 32692, 32730, 32721, 32710, 32759, 32750, 32731, 32698, 32688, 32699, 32671, 32763, 32673, 32713, 32671, 32749, - 32717, 32694, 32745, 32694, 32694, 32707, 32743, 32705, 32762, 32750, 32750, 32753, 32722, 32689, 32687, 32721, - 32739, 32725, 32738, 32741, 32706, 32702, 32739, 32684, 32727, 32704, 32691, 32682, 32709, 32738, 32760, 32686, - 32736, 32719, 32727, 32673, 32753, 32707, 32684, 32701, 32741, 32726, 32737, 32761, 32702, 32723, 32729, 32673, - 32676, 32691, 32687, 32759, 32678, 32765, 32667, 32733, 32757, 32676, 32751, 32720, 32757, 32722, 32720, 32736, - 32736, 32735, 32704, 32756, 32670, 32710, 32750, 32682, 32765, 32752, 32741, 32746, 32706, 32733, 32741, 32756, - 32668, 32678, 32726, 32711, 32731, 32721, 32743, 32749, 32711, 32727, 32692, 32721, 32680, 32711, 32759, 32747, - 32667, 32710, 32762, 32758, 32678, 32685, 32676, 32740, 32722, 32685, 32733, 32763, 32667, 32736, 32701, 32681, - 32680, 32693, 32690, 32762, 32673, 32713, 32744, 32694, 32747, 32723, 32671, 32709, 32722, 32762, 32694, 32709, - 32705, 32741, 32757, 32686, 32696, 32706, 32716, 32730, 32708, 32758, 32750, 32691, 32714, 32755, 32709, 32699, - 32728, 32677, 32761, 32718, 32752, 32699, 32738, 32739, 32724, 32707, 32667, 32679, 32761, 32711, 32685, 32761, - 32673, 32742, 32679, 32678, 32718, 32752, 32743, 32678, 32727, 32726, 32693, 32707, 32739, 32687, 32667, 32738, - 32669, 32676, 32684, 32694, 32730, 32723, 32727, 32687, 32689, 32679, 32749, 32690, 32758, 32675, 32721, 32716, - 32756, 32732, 32721, 32700, 32757, 32684, 32702, 32694, 32679, 32698, 32740, 32758, 32705, 32759, 32698, 32709, - 32716, 32669, 32751, 32717, 32756, 32681, 32689, 32685, 32724, 32757, 32732, 32705, 32669, 32749, 32709, 32728, - 32696, 32674, 32754, 32766, 32705, 32722, 32759, 32712, 32674, 32742, 32686, 32673, 32742, 32703, 32751, 32697, - 32706, 32718, 32763, 32745, 32719, 32717, 32668, 32719, 32744, 32744, 32674, 32717, 32683, 32686, 32671, 32668, - 32727, 32732, 32731, 32738, 32707, 32713, 32720, 32686, 32669, 32715, 32739, 32748, 32757, 32712, 32765, 32723, - 32717, 32678, 32741, 32703, 32687, 32692, 32722, 32738, 32669, 32672, 32734, 32765, 32683, 32698, 32680, 32708, - 32668, 32695, 32704, 32724, 32745, 32675, 32673, 32718, 32738, 32681, 32714, 32744, 32697, 32709, 32680, 32667, - 32703, 32762, 32741, 32738, 32757, 32723, 32717, 32762, 32725, 32765, 32731, 32700, 32689, 32760, 32672, 32670, - 32734, 32672, 32738, 32678, 32681, 32686, 32705, 32761, 32742, 32745, 32753, 32751, 32731, 32742, 32766, 32759, - 32755, 32675, 32688, 32676, 32703, 32760, 32738, 32747, 32690, 32686, 32760, 32724, 32754, 32724, 32676, 32683, - 32671, 32716, 32725, 32728, 32674, 32719, 32670, 32673, 32720, 32679, 32695, 32729, 32762, 32719, 32717, 32746, - 32719, 32758, 32668, 32668, 32705, 32763, 32684, 32719, 32674, 32680, 32707, 32719, 32738, 32723, 32738, 32741, - 32714, 32719, 32691, 32685, 32752, 32746, 32679, 32711, 32673, 32765, 32691, 32698, 32669, 32694, 32700, 32763, - 32693, 32729, 32704, 32741, 32733, 32721, 32724, 32713, 32719, 32690, 32709, 32705, 32733, 32712, 32733, 32739, - 32715, 32707, 32739, 32717, 32686, 32718, 32675, 32748, 32683, 32763, 32729, 32744, 32681, 32714, 32766, 32680, - 32730, 32744, 32697, 32757, 32708, 32715, 32721, 32688, 32755, 32685, 32716, 32668, 32704, 32700, 32738, 32733, - 32720, 32742, 32702, 32706, 32719, 32675, 32751, 32713, 32682, 32708, 32690, 32759, 32742, 32715, 32749, 32730, - 32693, 32710, 32766, 32692, 32686, 32694, 32753, 32756, 32691, 32760, 32742, 32747, 32744, 32745, 32733, 32724, - 32695, 32711, 32707, 32680, 32742, 32722, 32691, 32742, 32763, 32673, 32737, 32711, 32758, 32733, 32723, 32760, - 32689, 32715, 32676, 32761, 32720, 32708, 32706, 32673, 32670, 32759, 32674, 32678, 32703, 32684, 32737, 32745, - 32672, 32699, 32670, 32697, 32718, 32692, 32700, 32763, 32725, 32670, 32710, 32762, 32719, 32738, 32764, 32746, - 32709, 32710, 32682, 32743, 32684, 32668, 32673, 32719, 32685, 32668, 32704, 32669, 32703, 32708, 32674, 32699, - 32668, 32755, 32745, 32758, 32707, 32764, 32752, 32740, 32715, 32679, 32685, 32672, 32687, 32714, 32693, 32680, - 32680, 32708, 32735, 32757, 32727, 32685, 32742, 32744, 32745, 32700, 32693, 32702, 32717, 32715, 32712, 32717, - 32683, 32717, 32698, 32712, 32696, 32719, 32756, 32699, 32738, 32764, 32741, 32693, 32719, 32764, 32741, 32759, - 32698, 32670, 32682, 32697, 32702, 32697, 32689, 32688, 32672, 32678, 32757, 32694, 32729, 32766, 32737, 32725, - 32762, 32753, 32689, 32680, 32720, 32673, 32764, 32719, 32701, 32669, 32751, 32685, 32693, 32705, 32762, 32716, - 32764, 32681, 32725, 32715, 32749, 32757, 32735, 32698, 32738, 32669, 32733, 32727, 32696, 32735, 32712, 32749, - 32741, 32737, 32714, 32685, 32706, 32751, 32707, 32724, 32751, 32696, 32728, 32747, 32737, 32694, 32695, 32675, - 32675, 32757, 32699, 32668, 32683, 32733, 32747, 32762, 32718, 32720, 32748, 32715, 32759, 32747, 32673, 32766, - 32744, 32736, 32719, 32716, 32674, 32735, 32752, 32752, 32689, 32668, 32730, 32722, 32748, 32737, 32733, 32759, - 32748, 32763, 32754, 32746, 32766, 32688, 32760, 32679, 32682, 32677, 32697, 32684, 32746, 32669, 32734, 32683, - 32673, 32702, 32690, 32677, 32695, 32765, 32763, 32706, 32719, 32704, 32756, 32749, 32711, 32721, 32694, 32683, - 32699, 32685, 32749, 32745, 32761, 32749, 32731, 32673, 32679, 32705, 32682, 32753, 32672, 32686, 32682, 32667, - 32682, 32706, 32699, 32758, 32763, 32691, 32702, 32704, 32736, 32751, 32689, 32672, 32748, 32738, 32766, 32734, - 32735, 32761, 32721, 32704, 32752, 32724, 32680, 32713, 32675, 32703, 32706, 32667, 32765, 32752, 32696, 32700, - 32745, 32752, 32759, 32710, 32718, 32696, 32677, 32670, 32752, 32747, 32675, 32695, 32725, 32710, 32745, 32690, - 32676, 32710, 32735, 32739, 32752, 32729, 32736, 32711, 32710, 32712, 32702, 32745, 32740, 32682, 32678, 32698, - 32732, 32687, 32685, 32737, 32736, 32765, 32674, 32749, 32755, 32755, 32685, 32744, 32688, 32715, 32746, 32719, - 32762, 32710, 32671, 32713, 32711, 32748, 32679, 32673, 32676, 32754, 32742, 32693, 32757, 32756, 32680, 32748, - 32668, 32724, 32738, 32670, 32667, 32715, 32759, 32755, 32674, 32680, 32712, 32727, 32716, 32717, 32761, 32735, - 32735, 32757, 32707, 32738, 32725, 32766, 32753, 32731, 32699, 32695, 32700, 32682, 32710, 32702, 32711, 32684, - 32672, 32741, 32669, 32683, 32762, 32683, 32677, 32760, 32706, 32672, 32685, 32747, 32686, 32753, 32701, 32714, - 32766, 32674, 32729, 32713, 32702, 32712, 32682, 32758, 32694, 32695, 32684, 32689, 32691, 32693, 32712, 32766, - 32714, 32714, 32714, 32685, 32685, 32698, 32728, 32718, 32681, 32726, 32688, 32675, 32757, 32745, 32761, 32747, - 32720, 32715, 32696, 32717, 32747, 32732, 32688, 32702, 32673, 32747, 32699, 32739, 32727, 32753, 32680, 32745, - 32673, 32719, 32709, 32679, 32712, 32694, 32749, 32748, 32668, 32720, 32697, 32672, 32766, 32671, 32761, 32668, - 32711, 32667, 32762, 32740, 32682, 32728, 32684, 32697, 32737, 32747, 32755, 32687, 32671, 32708, 32678, 32676, - 32756, 32672, 32674, 32746, 32728, 32727, 32701, 32683, 32705, 32763, 32737, 32765, 32702, 32744, 32753, 32684, - 32703, 32684, 32671, 32671, 32743, 32716, 32677, 32720, 32688, 32694, 32688, 32713, 32747, 32759, 32755, 32682, - 32724, 32742, 32714, 32699, 32729, 32707, 32701, 32692, 32744, 32680, 32740, 32714, 32757, 32672, 32675, 32686, - 32678, 32753, 32687, 32742, 32686, 32759, 32723, 32700, 32670, 32745, 32765, 32728, 32713, 32709, 32702, 32750, - 32713, 32700, 32736, 32690, 32712, 32686, 32689, 32730, 32714, 32669, 32677, 32707, 32684, 32720, 32705, 32709, - 32698, 32766, 32737, 32729, 32716, 32680, 32761, 32708, 32709, 32754, 32705, 32737, 32748, 32757, 32747, 32676, - 32738, 32737, 32676, 32741, 32745, 32746, 32730, 32752, 32713, 32717, 32704, 32669, 32677, 32762, 32717, 32725, - 32752, 32691, 32740, 32748, 32758, 32727, 32755, 32743, 32686, 32736, 32743, 32763, 32738, 32674, 32690, 32718, - 32751, 32685, 32671, 32689, 32744, 32702, 32694, 32684, 32745, 32722, 32718, 32758, 32672, 32668, 32734, 32765, - 32724, 32686, 32697, 32682, 32748, 32693, 32684, 32731, 32732, 32694, 32694, 32764, 32711, 32718, 32710, 32730, - 32754, 32706, 32718, 32741, 32689, 32679, 32719, 32669, 32744, 32667, 32748, 32700, 32745, 32748, 32732, 32765, - 32709, 32727, 32714, 32712, 32723, 32750, 32704, 32725, 32735, 32675, 32733, 32758, 32738, 32709, 32699, 32763, - 32681, 32760, 32749, 32707, 32765, 32703, 32745, 32742, 32728, 32722, 32737, 32696, 32766, 32712, 32686, 32670, - 32729, 32690, 32684, 32753, 32753, 32669, 32750, 32698, 32702, 32753, 32674, 32757, 32672, 32708, 32675, 32691, - 32759, 32752, 32670, 32740, 32695, 32736, 32700, 32759, 32723, 32763, 32712, 32680, 32684, 32732, 32700, 32741, - 32754, 32684, 32752, 32692, 32752, 32725, 32760, 32667, 32689, 32755, 32726, 32760, 32673, 32683, 32708, 32696, - 32684, 32669, 32741, 32704, 32676, 32706, 32760, 32747, 32723, 32694, 32714, 32735, 32758, 32739, 32753, 32680, - 32736, 32721, 32674, 32700, 32713, 32742, 32754, 32753, 32766, 32745, 32711, 32709, 32723, 32719, 32720, 32720, - 32757, 32728, 32735, 32697, 32695, 32766, 32669, 32683, 32680, 32755, 32759, 32669, 32678, 32690, 32720, 32752, - 32711, 32752, 32693, 32682, 32698, 32730, 32710, 32708, 32674, 32720, 32669, 32722, 32685, 32744, 32696, 32697, - 32702, 32729, 32739, 32676, 32747, 32684, 32683, 32672, 32725, 32749, 32761, 32685, 32672, 32743, 32704, 32695, - 32749, 32707, 32705, 32732, 32723, 32700, 32729, 32701, 32714, 32739, 32731, 32746, 32671, 32696, 32704, 32676, - 32704, 32728, 32692, 32672, 32688, 32710, 32689, 32738, 32691, 32698, 32755, 32703, 32744, 32732, 32679, 32733, - 32753, 32714, 32739, 32674, 32748, 32675, 32692, 32691, 32674, 32699, 32747, 32668, 32747, 32684, 32749, 32706, - 32690, 32742, 32727, 32755, 32693, 32727, 32734, 32668, 32717, 32737, 32726, 32747, 32741, 32677, 32764, 32752, - 32742, 32697, 32700, 32722, 32754, 32727, 32731, 32705, 32673, 32699, 32749, 32692, 32693, 32727, 32673, 32765, - 32685, 32704, 32687, 32707, 32758, 32720, 32698, 32761, 32737, 32737, 32683, 32703, 32704, 32746, 32672, 32709, - 32691, 32709, 32685, 32742, 32741, 32713, 32690, 32746, 32702, 32715, 32725, 32727, 32710, 32670, 32683, 32751, - 32674, 32678, 32679, 32752, 32726, 32728, 32745, 32684, 32740, 32728, 32756, 32722, 32698, 32746, 32675, 32748, - 32760, 32729, 32747, 32762, 32764, 32709, 32670, 32667, 32706, 32743, 32671, 32691, 32759, 32753, 32737, 32732, - 32674, 32741, 32742, 32709, 32688, 32758, 32679, 32753, 32667, 32688, 32758, 32712, 32705, 32740, 32754, 32762, - 32709, 32721, 32736, 32680, 32698, 32701, 32673, 32696, 32709, 32699, 32717, 32692, 32697, 32732, 32694, 32762, - 32702, 32716, 32721, 32765, 32678, 32681, 32760, 32695, 32766, 32741, 32684, 32740, 32735, 32751, 32695, 32680, - 32766, 32685, 32734, 32751, 32745, 32670, 32723, 32766, 32731, 32736, 32729, 32668, 32705, 32761, 32698, 32685, - 32716, 32689, 32738, 32697, 32736, 32752, 32753, 32675, 32684, 32735, 32750, 32691, 32762, 32691, 32699, 32720, - 32723, 32676, 32681, 32697, 32679, 32736, 32704, 32681, 32724, 32674, 32710, 32726, 32676, 32702, 32685, 32746, - 32750, 32670, 32732, 32670, 32751, 32732, 32707, 32696, 32706, 32729, 32694, 32765, 32764, 32687, 32687, 32675, - 32668, 32730, 32686, 32684, 32752, 32686, 32691, 32684, 32729, 32689, 32681, 32690, 32731, 32705, 32726, 32740, - 32724, 32714, 32704, 32714, 32746, 32705, 32706, 32743, 32739, 32755, 32765, 32681, 32727, 32689, 32728, 32713, - 32723, 32759, 32671, 32744, 32731, 32704, 32752, 32670, 32691, 32668, 32674, 32722, 32724, 32749, 32738, 32766, - 32741, 32754, 32681, 32674, 32715, 32748, 32722, 32675, 32733, 32737, 32671, 32688, 32699, 32738, 32725, 32694, - 32740, 32704, 32758, 32737, 32727, 32709, 32757, 32756, 32753, 32750, 32761, 32677, 32702, 32759, 32756, 32678, - 32711, 32722, 32732, 32732, 32763, 32736, 32719, 32677, 32731, 32743, 32725, 32690, 32690, 32718, 32753, 32751, - 32706, 32762, 32678, 32675, 32670, 32696, 32688, 32734, 32725, 32745, 32728, 32728, 32765, 32682, 32703, 32731, - 32695, 32753, 32714, 32729, 32756, 32710, 32675, 32752, 32720, 32694, 32667, 32684, 32699, 32696, 32670, 32711, - 32688, 32725, 32732, 32709, 32760, 32730, 32762, 32724, 32737, 32706, 32749, 32727, 32717, 32703, 32730, 32679, - 32726, 32703, 32708, 32762, 32709, 32689, 32723, 32743, 32722, 32689, 32752, 32714, 32735, 32706, 32740, 32740, - 32709, 32690, 32764, 32708, 32754, 32762, 32765, 32702, 32731, 32740, 32671, 32705, 32702, 32725, 32721, 32668, - 32680, 32725, 32728, 32710, 32744, 32759, 32667, 32687, 32704, 32722, 32685, 32720, 32710, 32744, 32686, 32682, - 32764, 32712, 32728, 32718, 32700, 32733, 32700, 32733, 32755, 32762, 32756, 32740, 32731, 32743, 32742, 32673, - 32748, 32715, 32721, 32749, 32717, 32730, 32728, 32732, 32741, 32756, 32719, 32727, 32739, 32755, 32765, 32760, - 32667, 32733, 32694, 32737, 32724, 32725, 32683, 32722, 32675, 32736, 32689, 32707, 32681, 32752, 32752, 32725, - 32688, 32735, 32718, 32735, 32754, 32721, 32714, 32705, 32668, 32706, 32750, 32747, 32678, 32699, 32684, 32696, - 32753, 32756, 32756, 32692, 32761, 32698, 32745, 32710, 32748, 32728, 32763, 32707, 32756, 32674, 32692, 32676, - 32685, 32668, 32689, 32737, 32710, 32679, 32733, 32693, 32669, 32720, 32755, 32685, 32734, 32717, 32698, 32722, - 32672, 32668, 32677, 32733, 32729, 32743, 32715, 32766, 32760, 32693, 32729, 32693, 32749, 32746, 32734, 32674, - 32676, 32737, 32748, 32753, 32729, 32741, 32727, 32676, 32716, 32766, 32749, 32693, 32738, 32762, 32738, 32746, - 32729, 32668, 32742, 32736, 32738, 32695, 32683, 32693, 32707, 32740, 32743, 32689, 32711, 32688, 32684, 32762, - 32705, 32724, 32742, 32695, 32751, 32729, 32729, 32758, 32730, 32687, 32761, 32760, 32743, 32757, 32675, 32748, - 32743, 32711, 32691, 32762, 32715, 32684, 32733, 32752, 32709, 32687, 32748, 32712, 32674, 32715, 32734, 32762, - 32753, 32724, 32679, 32734, 32673, 32706, 32763, 32742, 32674, 32721, 32683, 32760, 32694, 32733, 32766, 32669, - 32747, 32669, 32715, 32732, 32736, 32710, 32710, 32680, 32752, 32708, 32762, 32715, 32732, 32756, 32715, 32749, - 32728, 32729, 32706, 32755, 32738, 32697, 32717, 32676, 32672, 32726, 32723, 32761, 32720, 32757, 32727, 32689, - 32736, 32669, 32690, 32693, 32766, 32754, 32676, 32742, 32698, 32680, 32715, 32714, 32682, 32722, 32719, 32732, - 32712, 32703, 32736, 32685, 32723, 32765, 32715, 32726, 32712, 32687, 32682, 32756, 32738, 32670, 32711, 32761, - 32722, 32710, 32692, 32714, 32674, 32707, 32727, 32722, 32707, 32758, 32753, 32718, 32717, 32684, 32679, 32728, - 32756, 32756, 32719, 32672, 32706, 32734, 32676, 32754, 32747, 32738, 32736, 32704, 32736, 32762, 32751, 32691, - 32724, 32754, 32766, 32748, 32696, 32683, 32722, 32708, 32764, 32759, 32711, 32686, 32721, 32765, 32701, 32766, - 32729, 32674, 32746, 32679, 32765, 32755, 32748, 32716, 32758, 32697, 32685, 32691, 32737, 32766, 32691, 32678, - 32752, 32739, 32740, 32713, 32735, 32764, 32750, 32737, 32737, 32730, 32763, 32673, 32682, 32677, 32742, 32684, - 32691, 32722, 32766, 32761, 32758, 32762, 32741, 32764, 32717, 32729, 32743, 32679, 32755, 32751, 32757, 32686, - 32735, 32727, 32679, 32671, 32673, 32735, 32714, 32750, 32743, 32714, 32696, 32734, 32741, 32709, 32669, 32747, - 32676, 32681, 32702, 32668, 32710, 32739, 32727, 32732, 32669, 32690, 32690, 32690, 32738, 32686, 32735, 32705, - 32745, 32756, 32738, 32735, 32678, 32691, 32721, 32761, 32760, 32669, 32734, 32729, 32669, 32678, 32669, 32716, - 32700, 32743, 32721, 32728, 32739, 32762, 32741, 32674, 32751, 32746, 32752, 32721, 32720, 32681, 32674, 32710, - 32707, 32719, 32761, 32740, 32726, 32708, 32688, 32732, 32667, 32718, 32723, 32672, 32755, 32753, 32757, 32763, - 32689, 32681, 32688, 32702, 32701, 32738, 32745, 32732, 32741, 32677, 32686, 32684, 32740, 32755, 32729, 32687, - 32700, 32702, 32756, 32667, 32681, 32723, 32725, 32676, 32719, 32764, 32741, 32744, 32759, 32696, 32700, 32686, - 32709, 32684, 32667, 32684, 32668, 32736, 32697, 32679, 32747, 32750, 32728, 32674, 32735, 32674, 32699, 32759, - 32713, 32724, 32734, 32706, 32756, 32732, 32707, 32730, 32754, 32736, 32745, 32699, 32713, 32709, 32738, 32762, - 32754, 32697, 32724, 32686, 32699, 32758, 32705, 32723, 32732, 32707, 32695, 32755, 32690, 32751, 32755, 32668, - 32734, 32707, 32764, 32743, 32755, 32738, 32747, 32667, 32736, 32714, 32679, 32717, 32754, 32701, 32717, 32713, - 32720, 32700, 32757, 32733, 32755, 32673, 32715, 32707, 32706, 32758, 32677, 32687, 32721, 32683, 32742, 32742, - 32678, 32737, 32688, 32688, 32687, 32736, 32697, 32725, 32747, 32694, 32740, 32672, 32680, 32669, 32698, 32681, - 32745, 32745, 32676, 32676, 32668, 32698, 32729, 32764, 32729, 32735, 32710, 32708, 32726, 32732, 32675, 32765, - 32695, 32733, 32766, 32729, 32737, 32682, 32684, 32739, 32757, 32679, 32753, 32688, 32669, 32706, 32730, 32715, - 32700, 32766, 32723, 32696, 32721, 32763, 32703, 32760, 32753, 32694, 32688, 32697, 32694, 32755, 32680, 32686, - 32746, 32683, 32754, 32676, 32692, 32765, 32673, 32700, 32687, 32744, 32760, 32696, 32766, 32755, 32673, 32739, - 32691, 32762, 32720, 32713, 32709, 32743, 32705, 32745, 32680, 32749, 32725, 32757, 32689, 32754, 32709, 32743, - 32744, 32736, 32737, 32746, 32689, 32731, 32676, 32702, 32736, 32758, 32765, 32681, 32709, 32694, 32759, 32729, - 32678, 32748, 32699, 32682, 32667, 32748, 32753, 32667, 32679, 32760, 32721, 32708, 32740, 32720, 32733, 32702, - 32685, 32756, 32743, 32718, 32669, 32680, 32742, 32766, 32737, 32707, 32737, 32760, 32710, 32754, 32737, 32686, - 32702, 32710, 32676, 32740, 32728, 32696, 32751, 32670, 32674, 32755, 32734, 32685, 32691, 32731, 32692, 32668, - 32681, 32706, 32678, 32749, 32680, 32670, 32711, 32765, 32760, 32675, 32682, 32752, 32715, 32669, 32681, 32709, - 32700, 32722, 32690, 32685, 32758, 32718, 32709, 32753, 32680, 32736, 32724, 32705, 32708, 32707, 32693, 32723, - 32711, 32689, 32713, 32733, 32731, 32669, 32721, 32724, 32680, 32708, 32701, 32679, 32705, 32727, 32699, 32761, - 32758, 32752, 32731, 32695, 32750, 32751, 32675, 32740, 32713, 32740, 32690, 32706, 32734, 32670, 32751, 32707, - 32692, 32736, 32718, 32751, 32719, 32680, 32740, 32764, 32703, 32674, 32743, 32739, 32756, 32709, 32709, 32698, - 32674, 32680, 32699, 32684, 32674, 32749, 32724, 32698, 32766, 32764, 32738, 32763, 32762, 32746, 32697, 32747, - 32683, 32738, 32729, 32742, 32758, 32718, 32730, 32727, 32693, 32745, 32731, 32681, 32699, 32713, 32714, 32761, - 32681, 32747, 32757, 32695, 32686, 32733, 32685, 32682, 32699, 32730, 32711, 32732, 32717, 32755, 32725, 32720, - 32718, 32764, 32719, 32689, 32711, 32674, 32759, 32740, 32734, 32698, 32688, 32739, 32713, 32668, 32689, 32714, - 32752, 32733, 32671, 32690, 32719, 32763, 32758, 32733, 32763, 32706, 32728, 32672, 32673, 32721, 32680, 32696, - 32703, 32744, 32745, 32735, 32742, 32681, 32670, 32754, 32723, 32747, 32674, 32701, 32722, 32754, 32752, 32685, - 32686, 32680, 32675, 32708, 32757, 32716, 32737, 32728, 32740, 32764, 32694, 32696, 32757, 32730, 32692, 32702, - 32708, 32717, 32734, 32681, 32714, 32716, 32722, 32700, 32711, 32691, 32687, 32740, 32689, 32718, 32684, 32670, - 32746, 32756, 32679, 32761, 32727, 32728, 32701, 32698, 32685, 32682, 32710, 32714, 32669, 32689, 32693, 32766, - 32682, 32763, 32696, 32746, 32741, 32702, 32761, 32743, 32731, 32725, 32717, 32704, 32680, 32749, 32713, 32726, - 32678, 32671, 32733, 32762, 32680, 32741, 32677, 32748, 32721, 32756, 32766, 32761, 32686, 32716, 32688, 32704, - 32722, 32684, 32697, 32737, 32723, 32699, 32693, 32705, 32670, 32691, 32696, 32691, 32728, 32706, 32696, 32702, - 32717, 32739, 32676, 32674, 32686, 32714, 32751, 32688, 32745, 32687, 32760, 32672, 32697, 32760, 32758, 32744, - 32685, 32701, 32763, 32729, 32723, 32735, 32692, 32702, 32765, 32713, 32693, 32734, 32766, 32699, 32726, 32747, - 32694, 32704, 32760, 32757, 32761, 32711, 32743, 32733, 32669, 32703, 32759, 32766, 32723, 32752, 32689, 32676, - 32744, 32735, 32761, 32684, 32693, 32692, 32752, 32678, 32689, 32687, 32721, 32696, 32764, 32685, 32762, 32686, - 32737, 32723, 32722, 32669, 32764, 32700, 32685, 32670, 32677, 32679, 32676, 32708, 32694, 32689, 32699, 32683, - 32688, 32715, 32740, 32742, 32682, 32678, 32695, 32719, 32750, 32752, 32705, 32757, 32730, 32678, 32763, 32758, - 32722, 32667, 32750, 32698, 32740, 32678, 32765, 32677, 32689, 32738, 32761, 32730, 32765, 32730, 32673, 32736, - 32737, 32725, 32710, 32669, 32684, 32672, 32670, 32690, 32741, 32756, 32679, 32759, 32732, 32680, 32692, 32741, - 32759, 32699, 32722, 32686, 32721, 32733, 32678, 32680, 32733, 32675, 32748, 32698, 32726, 32717, 32702, 32686, - 32761, 32766, 32698, 32668, 32670, 32677, 32747, 32736, 32674, 32706, 32743, 32765, 32757, 32717, 32724, 32766, - 32753, 32727, 32683, 32726, 32693, 32759, 32668, 32737, 32696, 32748, 32734, 32720, 32745, 32691, 32691, 32766, - 32750, 32732, 32695, 32683, 32694, 32715, 32697, 32698, 32734, 32698, 32734, 32718, 32758, 32721, 32676, 32685, - 32678, 32690, 32734, 32719, 32752, 32704, 32707, 32752, 32685, 32754, 32737, 32733, 32745, 32762, 32709, 32746, - 32726, 32758, 32750, 32673, 32670, 32735, 32701, 32761, 32732, 32702, 32747, 32669, 32744, 32757, 32717, 32704, - 32675, 32676, 32695, 32760, 32695, 32703, 32743, 32748, 32745, 32696, 32736, 32751, 32735, 32695, 32763, 32674, - 32736, 32668, 32709, 32689, 32678, 32720, 32720, 32690, 32686, 32686, 32714, 32751, 32752, 32698, 32763, 32670, - 32697, 32700, 32720, 32719, 32681, 32728, 32728, 32714, 32739, 32687, 32682, 32696, 32720, 32700, 32728, 32764, - 32713, 32698, 32715, 32674, 32721, 32709, 32696, 32688, 32733, 32762, 32752, 32739, 32703, 32723, 32750, 32736, - 32730, 32676, 32742, 32685, 32762, 32766, 32673, 32693, 32753, 32702, 32758, 32716, 32679, 32690, 32701, 32672, - 32746, 32727, 32745, 32741, 32677, 32707, 32759, 32694, 32753, 32678, 32716, 32736, 32717, 32739, 32720, 32667, - 32748, 32753, 32683, 32684, 32746, 32719, 32751, 32711, 32762, 32680, 32733, 32742, 32672, 32738, 32743, 32735, - 32709, 32763, 32738, 32679, 32722, 32751, 32710, 32688, 32745, 32759, 32680, 32750, 32766, 32667, 32667, 32729, - 32764, 32699, 32712, 32760, 32704, 32693, 32669, 32694, 32703, 32701, 32669, 32744, 32721, 32762, 32711, 32740, - 32677, 32688, 32763, 32726, 32713, 32703, 32704, 32704, 32742, 32681, 32748, 32693, 32739, 32754, 32700, 32728, - 32698, 32738, 32736, 32696, 32716, 32729, 32709, 32694, 32675, 32723, 32694, 32685, 32676, 32748, 32674, 32698, - 32673, 32704, 32703, 32752, 32694, 32754, 32757, 32687, 32734, 32693, 32706, 32694, 32729, 32695, 32690, 32667, - 32710, 32678, 32744, 32671, 32686, 32733, 32682, 32672, 32712, 32763, 32727, 32710, 32678, 32712, 32733, 32708, - 32680, 32736, 32670, 32682, 32691, 32759, 32726, 32693, 32684, 32678, 32720, 32715, 32699, 32698, 32745, 32683, - 32687, 32714, 32684, 32685, 32687, 32683, 32740, 32742, 32681, 32764, 32714, 32698, 32752, 32734, 32755, 32697, - 32671, 32682, 32722, 32721, 32726, 32690, 32699, 32696, 32681, 32717, 32670, 32670, 32676, 32674, 32677, 32764, - 32675, 32739, 32766, 32682, 32697, 32717, 32679, 32725, 32682, 32669, 32667, 32756, 32741, 32688, 32717, 32677, - 32685, 32759, 32670, 32702, 32687, 32703, 32737, 32714, 32711, 32734, 32737, 32755, 32744, 32719, 32698, 32756, - 32708, 32686, 32764, 32747, 32677, 32727, 32678, 32697, 32701, 32719, 32677, 32712, 32678, 32743, 32713, 32712, - 32708, 32668, 32692, 32695, 32688, 32766, 32668, 32745, 32752, 32681, 32704, 32707, 32730, 32708, 32681, 32732, - 32703, 32705, 32730, 32761, 32741, 32740, 32689, 32752, 32703, 32695, 32697, 32667, 32765, 32706, 32669, 32750, - 32678, 32731, 32677, 32741, 32669, 32726, 32716, 32670, 32751, 32701, 32720, 32741, 32689, 32724, 32704, 32737, - 32714, 32704, 32739, 32682, 32760, 32728, 32736, 32710, 32703, 32749, 32751, 32677, 32711, 32748, 32748, 32756, - 32704, 32727, 32763, 32765, 32683, 32714, 32674, 32764, 32728, 32720, 32736, 32698, 32719, 32749, 32711, 32680, - 32696, 32714, 32689, 32690, 32708, 32687, 32756, 32747, 32720, 32722, 32736, 32704, 32738, 32729, 32743, 32723, - 32760, 32727, 32713, 32709, 32736, 32713, 32750, 32670, 32747, 32734, 32754, 32673, 32722, 32670, 32720, 32684, - 32688, 32669, 32764, 32677, 32693, 32764, 32756, 32713, 32736, 32732, 32737, 32695, 32728, 32760, 32684, 32736, - 32680, 32724, 32748, 32747, 32721, 32687, 32718, 32672, 32699, 32758, 32700, 32686, 32668, 32723, 32751, 32698, - 32751, 32684, 32748, 32734, 32766, 32734, 32754, 32721, 32675, 32734, 32727, 32670, 32734, 32685, 32737, 32673, - 32762, 32732, 32712, 32761, 32757, 32715, 32693, 32754, 32750, 32687, 32696, 32757, 32758, 32737, 32683, 32757, - 32709, 32696, 32696, 32757, 32752, 32671, 32678, 32729, 32671, 32681, 32686, 32724, 32714, 32668, 32674, 32694, - 32695, 32763, 32725, 32701, 32750, 32682, 32683, 32754, 32712, 32762, 32716, 32732, 32701, 32749, 32761, 32670, - 32671, 32716, 32755, 32727, 32696, 32758, 32732, 32715, 32687, 32696, 32694, 32720, 32716, 32727, 32715, 32724, - 32740, 32739, 32696, 32747, 32758, 32707, 32697, 32731, 32713, 32716, 32672, 32733, 32713, 32753, 32713, 32742}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output.h new file mode 100644 index 00000000..56fd68c9 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output.h @@ -0,0 +1,14 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_spill_output[90] = { + 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, + 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, + 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, + 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, + 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, + 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667}; + +const int16_t *const int16xint8_spill_output_ref = int16xint8_spill_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_mult_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_mult_data.h deleted file mode 100644 index 9b36b1a9..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_mult_data.h +++ /dev/null @@ -1,7 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int32_t int16xint8_spill_output_mult[9] = - {1100398998, 1100624659, 1100035049, 1099990516, 1100661379, 1100714636, 1100682734, 1100519706, 1100868940}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_multiplier.h new file mode 100644 index 00000000..50fec9ac --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_multiplier.h @@ -0,0 +1,9 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_spill_output_multiplier[9] = + {1922224780, 1923367059, 1923068806, 1922819466, 1922873839, 1922641561, 1921336846, 1922926391, 1922270735}; + +const int32_t *const int16xint8_spill_output_mult = int16xint8_spill_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_ref_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_ref_data.h deleted file mode 100644 index ee02443f..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_ref_data.h +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int16_t int16xint8_spill_output_ref[90] = { - 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32719, 32667, 32667, 32667, 32667, 32667, 32667, - 32667, 32667, 32719, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32719, 32667, 32667, 32667, - 32667, 32667, 32667, 32667, 32667, 32719, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32720, - 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32719, 32667, 32667, 32667, 32667, 32667, 32667, - 32667, 32667, 32720, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32719, 32667, 32667, 32667, - 32667, 32667, 32667, 32667, 32667, 32719, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32718}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_shift.h new file mode 100644 index 00000000..beb068d3 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_spill_output_shift[9] = {-12, -12, -12, -12, -12, -12, -12, -12, -12}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_shift_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_shift_data.h deleted file mode 100644 index b9beffc0..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/output_shift_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int32_t int16xint8_spill_output_shift[9] = {-16, -16, -16, -16, -16, -16, -16, -16, -16}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/test_data.h index 4d61c5f2..33835748 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/test_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/test_data.h @@ -1,9 +1,7 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#include "biases_data.h" +#include "bias.h" #include "config_data.h" -#include "input_data.h" -#include "output_mult_data.h" -#include "output_ref_data.h" -#include "output_shift_data.h" -#include "weights_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/weights.h new file mode 100644 index 00000000..74e61f30 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/weights.h @@ -0,0 +1,944 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8_spill_weights[17820] = { + 2, -12, -10, -24, -104, -90, -5, -15, -45, 90, -90, 106, 98, -99, -122, -10, -103, 33, -78, + -108, 12, 28, -31, 125, 90, 7, 44, -52, -57, -31, 106, -87, -12, -115, -126, 90, -68, 36, + -31, -89, 65, 106, -43, -72, -80, -44, 124, 33, -76, -24, 41, 74, -6, -119, -35, -18, 32, + -44, 104, -42, 19, 46, 42, -19, -11, 38, 62, -17, 84, 4, 119, -120, -12, -39, -70, -5, + 63, -23, -77, -96, 82, -92, -26, -12, 38, -93, 26, -47, -101, 69, 21, -34, -34, 8, 90, + 106, 115, -96, 27, 22, -89, -38, 28, 7, -118, 52, -40, -67, -9, 92, -91, -66, 17, -99, + 106, 94, -121, 117, -55, -72, 107, -119, -18, -32, -2, 120, -120, -10, 30, 113, -75, 114, 17, + 126, 125, -35, -46, 109, -100, -57, 102, -50, 75, 28, -69, -93, 22, -120, 7, -16, 106, -47, + -29, -82, 26, 77, 54, 22, -122, 2, 16, -32, 41, 8, -86, -90, -77, -17, -40, -59, -118, + 110, -54, -50, 6, -126, 94, 101, -117, 37, -121, 2, -107, -108, -122, 2, 37, 70, -100, 108, + 123, 82, 76, -10, -29, 94, 87, -62, -117, -57, 40, 22, 39, 45, -1, 53, 109, -47, -24, + -51, -7, 114, 11, 103, 33, 27, 123, -106, 30, -45, -80, 106, 47, -27, 49, -87, 93, 52, + -111, 101, 59, 61, 39, -6, -109, 108, -10, 112, -126, 106, -28, -18, 96, -54, -75, -48, -63, + 24, -5, 3, 50, 62, 78, -22, 112, 7, -78, 31, 87, -5, -57, 12, 26, -95, -2, -102, + -105, 57, -14, 53, -47, -9, 80, -125, 94, 30, 83, 86, -80, 58, -125, -19, 41, 81, -11, + -49, -108, -37, 86, -20, 118, -105, 57, -121, -63, -109, -59, -58, -1, -107, -56, -65, 70, -53, + 7, -35, -81, -15, -61, -102, -64, -36, -20, -107, 115, -124, 30, -97, -14, 64, -47, 68, 50, + 21, 120, -24, -126, -14, 124, 36, -46, 50, -73, 24, -38, 36, -44, 88, -70, 92, 116, 63, + 102, 69, 2, 68, -35, 86, -71, 89, 20, 118, -18, 12, 46, 11, -25, -35, 118, 18, -65, + -45, -34, 14, -42, 95, 9, -98, 57, 44, 126, -122, 5, 84, 72, 23, 119, 113, -72, -110, + -83, 37, 100, -80, 111, 102, 14, 2, 98, -58, -109, 26, -44, 106, 126, -111, 23, -105, -78, + -118, 27, -109, 41, -72, 94, -116, -82, 82, -32, 115, -30, 0, 110, 63, -126, -55, 109, -67, + 58, 82, -47, -45, -47, -15, -114, 14, 94, -26, -43, 85, 96, 40, 90, -115, 24, -82, -99, + 124, 58, 121, 65, 24, -67, -61, -104, -118, -102, 97, -82, 10, 112, -29, 11, -18, -3, -117, + 69, 27, 28, -16, -87, 92, -99, 77, -22, 94, -119, -81, -84, -114, 8, -94, 122, -46, -54, + -22, -80, -125, -127, 35, 53, -124, 98, -115, -26, -33, -124, 102, 62, -70, -89, 45, 39, 4, + 81, 16, -30, 64, -45, 103, -23, -20, 85, 41, -107, 70, -77, 120, -113, 107, -29, -100, 40, + -115, 77, -65, 54, -112, 114, 16, 88, -70, 40, -13, -115, -112, -6, 107, 98, -81, 109, -103, + 3, 63, 110, -88, -113, 111, -31, -17, -79, 78, -121, -54, 31, 64, 93, 53, -73, -125, -14, + -15, 45, 22, 58, 65, 39, -16, 77, -86, -89, -113, 18, -53, -88, 95, -69, -91, -95, -4, + -95, 64, -43, -70, -100, -76, 56, 30, -85, -38, -118, 21, 108, -121, -118, -66, -25, 8, -14, + 43, -110, -12, 115, -103, -111, -43, -49, -47, -11, -34, -68, -53, -28, -86, 8, 125, -69, 6, + 89, -71, 14, 22, 50, -13, 114, 52, -27, -22, -73, -89, -88, 18, -56, -10, 89, -72, 78, + 100, 25, -125, -84, 49, -92, 117, 10, 47, 45, -120, -29, 57, 80, 80, -121, -105, -49, -97, + 11, 56, -6, -56, 78, -73, 115, 2, -99, -94, 107, 10, 113, 111, 96, 122, -112, -99, 14, + 101, -77, -71, -109, -15, 35, 117, -114, -74, 109, -84, 19, -49, -99, -66, -125, -8, -47, 106, + -87, 44, -20, 57, 74, 66, 119, -36, 122, 89, 24, 43, 34, -84, 75, 101, 107, 46, 103, + 103, -54, -25, 17, -22, 120, -28, 96, 62, -44, 45, 92, 50, -87, -113, -16, -4, -40, -30, + -36, -112, 1, 22, 81, -26, 38, -123, -116, 119, -41, -56, -68, -125, -22, -104, -70, -79, -46, + 118, 39, 90, -122, -21, -34, 46, 45, -50, 81, 100, 96, -101, -85, 108, -101, 80, -2, 42, + -76, 88, 90, -67, 43, -18, 70, -18, 27, 117, -40, -92, -87, -123, 125, -13, -25, 75, -95, + -126, -11, -65, -12, -39, -55, 121, -29, 124, -19, -56, 73, 5, 121, 25, -18, -65, -57, 118, + 43, -73, 26, -55, -19, -80, -12, 76, -66, 63, -45, 7, -13, -109, 27, 75, -1, -7, -76, + -87, -36, -58, 116, 39, 89, -71, -13, 1, 58, -30, -121, 93, 45, 92, 32, -100, -61, -39, + -86, 18, -20, -108, -71, -125, 85, 62, 114, -111, 84, 50, 115, 18, 34, 41, 79, 92, 114, + -45, -79, 107, 120, 69, 72, -16, 15, 90, -37, -37, 4, 78, 82, -75, 10, -114, 76, 2, + 45, 77, 97, 52, -99, -123, -58, -92, -71, 89, 104, 64, -42, -52, 96, 120, 85, -126, -6, + 94, -97, -111, -72, 119, -82, 55, -127, -72, -96, 78, -61, 9, -38, 94, -17, -57, 77, 98, + -39, -37, -47, 121, -84, -39, 52, -79, 90, -8, -108, 71, 1, -114, -32, -40, -83, -39, -35, + 118, -114, 15, 38, 114, -114, -67, 42, -102, -90, 1, -60, -27, -118, 47, 30, 41, -65, 57, + 6, 32, 74, 64, -5, -63, 7, 9, 106, 40, 7, -123, 26, 80, 60, -113, -112, 98, 124, + 89, 55, 77, 0, -106, 43, 119, 111, -100, -15, -63, 110, 98, 95, -72, -33, 12, 25, -109, + -15, -96, 17, -6, -84, -74, -105, -52, -51, -34, -119, 83, -69, 102, 19, -39, 0, 57, -111, + 101, 12, 58, 45, -74, -15, -62, 16, -78, 18, -59, 65, -5, 116, 64, 55, -39, 127, 93, + -99, 78, -42, 120, 0, 89, 103, -17, -125, -60, -63, 63, -16, 44, -93, -28, -5, 21, -74, + -76, -112, 48, 94, 110, 7, 113, 2, 9, -110, 33, 57, 30, -75, 21, -54, -21, -112, 45, + 77, -62, -119, -84, -114, -90, -105, 26, -20, 79, 94, 98, -61, 38, -86, -111, -29, 105, -119, + 50, -3, 110, -10, -5, -125, -123, 42, 5, 13, 105, 115, -31, 65, 45, -29, -49, 121, 80, + -33, -127, -116, -69, -68, -121, 114, 80, -2, -62, 8, 49, 32, 103, -37, -64, 47, 29, -90, + -62, -69, 13, -124, 32, -50, -66, -15, 38, 34, 35, -95, -113, -110, -29, -121, -70, -99, 29, + -17, 104, 64, -69, -108, 11, -64, -113, -72, 115, -22, -104, 103, 118, 42, 4, 105, -99, 82, + -3, 22, -63, 54, -21, 92, -34, -69, 31, -16, -77, 58, -108, -85, -28, 77, 31, 125, 8, + 13, 121, -118, 60, 126, -76, -56, -35, -70, 83, 21, 34, 126, 64, -113, -55, 90, -80, 102, + 73, -65, -64, -75, -69, 1, 119, 71, 76, 100, -102, -7, 101, 3, -55, 90, 12, 7, 49, + 59, 70, -111, 46, -49, 7, 111, -30, -79, 108, 37, 72, 36, -35, 2, 85, 91, 46, 8, + -99, 36, 17, 19, 115, 73, 89, 26, -23, 19, 121, -118, -39, -23, 111, -117, 89, 52, 63, + -3, -15, 48, -6, -76, 5, 28, 115, 120, 85, -29, -83, 26, 13, 88, -113, -56, 124, -1, + -120, -116, -20, 64, -90, -77, -60, -27, -90, 114, 68, 67, -110, -73, 114, 14, -1, 28, -112, + 106, -66, 41, -79, 108, 9, 76, -22, -99, -58, -78, -59, -122, -30, -103, -18, 92, -110, -46, + -32, -17, -116, 85, 65, -94, 32, -34, -38, 48, -92, 91, -8, 29, 9, -75, 43, -30, 59, + -1, 27, -103, 5, 36, 102, -116, -50, 37, 101, -20, -109, -21, -16, -93, -109, -74, 108, 110, + -20, 51, 20, -7, 76, 107, 38, 50, 125, -5, -101, -12, -64, 78, -84, 4, 80, -73, 123, + 106, 30, -88, -65, 35, 11, -120, 117, -9, -25, 107, 82, 1, 84, -97, -31, 59, -116, -12, + -94, 92, 96, -85, 28, 105, -24, -64, 42, 43, -97, 124, 16, -82, 127, -67, 88, 35, -10, + 58, -56, -68, -79, -23, -110, 30, -4, 104, 29, -36, 59, -30, 87, 41, -36, -76, -55, -79, + 74, -79, 23, -88, 124, -115, 26, 118, -11, -8, -95, 74, 24, -83, 115, 8, 115, -21, -75, + -61, 71, 55, 22, -16, 21, 119, 89, -126, -122, 14, 68, -7, -104, 37, -45, -88, -116, 82, + -64, 85, -12, -28, 62, 44, 95, -62, -39, 61, -46, -109, -57, -61, -92, 99, 91, 39, 83, + 110, 123, -17, -11, 64, 52, 25, -65, -27, 0, -62, 46, -42, -107, -2, 11, 52, -109, -82, + 95, -26, -122, 18, 115, 82, -20, -72, 32, 94, 31, -51, -55, -1, 100, -93, 39, -112, -58, + 54, -23, 62, 23, 104, 76, -39, 75, -16, 68, -3, -64, -34, -90, -64, 108, -5, 65, -33, + 6, -126, -112, -91, -34, 123, -89, 12, 117, 88, -29, -33, 62, 107, -114, -64, 51, -12, -115, + 34, -27, 114, 120, -112, 23, 98, 31, -3, -100, -116, -104, -112, 63, 80, 73, 33, 120, 100, + -122, 102, 114, 76, -96, -104, 59, -35, -36, -10, -68, -121, 110, -98, -77, 91, -29, -94, -48, + -97, 89, 58, 120, 40, -2, -43, 39, -125, -27, 22, 109, 57, 97, 63, -13, 120, 40, -88, + -10, 22, -40, -66, 63, 90, 67, 110, 21, 57, 31, -51, -11, -34, 116, 110, 12, 5, 94, + -88, 62, 91, -2, 25, -66, -100, -27, -1, -115, 120, -100, -71, 0, 12, -74, 70, 33, 46, + 99, 73, -9, 103, -113, -104, -31, -99, 44, -85, -107, 99, 104, -20, 122, -112, 86, -15, -103, + -67, 112, -74, -79, -100, 28, -106, 28, -94, 55, -51, 42, -6, 31, -114, -37, -18, -126, -61, + -95, 38, 119, 65, -54, -56, -123, 59, -7, 92, -42, 103, -100, 19, -8, -69, 40, -6, 78, + 48, 24, -62, 109, 4, -31, -44, -38, -76, 74, 30, -81, -90, 63, -89, 48, 113, -51, -41, + -113, 20, 21, 16, -18, -15, -115, -29, -102, 68, 31, -29, -5, -71, -3, 9, 103, 104, -96, + -106, 8, -3, 57, -48, -4, 28, 22, 36, 51, 103, 116, -113, -73, 112, -36, -33, -78, -121, + -64, 76, 75, -36, 86, 115, 59, -78, -70, -62, 87, 108, 54, 16, -108, -56, 95, -83, -59, + 77, 112, 99, -82, 77, 35, 19, 84, -10, -7, -42, 14, -125, -118, 46, 41, 79, 60, -57, + 78, 80, 75, -78, 76, -62, -71, 17, 93, -91, 37, 110, 27, 102, -72, 43, 111, 46, 78, + -60, -115, 116, -68, 20, 118, -50, 25, -7, -31, -28, -74, -64, -59, -61, -60, -42, 123, 116, + 71, -108, -20, -31, 62, 99, -82, -6, -93, -76, 33, 99, -77, 118, 51, 64, -5, -31, 1, + -44, 63, -73, -92, -60, 108, -124, 7, 47, 36, 23, 114, -125, -118, 115, 47, -47, -98, -66, + 113, 12, 66, 20, 72, -26, 103, 73, 42, -10, 117, -8, -62, -123, 71, -78, -29, -61, 75, + -120, -71, -40, -44, 103, 3, 112, -110, -124, 63, -61, -26, 18, 45, -88, 46, -104, -84, -105, + 19, -59, 56, 125, 27, -87, 51, 117, 22, -116, 125, 33, 91, 88, 113, -104, -101, 90, 86, + 10, -8, -69, -11, 112, -86, 113, 86, 92, 104, 97, -11, 1, -7, 46, 41, 80, 99, 99, + -92, 107, 46, 80, 108, -65, 32, 124, -55, 109, 44, 27, -9, -96, 81, -27, -48, -39, -6, + 84, 16, -105, -46, 52, 45, -88, -126, 53, 15, 93, -61, 5, -26, 70, -56, 16, -38, -52, + -13, 25, 109, -115, 64, -51, -75, 22, 23, -15, 31, 20, -75, -97, -8, -81, -82, 45, 98, + 52, -93, -92, 81, -102, -29, 12, 71, -2, -124, 73, 103, -122, 120, -104, 14, -17, -85, -28, + 47, -110, -50, 3, -4, 7, -88, 82, 60, -108, 43, -53, 93, 40, -77, -16, 53, -2, -82, + -106, -111, 92, -35, -89, 90, 66, -98, -116, 20, 113, 3, -26, 66, 59, 56, -116, 20, 59, + -23, 3, 21, -125, -60, 4, -55, -103, -120, 9, -99, -16, 37, -84, 98, -98, 31, 102, 99, + 43, -73, -85, -43, -58, 100, -107, -23, 83, 58, 93, 119, 86, -126, 44, 68, 96, -75, 126, + -67, -5, 97, 120, 125, 91, 90, -109, 22, 83, 117, 85, 85, -36, 91, 78, 77, 4, 75, + 84, -63, -39, 54, 118, 99, 54, 106, 6, -115, 114, -117, -1, 98, -93, -78, 28, -16, -126, + 55, -90, -23, -83, -53, -82, 117, -53, -125, -6, 44, 48, 77, -100, 15, 102, -84, 119, -124, + 19, 78, 100, -124, -79, -87, 68, -34, 78, 40, -56, -9, -102, -38, -15, -16, 114, 123, -82, + 102, -66, -37, 24, -5, 96, -26, 55, 23, 89, -116, -77, 15, 86, 28, 13, -2, -18, 104, + -91, 28, 85, -122, -30, 116, 96, 126, -113, 112, -64, -70, -86, 61, -127, -84, -84, -11, -85, + 117, -50, -80, -123, 51, 92, 80, -114, -57, 88, 99, 21, -18, 85, -66, 51, -119, -44, -56, + 48, 122, 119, 109, 18, -98, -102, 86, 82, -95, -76, 44, -22, 24, 77, 50, 119, 111, 37, + 106, 31, 80, -20, -16, 93, 84, -97, 97, -55, -24, 109, 9, 1, -18, -125, 118, -95, 79, + 59, -22, -38, -58, 26, 127, -113, 67, 19, -125, 116, -82, -68, 15, 11, 55, -60, 56, -119, + 32, 98, -119, -16, 51, 36, 6, -84, -14, 38, -17, 4, -55, -83, 7, 10, -22, -46, 116, + 20, -33, -19, -24, -44, 96, -3, -47, -111, 26, -74, 41, 63, -67, 22, -124, 112, -62, -92, + 33, -94, 1, 43, 19, -73, 60, -47, 97, 30, 103, -124, -117, -65, -77, -94, -17, 80, -91, + -53, -118, -107, -74, -16, -124, 96, -77, 2, 99, -28, -46, 70, -114, -47, -81, 53, -74, -110, + -42, 105, 50, 74, -56, -42, 94, 113, 39, -122, -8, 82, 78, -124, 9, -48, 91, 92, 28, + -36, -126, -95, 82, -110, 0, -64, 10, -74, -51, 49, 42, 95, -103, 53, 93, 76, -9, -42, + 107, 105, -3, 67, 48, -3, 73, 30, -57, 70, -81, -108, 124, -33, 18, 109, -82, -103, 83, + -105, -23, 43, -29, -70, -93, -112, -61, -100, -102, -89, -15, -110, 82, 101, -9, 25, 127, 95, + -75, 71, -6, 13, 78, -52, -40, 79, -111, 116, 75, 8, 117, 121, -39, -32, 107, 120, -52, + -25, -63, -81, -61, -124, -91, 119, 115, -24, -20, -77, 119, 41, 0, -119, 40, -109, -58, -78, + 0, -28, -60, 85, 100, -102, -111, 115, 9, 121, -37, -100, 60, -35, -115, 15, -69, 23, -62, + 80, -87, -89, -1, 107, 102, -118, -100, -33, -60, -44, -103, 123, 46, 67, 23, -11, 91, 28, + 16, -72, -109, 9, 109, -57, -53, 49, 121, -114, 51, -12, 125, 75, 63, -67, -53, 44, -45, + -106, -85, -82, -87, -117, -116, -126, 57, 47, 22, -35, -125, -55, 94, -120, -70, -18, -121, 61, + 107, 91, -123, 86, -61, 42, -94, 99, 104, 34, -69, 53, -10, -42, -72, -55, -105, -44, 65, + -9, 89, 36, 42, -10, 23, 63, 13, -52, 110, -60, -7, 11, 51, -116, -4, 1, 61, -23, + -114, 92, -54, -26, -125, 9, -25, 100, -51, 54, 56, 40, 37, 70, 61, 73, 53, 64, 55, + -18, -79, -117, 92, 83, -63, -25, 66, -23, 122, 46, 102, -46, -102, 29, 66, -76, -4, -34, + -69, -39, -118, -93, -63, 69, -95, 29, 54, 33, 27, -114, 69, -52, 51, -88, 0, 122, -44, + 29, 48, -93, 66, 97, -104, 36, 58, -127, 68, -93, -126, -13, 1, -46, 99, 100, 15, -79, + -79, 118, 120, 9, -32, 60, 123, 47, -97, 78, 54, 69, 4, 65, -62, -105, 44, -92, -46, + -88, -19, 42, -22, 110, 8, 106, 70, 28, -81, -19, -40, -114, -76, -119, 99, -62, -97, -98, + -24, -37, -15, -49, 26, 80, -76, -56, 100, -101, -45, -5, -35, 57, 25, -77, -17, -7, 108, + 119, -36, 21, 58, -118, 80, 62, 18, 54, -111, -26, -101, -67, 22, -29, 5, -31, -95, 103, + 70, -105, 47, 11, -123, -24, 105, 12, 123, -58, -60, -60, -74, 105, 106, -126, -97, 99, 0, + -10, -112, -14, 23, 91, 18, 114, 117, 3, 37, -52, 79, 122, 50, 58, -87, 52, 4, 110, + -116, -71, 33, -63, 104, 95, 77, 109, 68, -22, -23, -34, -65, -24, 17, -58, 120, 122, 67, + -18, 125, -104, -123, 26, 109, 97, -98, 101, 20, 69, -67, -69, -38, 120, -116, -85, -30, -58, + -22, 37, -98, -32, -119, 67, 119, 118, -15, 115, 56, -98, -63, -85, 47, 20, -13, -46, -4, + -37, -97, -86, 106, -117, 90, 24, -24, 1, 63, 40, -77, -108, -59, 27, -103, 14, 59, -47, + 18, -80, 120, -123, -120, -68, -64, -46, 58, -36, 117, -6, 23, -55, -65, 124, -119, 14, 101, + 106, 58, -10, -125, 63, -79, -97, -6, 71, 75, 120, 53, -33, 67, 96, -86, 66, 38, -100, + -28, 110, -24, 92, -127, -34, -67, -59, -37, -43, 88, -116, 28, 34, -124, 38, -100, 4, 34, + -4, -18, 19, 36, 121, -45, -52, 79, 66, 46, -41, 28, 13, -118, -89, 71, -103, 55, 31, + 89, -119, 126, -60, 116, 118, -88, -42, -57, -17, -10, -2, 71, -102, 64, -77, -82, 57, 114, + -63, 27, 82, 112, -123, 58, -109, 123, 7, 119, 8, 61, -72, -8, -42, 79, -58, 15, -42, + -62, -37, -14, 40, -100, 83, 25, 54, -61, -109, 107, -68, 22, 121, -15, 57, 32, -84, 102, + 59, -45, -115, -81, 118, -68, 74, 127, -87, 51, 120, -105, 87, 82, 19, -108, -21, 116, -97, + 99, -24, -104, 18, 10, -2, 107, 28, -28, 108, 67, -82, 64, -79, 104, 3, 2, -66, 93, + -46, -2, -38, -42, -101, -79, -82, -94, 101, -26, 70, -98, 4, 50, 121, 35, -4, -19, 71, + -116, 32, -114, 30, -32, -127, -34, 115, 79, -39, -58, -10, -98, -115, -47, -98, -72, 14, -68, + -104, 94, 6, 10, -25, 57, -20, -75, 75, -21, 112, -56, 112, 54, -73, -46, -68, 112, -37, + 111, -1, -81, 16, -56, -40, 50, -29, -78, 24, -15, -84, -120, 23, 86, 100, -23, -69, 40, + 95, -56, -27, -25, -32, -47, -27, 44, -117, 120, 43, 53, -114, -47, 60, -79, 23, -75, 37, + 86, -18, -28, -26, 113, -48, -125, 119, -37, 111, 39, -64, -96, 66, -10, -59, 98, -28, 87, + -104, 8, -103, 99, -14, -56, 31, 1, 79, 44, -41, 43, -106, -9, 58, 13, -94, -12, 33, + 13, -70, 90, -18, 17, 6, -55, 35, 26, -61, -16, -75, -44, -11, 113, 56, -29, 106, 68, + -76, -13, 85, 14, 62, -27, -78, -21, -57, -41, 74, 107, -1, -119, 95, -12, 122, 89, -50, + 96, 8, -124, -30, -11, 81, -87, -38, 39, -49, -95, 93, 42, -81, 27, -105, 94, 117, 69, + 88, 52, -10, 88, 64, -49, 99, -92, -31, -104, 48, 116, -60, -2, -117, -5, 92, 91, 97, + -13, 116, 110, -56, 122, 70, -36, 47, -74, -11, -40, -98, 30, 81, -62, -116, -110, 86, -94, + -39, 2, 104, 20, 103, 13, 93, 45, 31, -52, -111, -61, -18, -123, -27, -92, 67, 100, 37, + 66, 88, 26, 91, 76, -72, -121, -105, 76, 34, -65, 49, 44, -112, -111, -44, -49, -28, -33, + -70, -79, -71, -84, 97, -11, -105, 124, -104, 85, -61, -114, 28, 72, -39, -92, 119, -122, -116, + -68, 79, 58, 114, 60, -101, -32, 89, 105, -96, -73, -42, -73, -73, 5, -106, -46, -41, -16, + -107, -74, -73, -104, -54, 7, -99, -25, 65, 95, -14, -113, -42, 73, -51, 100, 81, 13, -33, + -16, -47, -89, -61, 116, 100, -85, -72, 89, -44, -65, 14, 91, 30, -12, -80, 63, 58, -101, + -12, -62, -14, -37, -21, 40, 96, 97, 91, -31, 75, 67, -85, -107, -78, 2, 79, 3, -73, + 32, 2, -4, -63, 113, -35, -17, 122, -48, 27, -59, 84, -92, 72, 18, -10, 20, -110, -18, + 45, 67, 39, 101, -44, 61, -57, -49, 33, 31, -92, -37, 96, 110, -12, -78, 75, 40, -70, + 73, 72, 50, 106, 34, 97, -70, -99, 74, -18, -103, 70, 66, -66, 106, 43, -68, 29, 111, + -71, -104, 114, -96, -39, -35, -58, 102, 104, 65, 63, -98, -64, 105, 18, -57, -55, -42, 114, + -96, -119, -2, 29, -94, 118, -62, -99, -41, 24, 105, -42, 23, 98, 51, -87, -76, -30, 115, + -86, -18, -126, 76, 10, -27, -2, -113, -43, -8, 87, -89, 126, 50, 104, -48, -123, -80, 69, + -106, -69, 71, -126, 56, 83, 86, 84, -106, 110, 11, -86, -48, 5, -85, 73, 82, 30, -50, + -54, -71, 15, -76, -91, 25, 59, -88, -74, 32, -115, 11, 5, 122, -123, 56, 47, 5, -78, + 5, 72, -126, 79, -49, 37, -108, 68, 8, 73, -13, 116, -64, 115, -20, -48, -41, 76, -53, + 51, -120, 10, -23, -28, 74, 89, -16, 17, 105, 60, -14, 52, -110, -32, 40, 2, 0, 107, + 110, -101, 63, -79, 33, -40, -57, -42, 91, 25, 106, 126, -115, -98, -14, 36, 53, -43, 49, + 21, 33, -73, 20, -124, 49, 52, 8, 72, 24, 53, 51, -69, -14, -38, 71, 116, -15, 21, + -46, -24, 124, 65, 43, 98, 80, -94, -118, 97, -66, 2, -59, 50, 110, -105, -6, 15, 79, + 117, -80, 58, 114, -44, 17, -102, 68, -123, -25, 38, -16, -81, -18, 95, 54, -4, 72, 121, + 32, -50, -31, 56, 75, -87, 34, 33, -93, 80, -101, -101, -92, -61, 124, 53, 105, 108, -23, + -57, -71, -15, 74, -87, -107, 77, -13, -102, 62, 113, -80, -93, -67, 112, 76, 104, -51, 17, + 36, -85, 67, 58, -39, 68, 0, -114, 80, -42, -91, 16, 76, 102, -123, 62, -16, -63, -111, + -104, -30, -51, 90, 87, 6, -10, -15, 3, 109, 113, -80, -65, -6, 58, 88, -108, 105, -27, + -78, 66, -88, -47, 33, -124, 80, -25, 99, 0, -16, 96, 58, -67, 97, 85, -64, 124, 18, + -124, 18, -6, -32, -1, -47, -103, 12, 46, 62, 36, 41, -105, 76, -32, -102, 5, 122, 10, + -32, -2, 98, 11, 25, 64, -50, -67, -69, -115, -101, 48, -15, 113, 50, -37, -47, -61, 96, + -106, 30, 79, 61, 13, 9, 123, -93, 98, -110, -111, 32, -103, -118, -106, 55, 15, 21, -101, + -90, -21, -7, 110, -12, 6, 16, -41, 96, -62, 61, -60, -18, -127, -18, 26, -27, -69, 116, + 88, 62, 40, -54, 26, 55, -48, 9, 35, 90, 109, -24, -4, -67, 61, -17, 15, 31, -107, + 44, -75, 49, -99, 110, -109, -124, -32, -122, -34, 50, 119, -81, 52, 115, -85, 35, -82, -69, + -117, -41, -5, 46, 61, -52, -60, -12, -23, -81, 32, 40, 76, -50, 97, -116, 84, -79, 26, + -7, 104, -77, -111, 89, 7, -104, 104, -21, 77, -118, 48, 91, -67, 65, 67, 89, -10, 19, + 109, -17, -62, -116, 100, -88, -107, 49, -49, -101, -56, -23, 61, -86, -70, 111, -47, 114, 84, + -110, 56, 48, -36, -39, 83, -94, -90, 3, -111, 117, -8, 35, 90, 29, 74, -24, 88, -57, + -1, -65, -83, 67, 27, 89, -42, 13, -12, 72, 4, 107, -120, -13, 25, -67, 125, 37, 10, + 70, -127, -28, -96, -45, -32, 19, -74, -2, -71, -71, -31, 40, -16, 67, 107, 47, 121, -94, + -113, -62, 113, -116, 59, 49, 125, -77, 26, -116, -81, 21, -41, 95, 33, 32, -85, 51, 96, + -83, 68, 40, -118, 81, 57, -46, -104, -77, 22, -48, -82, -68, -12, 120, 86, -54, 92, 75, + 66, -13, -30, -88, 58, -82, -81, 126, 24, -104, 63, -96, 69, 90, 22, 6, 79, -52, -120, + 126, -57, 111, -83, 53, 123, 73, -120, 16, 23, -41, -98, 65, -122, -48, -5, -95, 59, 72, + 66, -51, -63, -106, -112, 73, 39, -66, 67, -60, -102, -62, -49, 17, -10, 22, 67, 54, -48, + 87, -107, 38, 117, 103, -89, -124, 26, -112, 37, -102, 62, 69, -119, -69, -44, -8, 36, 28, + 31, 45, 69, 48, 39, 36, 119, 92, -33, -57, -80, 33, 83, -94, 9, -26, 86, -41, 126, + -113, 112, 83, -22, 37, -60, 84, 17, 110, -53, -55, -58, -53, 103, 112, 60, 36, 7, -44, + 94, 23, -114, 17, -60, 119, -39, 84, -43, -105, -74, 42, -13, -84, 92, 120, -29, -111, 29, + -93, 30, -77, -53, -17, 99, 91, 95, 33, 49, 12, 88, -40, 38, -120, -21, -54, -124, -28, + -46, -71, 25, 14, 118, -43, -37, -44, 117, 108, 56, -20, 92, 119, -80, 97, 38, 41, -55, + -46, 27, 81, -97, 56, -123, -73, 86, 119, -44, -9, 22, -117, 18, 102, -6, 25, -64, 124, + -91, 15, 113, 48, 126, 87, -57, -28, -12, -123, -45, 63, -122, 107, -30, -112, 91, -46, -25, + -64, -56, -37, -99, 68, -22, 42, 7, -43, -25, -26, -16, -102, 113, -57, -74, -40, -15, -61, + -124, 115, -74, 41, 104, -82, 38, -50, 39, -13, 82, 126, 48, -57, -88, -49, 7, 84, 4, + -29, -45, 25, 84, -38, 55, -114, 84, 114, -111, -103, -77, 20, 5, 55, 115, 92, 117, -53, + -7, -74, -70, -43, 27, 92, 24, -123, 14, -7, -24, -46, 11, 35, 107, -108, 3, 109, 26, + 36, -76, -67, 123, -54, -117, -97, 124, -121, -55, 71, -46, 50, -10, 57, 104, 1, 57, 29, + -63, -22, 111, 115, 40, 3, -106, -16, -67, -21, 114, 54, 123, 126, -95, -17, 26, -44, 73, + -92, -87, -14, 15, -115, 1, 13, 108, 13, 9, 97, -24, 112, -51, -64, -6, 113, -63, -59, + -107, -98, 14, -22, -39, 86, -72, -9, -95, -31, -32, 26, -120, -79, -127, -58, -124, -7, -108, + 79, 124, 50, 27, -93, -87, 102, 87, 32, 93, 31, -17, 36, 58, -46, 52, 74, 46, -122, + 37, -65, 99, 103, -14, 31, 41, -104, -48, -121, 102, -68, 10, -55, 92, -91, -80, 120, 103, + -80, -122, 56, -47, 126, 13, -30, -105, 111, 4, 6, 107, 27, 94, 77, 29, -53, -34, 13, + 107, -76, 16, 10, 109, 18, -125, -61, 42, -65, 67, -122, -91, 41, 75, -19, 34, 90, 91, + 118, 119, 8, -61, 32, 127, -111, -24, -58, 54, -117, -41, -37, -99, -120, 10, 107, -6, 21, + 45, -9, -27, 65, 18, 124, 106, -100, 94, 17, -2, -126, -64, 110, -54, -58, -21, 74, -110, + -70, -112, -10, 125, -18, 123, -25, 107, -63, 117, -50, -57, 20, -65, 21, -51, -117, -22, 44, + -55, -44, -71, 9, -33, 110, 87, 99, -111, 46, 123, 50, -40, 111, -49, 81, 65, 43, -30, + 69, -2, 28, 28, -49, 126, -118, 103, 71, 74, -63, -61, -64, 115, 76, -51, 63, 43, 106, + 9, -43, 113, 72, -92, 121, 94, -90, 72, -7, 56, -127, -86, -49, -104, 113, 110, -43, 77, + 55, -99, 112, -26, -35, -101, -79, 56, 95, -69, -92, -124, -43, -32, 62, -47, -58, -28, -127, + 65, 82, -65, -87, 74, 92, 81, -99, 102, -54, 10, -61, 121, 17, 105, -19, 91, -71, -52, + 49, -8, 57, 81, 123, 35, -62, 56, -39, -88, 80, 32, -25, -11, -71, -95, -25, 37, 119, + 98, -65, 49, -90, 40, -37, 26, -58, 25, 121, -63, -75, 30, -77, 58, 23, 23, -122, 47, + 88, -34, -1, 124, 45, -12, -77, 34, -57, -112, 20, 116, 125, 104, -79, 21, -38, 70, 77, + -94, -38, 6, -79, 96, 110, -108, 93, -44, -77, -36, 9, -41, 87, 41, 54, -44, -11, -41, + 86, 74, -102, 63, -61, -103, -52, -84, 83, 120, -103, 46, 91, -118, -68, -50, -122, 65, 108, + -39, 32, 72, 80, -30, -66, 72, 51, -79, 120, -6, 101, 109, -105, 50, 2, 76, -104, 89, + 33, -20, -110, 21, 26, -9, 71, 125, -93, -50, 114, -61, -40, -11, 106, -94, -15, -85, 115, + 28, 120, -14, -86, -20, 37, 89, 30, 2, -16, -93, 47, 85, 106, 47, -38, -26, 24, 107, + 26, -41, -100, 103, 105, -104, 76, -31, -89, 24, -64, 121, -55, 48, 71, 116, 106, -84, -78, + 20, 107, -25, 26, 18, 126, 107, 35, -82, -74, -100, -118, 118, -124, -46, 91, 64, -76, -41, + -9, -87, -44, 121, -42, 63, 33, -48, 55, -32, -22, 84, 4, 121, -101, 71, -23, 78, 80, + -42, -126, -21, 127, 2, -36, 50, 38, 16, 68, -121, 92, 8, -32, 53, -86, 52, 27, -126, + -17, -104, -92, -26, -96, -125, 61, -23, 20, 69, 84, -36, 40, 2, 29, -77, 58, -83, 105, + -96, 62, -112, 7, 1, -123, 51, 105, -124, 33, 28, -19, 42, 74, 33, 95, 7, -122, -108, + 124, 110, -69, -76, 43, 4, -55, -17, 68, 10, -21, 67, 67, 117, -8, -25, 46, 16, -27, + 4, 62, -101, -95, 64, -42, 26, 20, 66, -37, 17, -116, -41, -7, -42, -69, 124, 88, 45, + -14, -110, -45, -18, 55, -104, 86, 13, -121, -31, -22, 25, 39, 62, -12, 119, 34, -117, -81, + 123, 66, -2, 124, -112, 30, 74, 97, 85, 112, 69, 27, -72, -102, 46, 70, 30, -31, -44, + -110, -11, -67, 82, 32, 108, 90, 11, 32, -25, 47, 64, -121, -47, -113, -6, 75, -125, 120, + -9, 62, 46, 71, 120, -1, -36, -42, 9, 34, -122, 126, -91, 45, 90, 116, 112, -84, 101, + 96, -85, 34, -48, 69, -119, -20, 126, 68, -77, -112, 73, -80, -117, 7, 87, 55, -118, -102, + 34, 98, 65, -90, 50, -102, 74, -82, -15, 13, -24, 84, 25, -19, -123, 48, 38, 51, 33, + -17, -90, 15, -51, 64, 92, 45, 116, 14, 4, -122, 84, -28, -121, 127, 110, -80, 15, 18, + -50, -127, -41, 79, 120, -88, 53, -57, 108, -21, 125, -52, -19, 122, 23, 57, -22, 19, -38, + -97, -40, 47, -92, -52, 110, 111, 29, 4, -90, 92, -117, 9, -6, -90, -95, -4, -35, 118, + -8, 90, -44, -76, -122, 54, -14, -110, 43, 67, 5, 95, -15, -114, 109, 91, 44, -123, 29, + -76, 109, -56, 124, -8, -50, 37, -107, 65, 0, -107, 28, 27, -108, -43, -72, 4, -30, -15, + 120, 65, 85, -85, -100, 75, 52, -19, 110, 25, -52, 17, 65, 107, 112, -10, 94, -27, -18, + 108, -81, 6, 9, 114, -109, 12, 67, -118, -57, 75, -43, 26, 93, 57, 10, 82, -6, 69, + -12, -76, 60, -65, 39, -11, -59, 6, -92, 93, -68, 77, 65, 106, 81, -66, -32, 26, 2, + 28, -38, -115, -36, -51, -95, 114, -44, -103, 73, 114, -87, 58, 0, 82, -24, 26, -52, -50, + 49, -16, 62, -117, 57, -8, -76, 9, 119, -74, 44, 75, 117, -80, 77, -50, -34, 97, 13, + -75, 113, -126, -76, 81, 122, 71, -94, 84, -38, -11, 68, -100, 37, 118, -44, -72, -93, 43, + -116, 36, 8, -23, -115, 110, 67, 44, -35, -27, 45, 102, 46, -84, -95, -67, -87, 66, -68, + -2, -104, 22, 60, 94, 25, 27, 33, -40, -21, 41, -110, -34, 41, 96, 114, -51, -122, -116, + -18, -66, -80, -87, -17, 118, -67, -65, -94, 33, -80, 4, 40, -44, 79, 69, 83, -62, 83, + 41, 88, 111, -39, 78, 4, 5, 4, -94, -36, -89, 104, 4, 123, 76, 37, -35, 24, 79, + -91, 91, -98, -117, -60, 11, 86, 60, -126, -40, 101, -59, -67, 54, 23, 0, -68, 2, -104, + 10, -125, -121, 56, 1, 43, -96, -13, -32, 36, 34, 100, 34, 5, 37, -43, 33, 68, 9, + -103, 34, -10, 11, 67, 95, -100, -59, 61, -51, 7, 14, 86, 103, 12, 109, 45, -105, -121, + -114, -27, -30, 99, 1, 58, 2, -109, 14, -64, -93, -1, -44, -51, -57, 2, 16, 9, 22, + 11, -106, -56, -95, 81, 103, 34, 108, -123, 54, 113, -112, -71, -83, 10, -127, 8, 4, 13, + 82, -23, 36, 95, 8, -27, 83, -12, 19, 50, 49, -62, -73, -15, -108, 64, 88, 57, -37, + -119, -41, 106, 69, 96, -65, 89, 85, -62, 93, -2, 33, -108, -94, -47, -104, -15, -105, -93, + 55, -64, -115, -26, 3, 116, -114, -121, 72, -24, -104, -50, 98, -31, 33, -94, -35, 68, -79, + 109, -110, -109, 45, 109, -37, 125, -58, -39, -25, -89, -42, 109, 66, -100, -29, -74, -49, 119, + -105, 5, -49, -116, 22, 5, -80, 58, -89, 5, 94, 40, -19, 22, -25, -86, 80, -96, -120, + 17, 117, 110, -16, -44, 105, 53, -50, -4, -5, -40, 70, -50, 47, -66, 124, 43, 19, -72, + -100, 115, -73, -13, -69, -17, -1, 2, 54, 3, -56, 79, -75, 68, -118, 100, -16, 112, 88, + -10, -13, -25, -49, -29, 20, -75, 102, 117, 103, 0, -29, -26, 116, 25, -4, -112, 105, 41, + -83, 23, -60, -60, 6, -69, -44, -85, -108, 122, -65, 94, 12, 58, 86, -28, 19, -55, 121, + -26, -47, 98, -54, -98, 108, -117, -116, 11, 10, -123, 99, 21, 0, -30, 34, -113, -41, 50, + 99, -88, -88, -17, 37, -37, 91, -112, -87, 24, -33, 2, 43, -64, -77, -35, -10, -106, -109, + 65, 82, 67, 38, 34, -40, -108, 125, 123, -120, 68, -84, -65, 99, -126, -4, 98, -77, 59, + 71, 93, -71, 58, 45, 26, -31, -51, 34, 102, 57, -116, 115, 4, -33, 0, -75, -120, 100, + -73, 116, 4, -38, -102, -54, -67, 115, 109, 75, -121, -37, -55, -123, 116, -58, 30, -81, 67, + 78, -75, 92, 36, 59, -30, 44, 12, 89, -20, 121, -40, 41, -53, 25, 89, -113, 36, -60, + -61, -124, 31, -47, 21, -67, -53, -98, -101, 36, -127, -22, -75, 116, 32, -100, -120, 91, 36, + 49, -97, -50, 114, 48, -46, 92, -96, 98, 28, 99, -25, -116, -30, -123, -105, -29, 76, -81, + -98, -109, -113, -49, -50, -65, 76, 106, -120, 125, -111, -44, 99, -61, 57, 65, -101, -103, 63, + -121, -60, -56, -110, -62, -85, -82, 29, 36, -76, 15, 2, -53, -127, -51, -53, -30, 71, 66, + -39, 30, -14, -69, -45, 42, -47, -20, -22, -6, 123, -95, 101, -18, 22, 33, -82, 92, 43, + -114, -11, -79, 101, 9, 99, 31, -79, -74, 99, -77, 70, 10, -108, -48, -115, 98, -120, 86, + 93, -38, 55, -14, -18, 55, -119, -4, 35, -81, 34, -91, -83, -35, -65, -89, 21, -67, -20, + -8, 111, -63, -15, -29, 40, -104, -84, -59, 70, -64, -116, 42, -2, -96, 58, 103, 46, 81, + 67, -34, 58, 75, -125, 70, 24, 18, -121, -49, 105, -26, 41, -96, 100, -73, 65, 12, 89, + -58, -26, -103, -40, -61, -83, -3, 68, -22, 54, 84, 74, -65, 99, 10, 24, -17, 66, 90, + -76, -73, 84, 73, 31, 120, 41, -13, 107, -76, 41, 23, -20, -88, 121, 21, -3, -2, -14, + -88, -67, 124, -72, 72, 111, -86, 28, 21, -126, 127, 108, -73, -12, 29, -33, -48, -59, 43, + 75, 108, -121, 83, 33, 76, -93, -37, 23, -35, 84, -4, -106, 16, -108, 99, -48, 15, 26, + 7, -123, 81, 17, 55, 83, -23, -53, -119, -4, -21, 79, 1, 106, -35, 40, 78, -53, -80, + 12, 71, 57, -55, 36, 99, 37, 91, 67, -14, -58, -58, -72, 46, 72, 99, -124, -110, -10, + -114, 98, -104, 40, 126, -46, -53, 121, -91, 66, -2, -2, -46, 97, -64, 59, 59, 31, -37, + 16, -115, -83, 82, -16, -41, 41, -60, 23, 109, 74, 104, -81, 76, -3, -87, -81, 119, 30, + -44, 53, -19, -78, 7, 40, -17, 3, -7, 127, 42, -41, -38, 44, -116, 103, 11, -83, -113, + 31, -54, 29, -118, -5, -117, 4, -49, -98, -52, -1, 109, 69, -92, 118, 16, -113, 100, -95, + -107, 119, -41, -37, 12, 49, 66, -118, -54, -58, 108, 60, -44, -3, -30, -96, 54, -100, 122, + 50, -32, 46, 88, 0, 62, -56, -90, 19, -53, -112, -74, 57, 66, 42, -104, -105, 72, 42, + -104, -39, -26, 75, -117, -55, -94, 45, -36, 74, 42, 9, 52, 102, -46, -112, -30, -83, 81, + 94, 19, 53, -109, 1, 31, 65, -17, -71, -124, -58, -123, -66, -89, -69, -10, 59, -7, 110, + 106, -68, -84, -50, 9, 47, -20, -123, -36, 95, -87, 79, -68, -105, -94, -105, -36, -108, -69, + -124, 124, -9, -79, -86, 111, 124, -65, -33, 82, 113, -20, -35, -126, -35, -70, -108, 87, 101, + -2, -79, -52, -76, 35, 42, -117, 106, -21, -56, 91, -63, 104, -106, -39, 64, -83, 108, 127, + 87, -122, 66, 22, -52, -8, -54, 19, 120, 42, 44, 50, 1, 29, 97, 13, 106, 48, -66, + -100, -25, 1, -5, 63, -116, -3, 36, -114, -21, -22, -66, -99, -92, -47, 88, 21, 92, -53, + -13, 8, 96, 85, 39, -2, -65, 22, 66, -94, -34, -9, -126, 58, -70, 45, -40, -87, 10, + -66, 108, 89, 102, -55, -25, -58, -59, 66, 20, -106, -107, 120, -28, 110, -30, -41, -19, 49, + 19, -49, 105, 60, 21, 79, -2, 10, -59, 12, -104, 6, -24, -43, 3, -121, 36, -88, 20, + -25, 62, 114, -111, 52, -99, 119, 56, -62, 78, 43, 20, -23, 105, 71, 54, 109, 72, 97, + 89, -109, -1, -76, 33, -85, -92, 56, 14, 22, -49, -110, 68, 25, 44, 34, -44, 78, -99, + 126, 45, -119, -9, 36, -41, -24, 38, 1, 10, 6, -93, -114, 14, 115, 40, 117, -7, -94, + 42, 64, 35, 24, 108, -48, -125, -93, -101, 38, -104, -84, 24, -58, -124, 69, 64, 15, -71, + 80, -21, 102, 116, -53, -110, -117, 127, 78, -113, -1, -64, -123, 65, 126, -36, -44, 41, 76, + -94, -111, 108, 24, 20, 56, -98, 66, -2, 11, 75, 69, -5, -34, 119, 73, -125, 77, 106, + -93, -13, -18, 85, -1, -109, 103, 57, -74, 17, -8, 110, -114, -120, -72, -38, -10, -100, -3, + 90, -32, 24, 16, -127, -69, 1, -108, -47, 68, 70, 86, 21, 18, 2, 124, 77, -50, -47, + -100, 43, 8, 53, 10, 25, 40, 3, -98, 110, 0, 26, -48, 92, 2, -37, -33, 65, 106, + -54, 75, -39, 20, 91, -23, -38, -18, -5, 58, -105, 8, -84, 94, -49, -111, 66, -79, -39, + 51, 28, -37, 75, -37, -79, 27, 87, 5, -118, -56, -98, 76, 122, 42, -48, 122, 126, -20, + -41, -126, -93, 85, -24, 45, -60, 80, -34, -35, 51, -32, 34, 33, -41, -47, 5, 63, 1, + 84, -10, -37, 27, -115, 73, -27, 46, -96, -44, 14, 16, 112, 83, 123, -71, 39, 21, -37, + 6, 44, -10, -52, -86, 97, 0, -112, 36, -78, 88, 112, 26, 0, -42, 50, -45, -110, -50, + -97, 120, -94, 25, 93, 35, 22, 67, 109, 12, 108, -103, 64, -96, -39, 67, 82, -102, 97, + 14, -8, -86, 72, -99, -52, -54, -63, 34, -86, 5, 75, -118, -6, 73, 104, -75, -22, 36, + -62, -62, 58, 122, 83, 75, 66, -35, 66, -45, -37, -56, -9, -78, 53, -19, -15, -40, -51, + 43, -96, 120, 92, 106, 104, 97, 7, -104, 28, 12, 39, -113, -69, 62, 112, 117, 96, -115, + 126, 64, 67, 39, -42, -30, 70, -122, -44, -77, 111, -87, -30, 124, -49, 66, 92, 64, 72, + -39, 126, 12, 1, -108, -118, -91, -125, 112, -123, -113, -111, 83, -42, -107, -32, -55, 60, 16, + 38, -59, 33, 68, 52, -97, 79, -88, -74, -102, -117, -18, 123, -28, 9, -23, 117, -4, 122, + 94, 124, -109, -79, -91, -57, -81, 73, 126, -63, -58, -83, -43, 89, -97, 86, 96, -64, 123, + 118, -16, 91, 81, 74, -102, -91, 60, 53, -107, 126, -75, -46, 61, -61, -3, -83, -54, 10, + -26, 78, 118, 96, 63, 121, 90, -89, 110, 93, -24, -101, 86, -89, -40, 87, -35, 34, 36, + -97, 126, -99, 22, 108, -55, 94, -21, 75, -75, 38, 31, -115, 31, -40, 102, -37, 33, -46, + -31, 0, -62, 4, 125, 66, 118, 37, 105, -16, -117, 6, 101, 4, 73, -56, -51, 30, -36, + -106, 20, -29, -33, 44, 3, -56, -18, -100, 62, -59, 108, -57, -119, -65, 25, -66, 36, 45, + -121, 67, -31, 33, 95, 9, 102, 54, 66, -34, 93, -68, -111, -74, -3, 9, -41, -113, 27, + 41, 85, -49, -72, 72, 51, 42, 109, -65, -13, -21, -36, 102, 66, -7, 14, -108, -98, 101, + -46, -99, 77, 120, -33, 33, -1, -74, 66, -24, -120, 8, 37, -103, 70, -127, -101, 32, -79, + 52, 69, -90, -20, 17, 27, -55, -49, 77, -64, 27, -27, 111, -43, -99, 75, 21, -44, -91, + -70, 91, 24, 27, -17, -97, 106, 59, -117, -5, 76, -25, -98, 100, 24, 52, -77, -1, 11, + 49, 5, 122, 58, -40, -112, -18, -63, -124, 53, 37, -9, 2, 39, -64, 29, 60, -120, -55, + -45, 70, 97, -84, 1, -39, -49, 101, 50, 35, -60, 11, 120, 91, -117, 50, 111, 49, 103, + 36, 12, 48, -89, 22, 58, -39, -26, -36, 88, -15, -10, 19, 117, 108, -55, 60, -47, -87, + 61, 112, -77, 107, -36, -67, -79, -39, 83, -18, 113, -116, 44, 31, -83, -1, 65, -109, -18, + 119, -124, 21, -71, 62, 74, -52, -44, -44, 37, -46, 116, -58, 118, -15, 51, -56, 39, -102, + -47, -50, -60, -97, -31, 43, -72, -109, 82, -100, 27, 60, 15, 111, -105, -98, -116, 104, 94, + -101, -1, 47, 36, -21, 40, 42, -57, -97, -58, 47, 102, -102, 125, 96, 100, -95, 116, 95, + 9, 56, 13, 34, 93, 60, -81, 19, 124, -1, -61, 33, 43, 42, -8, -106, -100, 12, 98, + 58, -34, 126, -63, 108, 16, 79, 69, 39, -56, 72, -70, 10, -28, 82, -63, 116, -30, -65, + 100, -31, -34, 88, -10, 28, 120, 112, 114, -97, 43, 52, 48, -54, 77, -99, 97, -22, -15, + -21, -52, -62, 75, 5, 100, -95, -34, -40, 16, 59, 19, 7, -78, 93, 48, 83, 9, 74, + -15, -91, -79, 117, -2, 40, -109, 60, 27, -60, -79, -55, 78, -93, -115, 29, 96, 117, 101, + 14, -42, 56, -7, -84, 65, -58, -89, 13, 93, -13, 53, -112, -25, -13, 105, 81, 29, -102, + -111, -120, -43, -87, -111, 19, 58, 71, 117, -18, -44, 26, 74, 48, -40, 90, -106, -27, -30, + 67, -107, -3, -97, -125, -67, 41, 33, -52, 22, -1, -4, 59, 84, -69, 92, 89, -56, -51, + -121, 81, -49, 82, 125, 120, -1, 60, 106, 38, -37, 112, -73, -72, 47, -48, -56, 81, 3, + -63, -108, -27, 35, -2, 66, -12, 79, -40, -10, 93, 60, 114, -108, -78, 55, -43, 5, -100, + 16, 18, 93, 113, -62, 64, -54, 93, -1, 38, 33, -73, -105, 0, -71, -61, 16, -62, -72, + -52, 81, 13, -24, 33, 9, 100, -127, 27, -3, 43, -16, -12, -105, -68, -107, -19, 78, -124, + 71, 8, 36, 18, -58, 1, 87, 10, -94, 120, 81, -85, 67, 53, 2, -13, -12, -3, 77, + 59, 26, 99, 100, -57, -82, -63, -123, 85, -83, 49, -14, -109, -96, -121, 88, 112, -94, 44, + 102, -59, -57, 51, -80, -94, 63, -31, -53, -124, -56, -9, 44, -14, -13, 125, -35, 13, 124, + 18, 39, -41, -95, 7, 80, 109, -124, -44, 69, 24, 92, 46, 89, 17, 83, -78, -61, 107, + 125, -90, 113, -50, -32, 3, -124, -108, -111, -71, -70, -51, -23, 67, -116, -107, 22, 85, -125, + -15, 126, 106, -81, 104, -28, 37, -45, 77, 81, 13, 120, -24, -41, -3, -45, 79, -16, -6, + -94, 62, -83, -70, 16, 22, 39, 106, 61, -17, 88, 62, 22, -98, -64, 21, 87, -3, 99, + -56, -2, -34, -121, -10, 63, -72, 13, -87, -61, -121, -20, 58, 43, -13, -46, 21, 9, 49, + 4, -1, -16, -91, 54, -126, -86, -88, -104, -16, -84, -45, 39, -46, -75, 42, -126, 61, 118, + -105, -85, 57, 57, -59, 94, 105, 102, -17, 17, -75, 65, 102, -34, -67, -66, 62, -116, 121, + 53, 110, -120, -124, -6, -87, -73, 65, -13, -114, 58, -80, 22, -70, 59, 120, 70, -92, 23, + -67, -10, 106, -108, -67, 83, -46, 124, -2, -56, 28, 35, -106, 125, 112, -16, 26, -106, -52, + 90, 34, 95, 40, 85, -42, -90, 90, -90, 93, 99, 72, -55, -9, 78, -91, 109, -79, -64, + -4, 48, 4, 99, 65, -101, 39, -47, 32, -45, -86, 105, 120, -95, 0, -116, 18, -80, 45, + 53, -84, -112, 102, 72, 93, 8, -25, -121, 72, 106, 53, 125, 44, -2, 74, 120, 101, 35, + 42, -37, 85, 62, 33, -43, 102, -122, 9, 69, 40, -72, 18, 16, -95, -33, 66, 68, -105, + -91, -40, -64, -93, -19, -122, 56, -64, 47, 82, 12, 59, 9, 0, 14, -25, -22, -115, -34, + 113, -9, -2, -43, -22, -36, 89, -60, 102, -68, 74, -113, 12, 92, 47, -31, -23, 97, 26, + -94, -31, -108, -73, -62, 80, 23, -70, 34, 36, -75, 75, -7, 15, -122, 83, 32, -57, 83, + -42, -93, 48, 61, 65, -6, -55, -14, -118, -82, -98, -97, 41, 60, 71, 55, -89, -95, -59, + -32, 85, 29, -63, 110, 87, -125, -57, 69, 107, -113, -96, -43, -40, -17, 67, 103, 95, -104, + -39, 45, 16, -40, -28, 113, 31, -95, -87, 69, -39, 3, 25, -81, -47, 122, 68, -57, 37, + -115, -44, 120, -17, -78, -103, -95, 89, 77, -75, 52, -19, -94, -94, 115, 53, 97, 54, -77, + 51, 26, 10, 82, -93, -45, -120, -93, 10, 25, -11, 122, -48, 16, 39, 42, 46, 102, 88, + -39, -101, -103, 68, 120, -62, 7, -36, 12, -92, -30, 64, -25, -12, 30, 85, -10, 30, -76, + -3, 40, 70, -119, 32, 3, 17, 38, -66, -100, -11, 54, -37, -104, 29, -74, -65, -122, -26, + 120, -91, 110, 121, -59, 87, -65, 82, -106, 11, 106, 19, -23, -73, 37, 120, 55, -83, 91, + -94, -37, 38, 54, -33, 63, -64, -82, -41, 103, -57, -107, -14, 81, 3, -9, -32, 103, 87, + 124, 77, 64, -62, -62, 14, 55, -60, 79, 79, 9, -91, -46, 1, -17, -82, 30, 51, -36, + -89, 121, 66, 1, 72, 84, -50, -69, -84, 90, -106, 98, 87, 25, 115, 3, 82, -106, -17, + 105, 60, 20, -47, -59, 62, -83, -58, -113, 95, -21, 5, -22, 19, -103, -23, -67, 93, 31, + -38, -103, 103, -125, 97, 75, -62, 125, 0, -110, 2, -43, 13, 117, 85, -41, 107, 64, 74, + -79, -12, -20, -70, -14, 93, -116, 83, -69, 123, 102, 91, 35, -42, -91, 24, -68, -84, 24, + -83, -22, -84, 50, 127, -105, 87, 31, -91, 11, 102, -88, 114, -34, 5, 105, -20, -66, -26, + -16, -78, 67, -22, -7, -114, 35, 92, -108, -7, -107, 122, -91, 112, -28, -43, -106, -87, -102, + -77, 46, 122, 45, 47, 78, 123, -79, -29, 31, 46, -84, 42, -28, -16, 90, 82, -91, 124, + -14, 8, 31, 46, 75, 91, 119, 57, -96, -28, -80, -26, -119, 44, -69, -61, -123, -95, 10, + -3, 108, 112, 12, -119, -31, 18, -59, 89, 35, -5, -52, -125, 96, 50, 105, 48, 36, -117, + 21, -114, 42, -65, -9, 16, -29, 4, 107, 80, -81, -94, -92, -33, 86, 103, 61, -98, -31, + -64, -97, -21, -3, 45, -41, -51, 118, -96, -63, 33, 114, 6, -61, -73, -69, -121, 42, -46, + -120, 12, -9, -59, -55, -93, 4, -24, -107, 22, 22, -53, -100, 101, -18, 43, -89, -99, -33, + 22, 29, 41, 5, 52, 80, 0, -81, -37, -113, -47, -84, -86, 6, 2, -117, -121, 20, 113, + 94, -104, 93, 37, -4, -20, -82, 121, -94, -93, 0, -58, 15, -67, 10, 117, 0, -47, 97, + -5, -80, 104, -63, 126, 21, 88, 31, -107, -98, 125, -17, 0, 91, -15, 100, -50, 64, 17, + 120, 10, 18, 50, -70, 86, 76, -78, 55, -95, 38, -50, -3, -22, 43, -26, -36, -68, 30, + -47, -125, 38, 111, 19, -39, -96, 6, -69, -34, -8, 123, -120, -115, 98, -45, -52, -107, -33, + -25, -91, -94, 9, -122, 43, -86, 0, 32, 84, 18, 116, -6, -48, -97, -48, -57, 92, 40, + -57, -127, -103, 123, 55, 39, -10, 15, -64, 48, -121, 20, -17, -66, -104, -121, -125, -97, 9, + 70, -96, 53, 65, 104, -8, 7, -43, 66, 11, 102, 56, 33, 37, -105, -60, 51, -67, -42, + -52, 85, -23, -124, 27, -76, 113, -39, 17, -63, 105, -75, -89, 63, 114, -1, -8, 26, -80, + -36, -81, -19, -30, -15, 73, 62, 84, 3, -40, 120, -103, 97, 85, -17, 34, 84, 43, -109, + -125, 31, -102, -36, 51, -23, 107, -119, -126, 45, 62, -4, -36, -104, 10, -37, 92, -102, 26, + 109, 78, 55, 29, 103, -12, -85, -87, 55, 74, -11, 96, 64, 42, -33, -76, -84, 32, -66, + 19, -123, -23, 63, 91, 82, 122, -44, 119, 118, 98, -96, -20, -126, -28, -88, 97, 69, -2, + 60, -16, -116, -62, -104, 22, 52, 5, 64, 24, -94, 7, -19, -74, -75, 70, -6, 8, -5, + -8, -87, -22, -120, -114, 49, -121, 80, -9, 111, 51, 60, 63, -64, 47, -108, -17, -52, -59, + -42, 104, 47, 115, 10, 119, -56, 1, -87, -50, -108, 113, 103, -124, 83, -63, -111, 63, -16, + -13, -110, -84, 16, -18, -110, 81, 117, -104, 98, 110, 50, 108, -29, 29, -18, -72, 29, -60, + -115, 73, 51, 96, 102, -11, -76, -43, 88, -26, 85, -90, 75, 86, 80, 22, 90, -10, -33, + 94, 82, -46, -55, 37, -59, 127, -3, 27, -39, 3, -111, -107, -55, 46, 110, 57, -39, 47, + -36, 126, 100, 66, 8, 45, -110, 53, 77, 116, 117, 54, 52, 11, 78, -78, -55, -35, -20, + -23, -5, -26, -8, -31, 108, -79, 2, -64, 107, 99, -63, -48, 111, 37, 19, 74, 18, -24, + -70, -59, 13, 78, -70, 121, 84, 78, -90, 121, -111, -90, -63, 117, -30, 6, -30, -35, -116, + 108, 50, -14, 61, 67, 11, -24, -122, -84, -64, 37, -50, 79, -9, 101, -109, 68, -22, -79, + -118, 108, 26, 69, -80, -29, -120, -56, 94, 108, 14, -71, -72, -88, -103, 85, 64, 75, 124, + -70, -106, 41, 42, -43, 106, -84, 25, 49, -94, 62, 51, -77, 5, 60, 9, 58, 82, 27, + 2, -88, 70, -24, 3, -126, -43, 65, 45, 25, 34, -98, 13, 80, -52, -48, -100, -120, 113, + -60, 23, 110, -58, 80, 7, -24, -86, 32, 83, -110, -100, 103, -7, -69, -42, -95, -6, 29, + 105, -33, -46, 69, -26, 23, -117, 87, -72, -117, -32, 24, -103, 115, -103, 50, -1, -48, 25, + 80, -8, -41, -65, -54, -80, -33, 116, -124, -92, -98, 44, -21, -58, -21, 29, -62, 26, -120, + 40, 0, 30, 70, 121, 20, -110, -87, 17, 44, 79, 86, -107, 38, -49, -16, 0, -57, 47, + 55, 25, 31, -46, -94, -51, -127, 82, -98, -97, -80, -98, -84, 97, -100, -90, 54, -23, -73, + 42, 51, -93, -40, -99, -28, 63, -35, 6, -74, 9, 81, -74, 75, 29, 37, -47, -93, -46, + 75, -6, 125, 30, -71, -100, -26, -103, -110, -103, -26, -41, -75, 96, 103, -122, 107, 63, -2, + 79, -91, -26, 34, 86, -63, 121, -92, 70, 41, -14, -46, -12, 94, -9, -127, 76, -58, 24, + -16, -59, -58, 113, -17, 4, 54, -107, 3, -118, 33, 117, -107, -67, 106, 108, -38, 109, 24, + -107, 88, -38, -45, -16, -105, 106, -93, -124, 93, 106, -42, -40, -18, -3, -19, 47, 112, -124, + -40, 29, 6, -117, -71, 47, 126, -10, 29, 74, 97, 7, 2, -54, 82, 58, -16, -41, -26, + 1, 10, 22, 109, 84, 54, 29, 7, -38, 109, -123, -15, -37, -51, -24, 8, -13, -32, 72, + -20, 25, -108, 75, -52, 122, -57, 75, -85, -98, 92, -56, -61, -19, -97, 16, 97, 125, 24, + 118, -89, 59, -63, 124, 84, -2, -106, -73, 91, 43, 3, 9, 109, 7, -102, -1, -84, 114, + 53, -92, -72, 73, 98, -24, 66, 103, 48, -23, 119, 55, 48, 2, -97, -20, -7, -96, -89, + -48, 1, 101, -96, -57, -22, -122, 9, -47, -20, 62, -57, 105, 69, 83, -70, 50, 117, -112, + -52, -15, 80, 10, 114, -59, 51, -89, 90, -24, 61, -37, -38, 78, 110, -73, -115, -50, -111, + 99, 68, -44, -78, 4, 18, -54, 90, -25, -90, 86, 93, -47, -70, 119, 54, -115, 99, -60, + -118, 7, 37, 17, 123, -5, 98, -53, -108, -33, -126, 126, -50, -36, 46, -119, -55, -11, 109, + -104, 107, -47, -35, -49, -96, -3, -75, -92, -18, 7, -101, -122, 107, 39, 15, 73, -96, -113, + -110, -101, 19, -65, -76, 35, 10, 8, -106, -38, -54, 119, -87, -39, 73, 17, -97, 43, -29, + 6, -1, 103, 90, -82, -88, 63, 45, -12, -58, -13, 126, 106, 37, 74, 7, -90, -14, -113, + 77, -16, 125, -57, -117, 115, -60, 80, -79, -33, 54, 102, 12, 62, 70, 89, 106, 92, -38, + 41, -110, 99, -102, -73, -48, -48, -33, 47, -40, 57, -69, -71, -63, -116, -80, -54, -58, -118, + 33, -56, 64, 90, -91, 27, 95, -117, 27, 92, -2, 94, 93, 39, 71, -3, 45, -77, -67, + 112, 126, 100, 78, -88, -52, 21, -9, -40, -103, 90, -28, 126, -124, -124, 80, 99, 108, 25, + -9, 87, -63, -71, 66, 8, 34, 119, -63, 41, -33, 121, 90, 107, 50, -110, -34, -4, 65, + -74, -88, 126, -78, -17, -52, 19, -64, 122, 7, -77, -46, 59, 9, 23, -59, 126, 59, -82, + -76, -40, 50, -64, -4, 51, -100, 37, -88, 25, 56, 102, -14, 123, -102, 55, 54, -38, -58, + 15, -4, -59, -23, 95, 112, 85, 56, 3, 35, 20, 35, 100, -16, -5, 103, -50, 122, 95, + -79, 65, 21, 36, 15, 32, 119, 72, 66, -42, -122, 123, -91, 64, -70, -102, 43, -72, -34, + 3, 33, 127, -4, 49, 64, -57, 1, 109, -17, -55, 45, 57, 24, 15, -126, 1, 21, -122, + 25, -47, 65, 96, 115, -57, 39, -34, -8, -85, 44, 123, 36, -90, -97, 41, 86, -116, 71, + -38, 79, -37, 99, -51, 125, 4, 1, 89, 105, -48, -79, -107, -27, 56, -33, -33, 117, 22, + -103, 107, -55, 72, -5, 96, 16, -26, 76, 113, 71, -123, 38, 26, -112, -106, -1, 69, 83, + -99, -55, 112, 48, -107, 36, 124, -5, -99, 88, -120, -53, -121, -37, 47, -69, -38, -2, -1, + -60, -99, 63, 108, -69, -1, -18, -2, -110, 27, -109, 11, 98, 25, 85, -118, -76, -36, -39, + 40, -49, -61, 70, -116, 107, -79, 35, -7, 113, -81, 23, -82, 59, 78, -13, 115, 85, 1, + 89, -83, 26, 13, -54, 87, -102, -52, -33, -32, 6, 47, 73, -12, 91, -6, 68, 102, -43, + -74, -61, 21, -114, -120, -123, 55, -4, 65, 64, 101, 33, 102, -120, 127, 121, -76, -114, -15, + 94, 57, -21, -4, -61, -22, -66, -64, 7, -84, -1, 51, -71, -41, 81, -85, -61, 12, 65, + -67, 19, 12, 59, 65, -67, -78, -78, 51, -121, 105, -62, -35, -116, 35, -106, 71, 126, 104, + 40, 123, -43, 122, 34, -42, -12, -124, -82, -45, 38, 76, -29, 60, -97, -49, 7, -46, 54, + -10, 72, 59, -69, 0, -65, -89, -11, 68, -16, 88, -3, -121, -23, -13, -34, 28, 28, -69, + -99, 45, -80, 56, -8, 18, -105, 95, 86, 14, 40, 30, -79, 71, -81, -92, -44, -50, -2, + -13, 37, -120, -115, -97, -61, 43, 4, -49, -75, -88, -36, -20, 73, -79, -75, -122, 25, 47, + 0, 21, 30, 30, -35, 76, -44, 36, -80, -13, -91, 28, -77, -76, -79, -79, -17, 15, 77, + 58, -119, -109, 57, -77, -25, -121, -27, 38, -109, -74, 105, -91, 36, 86, 18, 67, 24, -106, + -62, 43, -42, -42, 66, -123, 25, -41, 86, 122, -53, 80, -121, 14, -104, -86, 114, -76, 116, + 56, 51, 58, -71, -119, -49, -53, 98, -67, -45, 16, -4, -31, -64, -27, -119, -63, 54, 88, + 95, 120, -119, -57, 98, 32, 89, -43, -113, 5, -53, 81, -46, 33, -14, 95, 91, 40, 45, + -4, 32, -121, 35, -16, 20, 83, 82, -7, 28, 96, 26, -54, -121, -92, 45, -95, 7, -113, + -44, -79, -68, 45, -1, 66, 64, 67, 26, -109, 69, -110, 125, -106, -71, -62, 63, -35, -21, + -58, 50, 23, -53, 85, -84, 34, -66, 65, 96, 110, -48, 107, -77, 35, 102, -12, 37, -69, + 76, -50, -106, 91, 36, -15, 12, 9, -24, -81, -8, -104, 56, -72, 16, 100, 76, 127, 47, + 92, -25, 69, -76, -1, -78, -8, -126, 85, 23, 14, -72, 20, -120, -88, -93, 23, -112, -45, + -39, -91, -62, 121, 67, 39, 34, 101, 108, 104, 110, -126, 91, -3, 45, 94, 94, -82, -108, + -85, -61, 54, -44, -98, -64, 29, 73, 65, -121, -59, 31, 40, -86, 2, 109, 42, 65, -88, + -116, -80, -98, -102, -24, -29, -67, 102, -38, -103, -57, -87, 52, -43, 6, -126, 65, 86, -91, + -57, 34, -62, -27, 106, -45, -23, 107, -94, -75, -111, -23, -85, -125, 92, 67, -66, 25, -32, + -94, 79, -54, -19, -65, -13, -105, -65, -33, 59, 24, -101, 36, -113, -124, 48, -85, -50, -116, + -8, 87, -86, -118, 40, 107, 82, 10, -124, 67, -10, 102, -126, 12, 102, 81, -21, 62, -1, + -19, -36, 20, -10, -22, 13, 40, -20, 69, -5, 106, -38, -8, -27, 88, 116, -51, -53, 62, + 83, -104, 99, -53, -115, 43, -94, 119, -75, 91, 82, -50, 41, 18, -102, -58, -37, 65, -92, + 118, -95, -25, -60, 35, -91, -11, -4, 60, -70, -122, 89, -12, -89, -61, -22, 4, 17, 59, + 72, -61, -35, -15, 67, -37, 125, -82, 44, -10, 92, 47, -87, -110, 10, -29, 29, 54, 27, + 64, 47, 60, -91, 18, -95, -65, -14, 118, -17, -85, -15, -17, 32, 2, 81, 18, 10, 78, + -5, 101, 76, -32, 9, -39, 92, -22, 71, -56, -25, 20, -24, -78, -124, 124, -14, 58, 43, + 80, -73, -44, 4, -88, -52, 107, 104, 54, 115, -109, 103, 24, 106, -12, 21, -105, 5, 55, + 120, 5, -70, -75, -119, -51, 74, -43, -66, -68, -4, 18, 35, 51, 87, 84, -68, 69, 122, + 20, -30, 123, -93, -57, -89, -97, -9, 20, -71, -61, -78, -70, 56, 107, -57, -2, -101, -98, + -26, 74, -5, -102, -120, 41, 114, -61, 99, 25, 67, -108, -117, -47, 118, -56, -107, 5, -85, + 52, 100, -41, 63, -34, 24, 48, 26, -104, 95, 116, -93, 74, 16, 65, 37, 11, 28, -108, + 99, 57, -71, 84, 76, -52, -111, 112, -27, 21, 126, -62, -116, -4, -44, -125, -1, -43, 56, + 31, -11, 120, 87, -17, -14, -19, 56, 47, -92, 99, 77, 96, -23, 66, 83, 71, -108, -9, + -80, 23, 4, 125, -35, -120, 37, 43, 109, 50, -117, 110, 34, 96, -67, -102, 76, -65, -39, + -36, -78, -76, -85, -97, 68, -107, -119, -41, 106, 72, 56, 12, -87, -55, 50, -83, 0, -67, + -9, 63, 111, -79, 42, -112, 73, -109, -95, 15, 47, -57, -59, -9, 33, -62, -40, 119, 119, + -1, 91, 14, -66, -40, -19, -86, -89, -10, -122, 82, 93, 1, -109, -73, 54, -16, 84, 75, + 69, 18, 125, 110, 116, -72, -67, -123, 73, -4, 45, 27, 5, -52, 41, 43, -116, 83, 29, + 46, -48, 91, -78, -4, -88, -112, 25, 90, 101, 47, -94, -102, 95, -32, -69, -118, -121, -40, + 98, -68, 28, 54, 27, 113, 124, 119, -69, -86, -56, 25, -30, 111, -30, -36, -60, -92, 103, + 90, -11, 50, -73, 98, 82, 28, -34, 15, 85, -108, 72, 83, 31, -26, 15, -60, -79, -94, + 92, 67, -87, 76, 100, -67, 89, 7, -116, -39, 109, -75, 94, 54, -124, -112, -51, -39, 17, + 0, 66, 39, -92, -77, 92, -55, -102, -107, 76, 105, -113, 116, 49, -95, 43, -99, 126, 102, + 111, -98, 44, 23, 104, -111, -15, -43, -76, 103, 121, -12, 38, 25, 45, -30, 103, -22, -3, + -82, 26, 28, -127, -38, -106, 103, -71, 120, -12, 81, -10, -52, 54, -100, -104, 62, -15, -108, + -71, 110, -60, 25, 102, 110, 121, -114, 90, 104, -97, -48, -28, 73, 22, 114, -69, 77, 83, + -82, -79, -90, 82, -48, 11, -86, -96, 35, 2, -98, 23, -58, 10, -52, 12, -39, 66, -53, + 66, -41, -10, -8, -43, 63, -19, -53, 65, 61, -97, 106, 114, -39, -51, 49, -119, -105, 6, + -76, 40, 118, 97, -34, -109, 43, -12, -16, 92, 17, -125, -81, 47, -40, -105, 92, 95, 123, + 43, 91, 27, -81, -5, 11, 27, 59, 45, 9, -78, -113, -108, -75, -61, 17, -121, 69, -38, + 34, -120, 5, 100, -9, 97, 58, -85, -121, 36, -56, 6, 112, 80, 7, -116, 100, 105, -80, + -104, 121, -113, -63, -39, -18, 114, 6, 65, -3, 41, -35, -42, 125, 4, 124, -41, 99, 2, + -3, -105, -117, 34, -94, -82, -79, -78, -55, 71, 114, -29, 5, 94, -16, -80, 124, -81, 25, + -112, -45, 26, 66, 44, 20, -34, -68, 55, 0, 87, -31, 74, 123, -88, 56, 123, 101, 53, + -98, -20, 14, -49, -11, -14, 100, 7, -66, -54, 117, 100, -17, 38, 111, 77, -71, -86, 102, + 94, 45, 94, 60, 94, 85, 97, 30, 11, -100, -74, 14, -4, 114, 106, 47, 121, -22, -78, + -124, -20, -92, 85, -90, 57, -53, -15, 105, -73, 63, 40, -52, -19, 92, -120, -115, -4, -125, + -68, -92, -33, -61, -58, -126, 112, -83, 25, -24, -47, 68, 19, -65, 125, 70, 3, 120, 57, + 107, -16, -82, -35, -59, -124, -60, -72, -101, -20, -63, 41, 121, -80, -27, -104, -91, -47, 83, + -58, -107, -104, -57, -82, 14, 31, -2, 55, -24, 116, -2, -12, -28, -37, 31, -95, -104, 86, + 80, -41, 97, 55, -120, -107, -45, 122, 100, 63, -98, -80, -9, 115, 76, 124, 3, -39, 9, + 92, -25, -41, 116, -105, -67, -97, 7, -71, -72, -115, -37, 12, 3, -53, 49, -38, -45, -111, + -50, -8, -15, -99, 102, 9, -61, -99, -18, -101, 61, -87, -126, 7, -122, 77, 103, 112, -125, + -112, -76, -1, 116, 86, -116, 50, -51, 110, 18, 70, 112, 105, -10, 28, 23, 52, -41, -47, + -8, 121, 49, 118, 120, 101, -61, 51, -126, -39, 46, -7, -82, -114, -63, 108, -4, 68, -33, + -25, 107, 48, -76, -48, 87, 49, 33, 57, -61, -123, -47, -57, -38, -93, -17, -80, -29, -64, + 41, 7, -89, 16, 9, -65, 5, -43, 39, 75, 3, 85, 38, 49, -3, 2, -100, -15, 57, + -18, 116, -72, -44, -32, 89, 43, 53, 109, 21, 22, -118, 108, 9, 31, -45, -82, -63, 73, + -95, -108, -110, 71, 102, -10, 24, -28, -60, -57, 48, 31, 98, 67, 47, -81, 10, 7, 12, + 27, -39, 31, 82, 120, 21, 49, -114, -1, -42, -39, 6, -72, 21, -124, 7, 100, -124, -92, + -32, -77, 42, -13, 116, 87, -82, -84, 22, -1, 57, 112, 27, 73, -9, 79, -24, -87, -38, + 93, 93, -18, -51, -71, 95, -124, 64, -99, 61, -35, 8, -79, -60, 29, -80, -49, -126, -6, + -81, 45, -22, -77, 61, -5, 93, -23, -106, 50, 88, -23, -98, 11, -94, -125, 72, 93, 47, + -88, -72, -1, -26, 90, 49, -63, -55, 113, -38, 48, 97, -87, 83, -85, 24, 44, -33, 25, + -84, -38, 10, -53, -121, -111, 121, -84, 104, -22, -114, 124, -89, 48, -102, -88, 92, -81, 127, + -52, 83, -95, -98, -27, -110, 109, 70, -21, 96, -41, 14, -126, -9, 125, 62, 103, -74, -51, + -5, -110, 55, 30, 7, 64, -100, -69, 118, 54, 92, 26, 50, -13, -19, 122, 117, -22, -7, + -23, -36, 6, -122, -20, -51, -81, 75, 68, 82, 69, -26, 35, 22, -8, 22, 2, -78, 76, + 111, 62, -84, 125, -78, -34, 34, -42, 37, 1, 89, -7, 46, -1, 122, -105, -58, -58, 11, + -98, 87, -92, -6, -31, 117, -28, 15, 60, -48, 64, -82, 25, -51, 95, 63, -104, 92, 99, + -126, 97, -81, 108, 15, -94, 21, 118, -125, 29, 63, 66, -49, -118, -49, 28, -34, -74, -105, + -60, -81, -57, -123, -76, -35, -127, 62, -15, 55, 104, -122, -93, 106, 43, -26, -77, -87, 25, + 120, -107, -30, -116, -6, 125, -114, 95, -69, -56, 113, 45, -32, -78, 99, 75, -123, -125, -77, + -55, -14, 55, -104, -35, 120, 10, -63, -60, -8, 4, -84, 47, 57, -53, 99, -113, 21, 20, + 125, 26, -79, 86, -63, 26, -57, 110, -69, 91, 91, 2, 95, -77, -99, -73, 37, -79, -125, + -70, -36, -1, -35, 53, 120, -67, -110, -5, -30, -75, 110, 31, 33, -72, -58, 6, -23, 119, + 54, -14, -8, -52, 103, 85, 102, 116, 97, -43, 53, 1, 75, -26, -99, -72, 49, 95, -7, + 16, 23, -42, 72, -109, -30, -49, 21, -93, -38, 52, 32, 106, 13, -98, 114, 75, 99, 75, + -28, 123, 114, -97, -121, 27, -1, -70, 64, 119, 109, 39, -98, 60, -54, 108, 48, -28, -106, + -75, -88, -1, -82, -88, 87, 109, 118, 80, -97, 24, -86, 94, -47, 5, 55, 5, -72, 75, + 104, -109, 84, -36, 87, 118, -17, -77, 8, -12, -26, 102, -50, 124, -15, -86, 68, 2, 90, + -11, 108, 77, -81, 117, -80, -5, 10, 69, 114, 66, -83, -9, 59, -124, 16, 60, -16, 80, + 34, 18, 63, 44, 20, 88, -113, -114, 88, 78, 27, 123, 111, -43, -121, 40, 24, -55, 106, + 14, -82, 78, 22, -77, -26, 30, 104, 115, -57, -53, 12, -119, -73, -42, -27, -18, 81, 55, + 1, -77, -6, 22, -122, 74, -2, 46, 85, 91, 53, 14, 92, 14, 4, -74, 107, -80, -70, + 96, -96, -24, -45, -2, -28, 55, -89, 61, 125, -112, -6, 100, -43, -61, 117, 59, 8, 60, + 126, 15, -78, -35, 4, -38, -100, -35, 13, 121, -111, 39, 33, 101, -54, 48, 120, 88, -127, + 23, -56, 43, 14, 13, -2, -89, 10, 127, -73, 101, 87, -104, 45, 11, 5, -88, -46, 14, + 2, -61, 114, 19, 18, 5, 15, -4, -39, -1, 53, -42, -54, -76, -114, 83, 17, 102, -7, + 9, -31, -75, -64, 118, -110, 115, -33, 19, 85, 83, 62, -54, -50, -103, -83, 68, -102, 41, + -45, -51, 78, 29, -48, 1, -98, -35, 79, 90, 83, -4, -61, 29, 119, -8, 56, -94, -65, + -15, -44, -98, 65, -69, 33, 90, -66, 30, -61, 59, -30, 11, -108, 54, -4, -93, -47, -28, + 47, 92, -103, 66, -12, 69, 56, -76, 22, 106, -99, -64, 55, -2, 52, -108, 43, 106, 121, + 68, 118, 115, -99, 87, 83, -57, 97, -26, -56, 62, 80, 40, 21, -5, -80, 1, -67, -103, + -7, 113, 40, -123, 115, -104, -30, 27, -66, -89, 112, 90, 48, -9, -77, 36, 47, -27, -99, + 29, 54, -12, -79, 57, -27, -42, 37, 67, 74, 35, 55, 8, 37, -68, -14, -108, -9, 57, + -23, 32, 24, 20, 50, -48, -94, -19, 60, 92, 34, 113, 56, 99, -76, 73, 81, -33, -90, + -57, -121, 27, 10, 32, 8, -99, -65, 80, 115, -61, 68, -15, 103, -53, 61, -69, -120, 40, + 5, 50, -8, 104, -26, -19, -1, 50, -13, -82, 2, -17, 100, 48, 21, -46, 94, -95, -81, + 68, -103, -27, -66, -74, 52, -15, -35, 26, 37, -41, 51, 94, 97, 98, 75, -14, 98, -28, + 52, -30, 105, 56, -9, -25, 30, 31, 61, 65, -31, -9, -55, -18, 34, -88, 101, 121, -34, + 58, 47, 44, 16, -25, 54, 68, 75, 65, 92, 109, -93, -79, -109, 111, 66, 101, 56, -123, + -7, -119, 84, -57, -19, 39, -20, 80, -106, 114, -20, -127, -104, 120, 36, -8, -10, 126, 31, + 114, -44, 10, 98, -42, -44, 28, 101, -31, -2, -32, -77, 38, 42, 30, -98, 115, -92, -59, + 80, -96, -108, 45, -76, 62, -76, 117, 94, 124, 14, 53, -85, -35, 60, 109, 36, -63, -89, + 67, 70, -29, 119, -41, 100, -20, -105, 30, 73, -110, 43, -90, -43, -34, 63, 76, -89, -94, + 44, 109, -110, 31, 6, 6, -88, 61, 116, -42, -126, 42, 95, -13, -11, -44, 69, -54, 126, + -85, -91, -64, 4, -69, -48, 111, -102, -43, -57, -107, 25, -120, -116, 110, -24, -35, -107, 17, + -5, -26, -32, -18, 21, -30, -120, 104, 20, 115, -77, -110, 39, 19, 76, -99, 92, -14, 64, + -90, 50, -19, 60, -89, -107, -10, 13, 85, -23, -91, -124, 13, 54, 89, 40, 4, -77, 36, + 55, 42, 99, -121, 27, -103, -79, 22, -90, 67, 34, 27, -47, -81, 52, 52, -126, 96, -82, + 2, -3, -81, 11, -15, 4, -39, -11, -47, -74, 126, 78, 5, 26, 78, 0, 49, -22, 38, + 76, -112, 4, 102, 101, 16, -66, -126, 51, -2, 90, 92, 30, 13, 10, -70, -18, -51, 50, + 87, 36, -98, -123, -55, 94, 32, -65, 52, 38, -74, 72, -90, -1, 84, -116, -103, 20, 91, + -37, -11, 98, 97, 19, -18, -35, -92, -103, -45, -111, -22, -116, 24, -84, 9, 14, 101, -86, + 8, -74, 117, -107, -38, 69, -32, 122, 46, -23, -72, 48, 41, 81, 12, -48, -113, -5, -109, + 59, 45, 29, -124, 36, -4, 20, 9, -121, 41, -122, 4, -5, 30, -91, -83, 20, 52, -76, + 5, 64, 27, -119, 108, -82, 50, -97, -75, 79, -46, 105, 0, -55, 81, 38, 3, 80, -39, + -2, -71, 81, 66, 87, 59, 87, -18, 79, 59, -114, 51, -102, -75, -11, -7, 20, 91, -6, + -101, -111, -60, 112, 118, -94, -37, 17, 113, 58, 71, -99, 89, -59, 2, 41, 116, -83, 75, + -103, -74, 126, -102, 14, 79, 44, 99, -25, -116, 0, 79, -120, -120, -54, -13, -90, 27, 114, + 87, -46, -101, 62, -62, 95, -103, -53, -61, 66, 94, 74, -89, 119, 59, -24, 22, 45, 117, + 106, -47, 52, 64, -120, 96, 90, -23, 89, 44, -9, -17, 51, -63, -68, -125, 23, -41, -8, + 80, 105, -20, 3, 24, 109, -115, 11, -51, -97, -14, -33, -53, -81, -67, 67, 55, 68, 125, + 57, 30, -9, 107, 75, 67, 69, -88, 22, 121, -102, 15, -121, -12, -115, -19, -113, -105, -125, + -112, 42, 2, -84, 49, -67, 45, -82, 67, -107, -95, -62, -58, 9, 99, 34, 90, -29, 40, + 23, 75, -125, 112, 121, -61, 17, -68, -62, -125, -55, 96, -118, 120, -93, -95, -106, 44, -96, + -36, -108, -39, 10, 69, -85, 66, 93, -87, -36, 110, 18, 65, -28, -118, -120, -58, -36, -124, + 79, 83, -62, 37, -6, -53, 36, -126, -112, -22, 47, 123, -117, -18, 69, 122, 95, 101, 33, + 9, 83, 68, -12, -29, -15, 77, -84, -91, -108, 29, 121, 97, -63, -21, -46, -70, 41, 75, + -107, 22, -7, -1, 72, 12, -2, -121, -103, 86, 65, -19, 95, -32, 40, -65, -67, 79, 35, + -90, 118, 73, -5, -77, -99, -82, -59, -123, -112, 51, 74, 98, 108, -59, 88, 57, 27, -7, + 46, -123, -28, 55, -112, 11, 37, 84, -23, 62, 91, -115, 9, 109, -76, -95, -117, 116, -126, + -46, 47, 15, -61, 26, 91, -93, 37, -2, -115, -77, -110, 113, 42, 51, 97, -114, 14, 41, + -88, -30, 102, 4, -70, 65, 22, 5, 110, -13, -57, 24, 58, -66, 96, -39, 56, -71, -125, + -35, 45, 106, -122, 48, -107, -39, -84, 1, 28, -25, -100, 50, -114, -52, 76, -64, -3, 71, + 81, -118, 75, 67, 102, -113, 46, 1, -61, 120, 30, -29, -26, 1, 109, 67, 120, 4, 100, + -32, 16, -102, 80, 112, 54, -101, 117, -52, 93, 13, 102, -24, -125, -115, 111, 58, -124, -111, + 38, 19, 2, 53, 95, 90, 50, -1, 18, -62, 72, 96, 7, 25, 63, 68, -87, 16, -26, + 126, -113, -24, 30, -108, 51, -60, 53, -90, 67, -73, 53, -47, -105, 38, 101, 11, -37, 18, + 108, 26, 100, 83, 81, -90, 28, 103, 115, 35, -86, 33, -39, -19, 88, -69, 33, -93, 62, + 124, 95, 39, 22, 4, 24, 71, -107, -92, 75, -46, 54, 31, -17, 63, 29, -85, -108, 101, + -37, -115, -126, -125, -85, -125, -59, 12, 83, -18, 71, -8, -39, 71, 2, 103, -111, -65, -35, + -93, 27, -13, -1, 55, -81, -127, 102, -13, 111, -40, 24, -84, -26, 91, -108, -77, -55, -56, + 86, 44, -103, -115, 107, -115, 26, -48, 102, -34, -17, 56, 53, -57, -97, 7, -101, 66, 28, + -42, 13, 32, 74, 85, -26, -80, -120, -72, 49, -64, -58, -69, -89, 126, 121, 8, -88, -106, + 125, 96, 38, -17, 87, 113, -10, -57, -54, 83, -95, 20, -84, 44, 99, -84, 63, -80, 85, + -10, 114, -20, -44, -51, 110, -16, -101, -84, 115, 59, 24, -67, 108, 112, -18, 60, 114, -69, + -40, -84, 127, 16, 44, -41, 34, -35, 47, 7, 105, 67, 119, -85, 6, 37, 117, -19, -113, + -51, 56, 43, -123, 15, 96, 49, -37, 44, -103, -105, 80, 55, -49, -123, 12, -82, 121, 44, + 33, 127, -60, -92, 28, 28, -87, -127, 116, -8, 66, 119, -42, -112, -44, 43, 19, -79, -55, + 18, 53, -39, -25, 43, 29, -7, 103, -69, 84, -43, 23, -21, 109, -76, -8, 115, 28, -95, + -14, 107, 60, -86, 31, 8, -59, -8, -91, -45, 115, 51, -121, -17, -81, -35, -42, 23, -37, + 105, -5, -76, -72, 42, 11, 92, -5, -13, 34, 112, -2, -42, 47, 47, 116, 35, -117, -52, + 60, 111, -117, 127, 20, 71, 42, 70, -22, 31, 53, 45, -86, -103, 93, -106, 101, 47, 86, + 71, -110, 115, 50, -125, 63, 118, -52, -41, 43, -71, 113, -82, -6, -39, 28, -102, -13, 70, + 28, 22, -47, 68, -98, -84, -103, 41, -87, -42, -77, -67, 121, 106, 71, -23, -121, 65, -106, + -121, -94, 95, -94, 113, -54, -93, -61, 90, -36, -97, 104, -46, 56, 24, -126, 109, 121, -31, + 37, 49, 35, -27, 108, -44, -58, 79, -53, 17, -64, -77, 4, 115, -39, 90, -13, -88, -47, + 20, 64, 34, -47, 7, -103, 0, -124, 10, -100, -113, 24, 85, 4, -40, -69, 33, 80, 40, + -40, -41, -109, -93, -44, -95, 22, 60, -99, -110, 7, -40, -12, -95, 122, -82, -106, 70, 118, + 26, 116, -62, 50, 8, -69, -111, -113, -68, -5, 55, -18, -20, 102, 71, -83, 109, -62, 2, + 88, -74, -110, 88, 25, 82, -31, 17, -75, -19, -25, -58, -4, 103, 75, 41, -74, -116, 119, + -32, -83, 32, -76, -23, -54, -38, 98, 12, -20, -117, 51, 123, -100, -11, 71, 29, 93, -56, + -80, 120, -7, 83, -11, 89, -39, 3, 7, -122, -38, -68, 120, 16, -51, 8, -9, -31, 6, + 29, 105, -5, -26, 8, 92, -56, -41, -54, 16, 64, 92, 124, -120, -97, 47, 86, 12, -94, + -46, 58, 42, -81, 71, 118, -71, -66, 31, 20, 25, 25, -15, -107, 76, 17, -97, -118, 75, + 99, -8, 48, -67, -45, 104, 38, 45, -27, -38, 14, 49, -97, 21, -51, 121, 84, 15, -31, + 3, -2, 88, -110, 5, 106, 9, -56, -78, 24, -115, -112, -1, -121, -114, -100, -39, -45, -64, + 102, -3, 86, -24, 25, 89, -86, -14, 34, -35, 15, 58, -125, 108, -59, -94, 86, 122, -91, + 27, -22, 56, 81, -74, 126, 114, 35, 51, -3, 82, -31, 7, 116, -121, -33, -48, -120, -100, + 63, -65, 122, -68, 84, 85, 1, 79, -8, -32, -69, -58, -52, 21, 76, -109, 62, -124, -89, + -77, 46, -81, 122, -93, 45, -86, -110, 123, -77, 12, -51, 100, -11, -127, 13, -38, 35, 38, + -125, 20, -104, -63, 85, -52, 97, -43, -40, -119, -106, 3, 51, -72, 104, 51, 52, 49, -30, + 65, -107, 72, -28, 64, -89, -115, -20, 67, -100, -45, -89, -121, -61, -124, -18, 93, -108, -69, + 9, -95, -89, -24, 53, 119, 88, 52, 56, -54, 85, -43, 88, -18, 122, -8, 75, 31, -113, + 77, 74, -79, 26, -78, -87, 9, 44, -32, 61, -55, 123, -53, -41, 42, 83, -66, -75, 63, + 62, 108, 115, -34, -52, 38, -44, 88, 50, -51, 24, 26, -108, 100, -113, -73, -124, -40, -3, + -114, 10, 21, -75, 0, 17, -59, -59, -36, -61, -27, 65, 14, 62, 95, 61, 66, 27, -62, + 12, 78, -91, -113, -28, -56, 59, 53, 54, 102, 54, 76, -36, 19, 119, 87, 28, -67, 44, + -98, 4, -15, -64, 80, -68, -24, 27, -48, 63, 9, -54, 105, -113, -114, 8, 48, 51, 14, + -94, 3, -114, 28, -77, -40, 67, 71, -44, 91, 39, 77, 39, 21, 2, -54, -77, -27, -7, + 17, -10, -53, -51, -107, -33, 90, 113, -97, -118, 41, -122, -113, -106, -44, 9, 101, -18, -71, + 41, 98, 58, 36, -84, -22, 104, -43, 101, 29, 74, -63, -19, -58, -13, -16, -78, -56, 22, + 103, 5, 91, 61, -126, 71, 11, -8, -108, -65, 64, -30, 49, -5, -6, 21, 44, 114, -113, + 38, 121, 112, 39, -7, -9, -56, -16, 38, -104, -100, 56, -123, 120, -71, -54, -105, -73, -16, + -16, 117, -70, -67, 45, -72, 104, 69, 1, 78, 10, 95, 52, -122, -39, -21, 107, 3, -80, + 28, -12, -65, -116, 5, 84, -38, -34, 102, -48, -26, 10, -79, 86, -77, -75, -59, -74, 43, + 54, -65, -16, 82, -76, -103, 30, 98, -105, -52, 120, -46, 38, -33, 44, -17, 123, 79, 2, + 55, 118, -30, 20, -59, -52, -55, 32, -28, 96, 53, -115, 11, -59, 92, 51, -111, 0, -24, + 69, 126, 63, 82, 20, 20, -122, 45, -78, -93, -14, -46, -70, 61, 61, 121, 47, -1, -11, + 35, 93, -77, 76, 73, -47, -36, -110, 82, 24, 112, -115, 58, -11, -29, -94, -53, 40, 30, + -67, -49, 88, -99, 124, 97, -64, -53, -59, -47, -63, -14, -35, 7, 47, 60, -69, 60, 30, + -80, -61, -12, -83, 118, -39, -29, 37, 56, -36, 13, 62, -51, 26, 15, 62, -123, -35, 101, + -25, 90, -33, 83, 94, -73, -86, 69, 1, 6, 122, -124, 3, -109, 103, 28, 49, 114, 19, + -27, 120, 32, -56, -69, -77, 100, -38, 48, -17, 10, 7, -107, 31, 64, -86, 19, -22, 108, + -74, 101, -124, -41, -34, 37, -107, 71, 65, 79, 34, 96, 79, -101, -117, 84, 49, 29, -67, + 9, -102, 86, 97, -35, 80, 2, -21, 73, 126, -46, -67, -69, 125, -74, 39, -111, -74, 12, + -6, 74, 54, 90, -105, -73, -5, -115, 13, -14, 94, 14, 103, -106, 54, -56, -57, -84, -84, + -94, -55, 6, 67, -100, 110, -101, 73, 24, -6, -78, -38, -66, 10, 45, -114, -13, -112, -26, + 18, 69, -61, 35, 90, -57, -106, 66, 75, -100, 47, 72, -117, -68, -52, 80, 83, 42, 105, + 34, -35, 51, -122, 35, 36, 44, 66, -41, -82, -34, -32, 13, 62, 89, 88, 117, -57, 45, + -57, 68, 121, -99, 112, 21, 85, 84, 79, 86, 30, -59, -121, -46, -73, -23, 24, 63, -44, + 22, 60, -27, -46, 20, 119, -127, 52, 96, -30, 88, 16, -46, 111, -95, -30, -125, -3, -5, + 44, -94, -70, 91, 23, 41, 63, -65, -29, -107, -124, -77, -54, -124, -54, 43, 73, 93, -9, + -110, 31, -87, 32, -53, 69, 99, 67, -81, 4, 6, -56, -3, 42, 6, 98, 8, -1, -63, + 74, -52, 45, -56, -124, -18, -16, -101, -12, 60, -16, -125, 59, 109, 15, 84, 6, 70, -100, + -22, 52, -110, -22, -6, -47, 123, 5, -117, 87, -21, -7, -107, 23, -56, -100, 91, -69, 5, + -68, 47, -88, -78, 52, 53, 26, 48, 98, 59, 18, -36, 46, -90, 110, 113, -51, 56, -116, + 5, 5, 48, -107, -8, -64, -74, -58, 89, 102, 94, -92, -55, -31, 35, 31, 55, 37, -115, + -5, -17, 42, 4, 56, 55, 10, -50, 2, -117, 112, -123, 33, 122, -17, -41, -12, 52, -79, + 40, -88, -13, 10, -92, 72, 81, 27, 77, 0, -116, 43, -75, -120, -10, 38, -100, 95, 104, + 3, 52, -116, 19, -94, 67, -2, 61, 96, 102, 12, 23, -23, 29, 91, -1, 100, -118, 58, + 49, -108, 94, 70, -73, -50, 122, -15, -16, -68, 101, -11, 47, -53, -109, -105, 0, 25, 13, + -114, -3, -86, 127, 82, 126, -16, 115, -102, 106, -72, 90, 25, -51, -95, -112, 89, -52, 56, + 72, -33, 114, -2, 98, 78, -48, -28, -113, -32, -85, 117, 18, -12, 63, 70, -31, -117, -20, + -77, -41, 59, -65, -80, -82, 111, 47, 4, -107, 32, 118, 108, -125, 115, 47, -98, 106, 42, + -119, -38, -72, -43, -80, -111, 93, -84, -25, 54, 39, 65, -36, 56, -121, -25, -105, -108, -113, + -70, 32, 118, -46, 5, -18, 63, 11, -22, -112, 63, -29, 122, 38, 120, 13, 15, -71, 94, + -26, -42, 90, 39, -113, -20, 103, -13, 19, 19, 95, 3, 30, 100, -27, -67, -39, -56, -118, + 8, -47, -47, -33, -62, -97, 123, 112, -29, 84, 102, 60, -27, 60, 45, -35, -63, 39, -41, + -51, 26, 84, -109, 32, 21, 41, -100, 112, -48, -92, 83, -117, -121, 104, -47, -43, -57, -91, + 91, 8, -86, -29, 50, -68, 76, 125, -88, -89, 77, -108, -38, 70, 102, 40, 8, 39, 45, + -21, 109, -4, 18, 79, -125, -55, -62, 67, -26, 46, 55, -49, 3, 5, -81, -40, -67, 27, + -86, 27, 87, 106, -14, 38, -5, 6, 110, -117, 29, 9, -7, 117, -22, 20, 74, 77, -82, + -26, -121, -58, 8, -38, -54, -113, 43, 64, -120, 10, -26, -9, -86, 95, 110, 46, 68, -72, + 41, 51, 85, 95, 43, -37, 102, -115, 62, 39, -82, -53, -78, -104, -28, 93, 75, -13, 11, + 68, -82, 56, -4, 73, -39, -44, 22, 126, -111, 61, -54, -65, 50, -97, 78, -92, 97, 48, + 125, 122, 41, -19, -48, 119, 18, -45, 32, 14, 119, 118, -95, -80, 103, 95, -85, 116, 75, + -34, 81, -122, -37, 46, -58, 11, -27, 103, -62, 70, -50, 63, -44, 0, 78, -29, -13, -89, + 103, -108, -37, -100, 12, -84, -37, -20, -11, 0, -110, 42, 5, -77, 126, 62, 55, 0, -81, + 81, -122, -34, 102, 18, 82, -96, 65, 122, -61, 0, -54, 46, 106, -79, 19, -35, -100, -121, + 32, 115, 104, 30, 47, -110, -78, 27, 9, -26, -62, 62, 49, 55, 99, -17, -121, 113, -11, + -87, -88, 6, -56, 75, -59, 28, 13, -82, 51, -55, 65, 47, 21, 97, 29, 109, -33, -81, + -96, -71, 73, -105, -124, 10, 41, -84, 9, -8, 104, 95, -5, 93, 42, -76, -96, 48, -9, + 2, 102, -48, 21, -95, 26, -22, -51, 58, 40, -98, 87, 125, 25, 124, -29, 0, -61, -16, + -17, 69, -91, -34, -118, 43, 28, -116, -87, -22, -122, 100, 119, -127, 32, 20, -47, -28, 3, + 72, -111, 110, -21, 123, -7, -78, 4, -63, -48, -86, -125, 62, -99, -21, 127, 42, -64, 21, + -91, -104, -103, 108, 24, -76, -104, 62, 8, 70, -83, 35, 97, -1, -100, 103, -73, 125, 7, + -25, 4, -4, 49, -33, -52, 53, 116, -100, 45, 54, -81, -109, -41, -53, -99, 21, -83, -41, + -3, 14, -113, 121, 37, -50, -125, -6, -65, 13, -11, 88, 24, -117, -46, -65, -72, -89, -48, + -84, 101, 96, -22, -119, -27, 50, 58, -25, -80, -104, 66, 124, -71, 62, -120, -94, 63, -87, + -114, 53, -8, 39, 30, 63, 41, 33, 26, -33, -108, -48, -42, 5, 31, -39, -81, -100, 1, + -123, 11, 69, 86, 108, -4, -118, -52, 99, -35, -117, 11, -59, -68, -95, 11, 21, -13, -64, + 20, 90, 97, -30, -58, 31, 86, -90, 95, -104, -16, 74, -52, 108, 85, -44, -111, -80, 28, + 11, 88, 87, 125, 59, 57, 7, -22, 126, -99, 75, 123, 122, 124, 103, 14, 56, 103, -96, + -108, 64, -5, 50, -37, 106, -62, 82, 76, 11, -65, -115, 125, 60, 23, -57, -24, -97, -101, + 70, 50, -106, 59, -123, -60, -108, -25, 46, 61, -108, 27, -115, -15, 107, 118, 126, -124, 49, + -10, 85, -90, -58, -52, -89, -68, 33, 36, 5, 78, -2, 102, 67, -43, -57, -116, 61, 23, + -95, -104, 4, 15, 16, -123, 55, -105, -24, 64, 25, 93, 104, -11, 91, -119, 4, -87, 94, + 69, 60, -56, 15, 93, 1, 0, -80, 21, 17, 54, 55, 34, -16, 112, 33, -36, 76, 25, + -2, -86, 59, 16, -80, -34, -39, 57, 35, -7, -111, 69, 49, 126, 6, 67, -36, 63, 92, + -108, 99, -12, 44, -5, -98, 127, -119, 114, -31, 47, -96, -21, -125, 26, -110, -24, 72, -21, + -124, -78, 109, -9, 94, 49, -61, -56, 115, 123, 31, 124, -65, 80, 118, -32, 64, 58, -54, + -62, 21, 101, 127, 49, -54, -99, 84, 44, 124, -73, -11, -49, -108, 25, -97, -80, 48, -10, + -4, 89, 119, -7, -82, -97, 17, -40, 57, -24, 62, -84, 37, -114, -62, 56, -18, -52, -60, + 62, 114, -37, 48, 127, 43, -122, 13, -79, -70, -34, -46, -126, 105, 14, 54, -100, 57, -23, + 119, -65, -61, -94, -54, 72, -64, -13, -125, -61, 10, 1, 8, -30, 34, 41, 62, 18, 32, + -88, -81, -109, -57, -75, 103, 62, 2, -101, 29, -23, -125, 92, 104, 18, -3, -79, -58, -103, + 89, 29, 75, -39, -117, 87, 48, 45, -89, -101, -57, -67, -103, -53, 70, 68, -3, 88, 72, + -62, 16, -14, -105, -50, 28, 6, 103, -110, -13, 65, -114, -44, 90, -119, -14, -117, -63, -88, + 68, 100, -99, -58, -51, -74, 66, -121, 97, 96, 96, -117, 7, 103, 96, 24, 62, -34, -24, + -63, 39, -52, 66, 62, -57, 71, 125, 1, -99, -122, 52, -119, 50, 73, 110, 99, -76, -41, + -12, -67, -11, -36, 62, 51, 97, -93, -106, -87, 126, -51, 16, 50, -3, -94, -67, 13, 62, + 14, 13, -94, 46, 83, 22, 123, 76, 49, 124, -1, -56, 14, -41, 53, 91, -119, 79, -50, + -110, 15, -119, -89, -58, -22, 90, 115, 125, -79, 121, 8, -29, -90, -20, 65, -49, 117, 35, + -110, -27, 53, 88, -75, 1, -38, -85, 102, -73, -72, -51, 52, 27, -78, -63, -6, 124, 13, + -127, 7, 95, 63, -85, -46, 18, 68, 40, -48, 43, -48, -114, 68, 24, 102, 64, -72, -74, + -3, 77, 62, -36, 95, -107, -34, -120, -49, -110, -73, -55, -11, 24, -115, 85, 5, 102, -58, + 71, 105, 66, -120, 99, 126, -123, 98, -115, 100, 126, -74, 54, -90, -10, 90, 12, -61, 23, + 120, 32, 85, -91, 24, 53, 88, -4, 25, 43, 39, -107, -86, -75, 1, -18, 40, 83, -26, + -107, 7, 126, 66, 29, -88, 77, 21, 55, -68, -117, -5, 93, -8, -100, 24, -14, -14, 55, + 77, 72, -111, -65, -85, -75, 81, 123, -9, -102, -74, -114, 83, -36, 33, -41, 77, 6, 62, + -3, -34, 66, 2, 52, 71, 86, -91, -100, 14, -67, 100, -44, -45, -73, 63, 122, 49, 121, + -32, -97, -43, 55, 5, -72, 60, 15, 125, -117, 72, -79, 126, -102, 93, 6, -74, -123, 84, + 26, -49, 51, 121, -95, -37, -20, 4, 15, 35, -124, -87, 86, 71, -73, -63, 31, 62, -77, + 55, -86, 25, -107, 103, 111, -126, -87, 29, 41, 112, 63, 6, -20, -57, 8, 32, 52, -77, + -12, 89, -24, 22, -36, 41, 88, 13, -71, -18, -82, 3, -6, -51, 44, -70, 94, 86, 86, + -47, 66, 55, 71, 8, -37, 96, -94, -23, -21, -55, -97, 27, -95, -60, -28, 103, 66, -18, + -23, -83, 1, -44, -77, 66, -56, -73, 20, 101, -71, 96, -60, 57, 15, 97, 74, -78, 58, + -38, 64, 97, 125, -28, -47, 0, 24, -119, -81, 56, -70, -108, -29, -33, 85, 122, -3, -70, + 39, 37, -81, 25, 75, 101, 16, 34, 1, -117, 47, 117, 85, -14, -101, 108, 0, -89, -119, + -74, 108, -66, 38, 104, -39, 112, 70, -15, -76, -29, 47, 22, -40, -51, 84, -99, 61, -96, + -48, -45, 121, 20, 51, 104, -3, 99, 14, 109, 71, 108, 104, 30, 49, -94, -33, 26, -7, + 115, 68, 41, 64, 39, -88, -74, 27, 4, 40, -28, -71, 35, -10, -99, 14, 62, -60, 34, + 115, 13, 60, 97, -36, 114, -121, -92, 52, 29, -52, 10, 78, -118, 37, 53, -78, -38, 100, + -50, -101, 42, -78, 35, -97, -79, -38, -80, 1, -33, -52, -24, 92, 103, 40, -114, 57, -66, + 78, -75, 81, 115, 47, -26, 53, -110, 11, -45, 30, 22, 70, 103, 73, 18, 102, 65, -109, + -102, 24, -79, 19, -71, -28, -45, 107, 115, -121, 119, -108, -88, 22, 62, 87, 37, -15, -85, + 89, -82, 78, -100, 43, 68, 98, 33, -111, 61, 69, -15, -28, 57, -40, 11, -16, 7, 126, + -75, -16, 55, 61, 122, -67, -91, 33, -28, 10, 84, -109, -24, -97, -100, -101, -14, 124, -122, + -54, -27, -119, -109, -29, -78, -109, -70, 53, 65, 119, 40, 77, -90, 103, 57, -69, -51, 23, + 109, 17, 9, -26, -101, -85, -3, 72, 59, -74, 68, -124, 52, -52, -63, -103, -19, 7, -16, + 83, -55, -56, 98, -38, -49, -96, 53, 111, 13, 87, 0, 80, 100, -107, 78, 63, 75, 17, + 7, -52, 115, 87, 51, -39, -96, -80, 65, -97, -123, 76, -121, -58, 86, -68, 89, 36, -51, + 41, -46, 89, -21, -15, -34, 45, -81, 23, 117, 49, 39, -71, 12, -51, 82, -111, -63, -125, + -44, -74, 126, -101, -111, -67, 45, 60, 77, -12, -50, -75, -50, -100, 54, -6, -7, 57, 58, + -63, 33, 56, -59, 86, 113, -34, 103, -112, -33, 82, -96, -30, -124, 119, -123, 7, 14, -20, + 108, -21, 127, -75, 18, 112, -69, 31, 79, -55, 96, 99, 125, -6, -104, 70, -119, 70, -41, + 125, -12, 89, -111, 112, 8, 97, -124, -113, -86, -68, -115, 9, -56, -111, 32, -16, -91, 29, + -66, 53, 69, 53, 94, -38, 27, -104, 58, -35, -62, -24, -74, 11, 109, -32, -89, 30, -70, + -75, 57, 110, -86, -94, -115, -72, 82, -77, 53, 41, -85, -31, 16, -51, 72, -15, 40, 38, + 27, 120, -118, 97, 74, -93, -18, 9, -35, 72, 34, 45, 77, -116, 99, 80, -80, 15, -83, + 25, -75, -48, -74, -15, -78, -118, 84, 15, -112, -103, 24, -42, -108, 93, 116, 44, 56, 124, + 45, 6, 30, -28, 63, 23, 25, -19, -109, -2, -103, 105, -70, -9, -126, 51, 115, -106, 25, + 38, 66, 48, 83, -92, -84, 16, 29, 109, 33, -17, 108, 81, 8, 60, 50, 125, 126, 11, + 80, -91, 26, 58, 103, 53, -53, 20, 19, 118, -82, -100, -69, 99, -127, -88, -90, -120, 119, + -25, -5, -103, 116, -42, -4, -99, 57, -61, 118, 108, 125, 14, 90, -29, -24, -99, -78, 103, + -103, 47, -45, -42, -88, 34, -1, -121, 15, 109, 5, 126, -126, -26, 75, 32, 1, 52, 3, + 72, 75, 92, -102, 22, -123, -49, -28, 56, 55, 21, 20, -89, 70, -65, 123, -52, -38, -56, + 13, 89, -35, 113, 36, -50, 19, 12, -20, -5, -65, -60, -66, 39, 17, 75, 51, -105, -23, + 53, 85, 109, -123, -39, 21, 15, 83, -4, 64, 125, -64, -40, 72, 94, -117, 9, -83, -35, + 33, -122, -101, 37, 110, 52, 0, -26, -119, 113, -93, -54, 91, -58, -83, -54, 34, -113, 67, + 70, 23, 6, 120, -31, 57, -119, 38, 25, 34, -23, -30, 106, 22, -23, 47, -101, 9, -37, + -96, 8, 69, -77, 108, 1, 42, -36, 119, -5, -65, 29, 66, -119, -94, 64, 92, -95, -49, + 125, 13, -94, 81, 5, 123, -21, 97, -86, -32, -121, -92, -30, -45, -124, 42, -45, -118, 116, + -120, -15, -40, 62, -76, 100, -97, 34, -44, -49, -16, -87, -95, -116, -24, 12, -73, -98, 123, + -25, -9, 112, 57, -104, 102, 72, 100, 118, 53, 67, -32, -64, 82, -47, 81, 127, 74, -59, + -76, 120, -71, 4, 72, 62, 47, 0, 118, 66, -120, -50, 108, -117, -34, -59, 47, 25, -2, + -109, 86, -32, 80, -75, -43, 50, 88, -113, 111, -101, 103, -91, -19, -77, 58, 1, 124, -107, + 59, -73, -91, -122, 80, 33, -20, 1, 97, 101, 28, 5, 30, 60, -39, -41, -68, 82, 59, + 21, 61, -99, 22, -123, -14, -73, -108, -99, 62, -51, 17, 41, 89, 88, -22, -28, -20, 123, + 17, -125, 72, 83, -113, 76, 73, 113, 108, 27, -54, -29, -52, -121, -22, -126, -44, 46, -89, + 127, -29, 120, -87, -73, -55, 98, 21, 15, 4, 126, 111, -5, 105, -20, 73, 41, 97, 119, + 33, -20, 88, 88, -44, 58, -93, -116, -116, -9, -85, 85, 109, -121, 90, -86, -109, 15, -51, + 50, 24, 57, 27, 2, -68, 83, -82, 110, 80, -120, 85, -87, -106, 120, 4, -60, 81, -81, + -53, 36, -16, 34, -91, 40, -88, 37, -105, 95, 0, 70, -94, 54, 51, 34, 100, -48, -105, + -44, 39, 63, -81, -9, 119, 1, -63, -94, -122, 14, -87, -68, 5, 57, -100, 63, -69, 108, + 83, -22, -61, 32, 103, 91, -69, 121, 71, -28, -100, 122, 27, -77, -33, 11, 64, -95, -103, + -17, 108, -44, 7, 75, -5, 76, -51, 18, 42, 62, 23, -9, 103, 82, 20, -86, -35, -102, + -19, -66, -71, -80, -126, -73, 118, -118, -108, 27, -79, -68, 120, 60, 81, -2, -43, -52, -39, + 87, 39, -63, 93, -28, -106, 110, -48, 18, 43, -87, -23, 116, -63, 32, 24, -107, -122, -122, + 75, -25, -43, 124, -87, 98, -68, -121, -7, -106, -12, 72, 73, 58, -63, 104, -64, -35, 77, + -119, -91, -3, -124, -94, 92, 74, -31, 33, 70, 53, 81, 69, 105, -94, -28, 86, -91, -41, + 39, 25, 27, 0, 118, -38, 43, -95, 19, 43, -66, 92, 65, -122, -23, 68, -96, -111, -65, + 64, -20, -62, -76, -60, -36, 65, 100, -126, -60, 27, -35, 53, -2, -98, 100, -54, -85, -42, + 60, -93, 112, -12, 48, -109, 10, 76, 57, -82, 34, 110, -7, -102, -60, 76, -101, 109, 48, + 0, 81, 123, -31, 103, -51, -101, -20, 59, -39, 104, 126, 36, -15, -35, -76, 18, 25, -82, + 89, -61, 15, -22, 108, -86, 44, 106, 29, 34, -117, 16, -7, 53, -113, 59, -91, -126, 123, + 114, -14, -116, 91, 115, -15, 119, 73, 69, -99, -103, 69, -115, 118, 43, -24, 83, -108, -101, + 114, -18, -117, 15, -103, -29, 118, 51, -115, 119, 81, 4, -55, -96, 59, 6, 50, 64, 21, + 54, 124, -19, -108, 39, -119, -123, 9, 124, -94, -2, 13, 3, -96, -110, -11, -8, 30, -42, + -24, 42, 112, -21, -37, 47, -106, 25, -50, 17, 56, -75, -58, -70, 77, -88, 91, 100, 51, + -12, 55, -3, -114, -55, -68, -46, -3, -38, 108, 15, -117, 61, -31, -29, -72, -24, -79, -37, + -81, 0, -7, 96, 109, 75, -127, 90, 88, 125, -11, 110, -6, -81, 63, -121, 48, 94, -36, + 82, -17, -87, -29, -60, 12, -33, -40, 23, 21, -58, 1, -73, 48, -6, -110, -55, -65, 120, + 109, -46, 105, 71, -111, -16, 32, -45, -96, -93, -89, 112, 89, -39, -47, 59, 33, 125, 108, + -86, -124, -53, 45, 117, -23, 67, 10, -124, 57, -107, 51, -77, -54, -98, 20, -81, -28, 41, + -56, -87, 49, 51, 103, 80, 13, 22, -28, -26, 105, -107, 36, 74, 85, -47, 19, -43, 14, + -126, -101, 118, -94, 120, 71, 120, -60, -122, -122, 24, -35, -113, 122, -87, -84, 11, 53, -38, + 82, 32, 7, 37, 119, 80, -4, 49, -34, 15, -127, 74, -30, 99, 19, -78, -27, 7, 30, + -15, -29, -46, 50, -15, -61, -97, -31, -111, -97, 127, -98, 29, -126, 22, 20, -91, 117, 126, + 89, -17, -46, -76, -86, 107, -123, -82, 8, 26, 18, -112, -2, 28, 120, -96, -76, -95, 49, + -61, -23, -69, 113, 1, -122, 52, -4, 122, 78, -91, 81, -74, -63, 62, -113, -78, -25, -66, + 68, -66, 127, 110, 118, -70, 110, 88, 88, -98, -109, 6, -10, -98, -90, -108, 84, 124, -27, + -60, 8, 59, 29, -27, -27, 22, -71, 5, 9, 73, 120, 114, 98, 4, 92, -84, -108, -42, + -120, -28, -111, -85, 7, 5, -62, -121, -81, 3, 26, 99, 106, -15, -84, -103, -52, 55, 93, + 47, -89, 58, -24, -98, -26, -84, -62, 6, 88, 87, -48, 97, -86, 17, 73, 12, 73, 65, + -104, 47, -111, -30, 84, 38, 67, -7, -51, 91, -114, 2, 33, 126, 4, 28, -51, -113, 77, + 67, -88, 70, 31, 95, 14, -94, 89, -3, -109, -88, 65, 77, -101, 71, 83, 13, 68, 68, + 115, -69, -16, 49, -96, 28, 35, 32, 69, -41, -36, 95, -52, -89, 87, 73, 80, -108, -76, + 70, -73, -53, 65, -42, 20, 39, 8, 11, -46, 13, -101, -86, -106, 80, 110, -10, -53, -54, + -29, -76, -101, 12, -38, -94, 53, -90, 81, -86, -29, 89, -77, 73, 91, -22, 101, -107, -43, + -38, -88, -27, 25, 85, 99, -99, 30, -38, 114, -18, 33, -73, -122, 29, 30, 29, -84, -5, + -15, -66, 10, -60, -116, 45, 16, 35, -113, -12, 7, 4, 55, 40, -28, 42, 83, 81, -21, + 106, 41, -125, -67, -44, -32, 26, -66, 113, -24, -29, -127, -58, -65, -122, -13, -85, 103, 81, + -1, 98, -89, -74, 25, 118, 45, 45, 91, -101, -60, 122, 0, 88, 19, -53, 47, -81, -25, + -79, 93, 103, 32, 32, -122, -61, 127, -1, -108, 69, -51, -66, -114, -22, 106, -105, 55, 65, + -94, 114, 24, -52, -38, -112, -57, 65, -36, -1, 81, 27, -60, -112, -44, -48, 22, 118, -104, + 13, -83, 15, -4, -3, 68, 64, 64, 52, -52, -57, 95, -31, 33, 78, -57, 51, -62, -72, + -86, -22, 68, -55, 115, -35, 92, 118, 80, 80, 93, 12, -6, -70, -50, -56, -119, -31, -65, + 16, 52, 75, 116, 15, -32, -103, -79, -39, 27, 43, -63, 37, 45, 11, 15, 73, -40, 106, + 0, -60, 116, -50, 106, 3, -123, -40, -102, 69, 91, 7, -42, 43, -104, -36, 122, -99, 105, + 41, 52, 10, 88, -6, -82, -80, -17, -65, 106, -109, 79, 73, -4, -51, -52, -35, -70, 14, + -89, 125, 99, -85, -32, 22, 34, 18, 122, 15, -64, 110, 56, 81, -120, 48, -50, -31, 110, + 3, -12, 41, -17, 24, 91, 22, -44, -73, 92, -8, 48, -124, -2, -65, 36, 52, 29, 35, + 75, -97, 59, -18, 11, 1, -87, 33, -125, 80, 11, -66, 33, 44, -68, -112, 99, 20, 25, + 43, 95, 53, -119, -48, -36, 15, 39, 101, 44, 37, -102, -116, 110, -50, -80, 36, 83, -60, + -60, -115, -73, -124, 51, 3, -83, -71, -103, -46, -110, 21, 100, 68, -30, 108, 99, -83, -77, + -50, -88, 35, -57, 91, -37, 45, 33, 29, -45, -16, -54, 52, 120, 107, 71, 95, -20, -118, + 113, -48, -78, -21, 61, 28, -59, 38, -45, 97, 53, -43, 63, 45, 69, -121, -11, 20, -57, + -124, -18, 101, 77, -38, 122, 19, -91, 68, -39, -42, 91, 115, -73, -7, -15, 34, -102, -122, + -1, -102, 29, 67, 43, -117, 94, 47, -2, -103, -77, 60, -81, -12, -49, -58, 12, 77, 76, + -76, -114, -32, 112, -5, -61, -95, -88, 82, -120, -24, -81, 83, -76, 67, 54, 37, 28, -11, + 2, -82, -23, -48, 7, -111, -31, -33, 85, -83, -23, -35, 33, 53, 2, -38, -3, -35, -72, + -127, 69, 58, -11, 42, -35, -35, -71, 108, 114, 29, -50, -44, 68, 33, -126, -105, 65, -42, + -57, 15, -98, -86, 27, -81, 117, -63, -82, 74, -113, 54, -32, 121, 41, 4, -22, -50, -63, + 103, -61, 116, -98, -23, -126, -46, 6, -41, 115, 125, -70, -28, -29, 98, -105, -51, 26, -25, + -108, 31, -16, 40, -117, 78, -31, 114, -85, 114, -118, 80, -88, 43, -117, -41, 89, 22, -109, + 98, 127, 48, -29, -59, 97, -43, 14, 97, -118, 80, -34, -116, 118, 116, -73, -27, -99, 115, + 39, -101, -99, -88, -57, 16, -96, -73, 53, -114, 78, -36, 110, 81, -49, 112, -41, 82, -42, + -24, -59, -25, 89, -58, 118, -72, 113, -66, 44, 93, -86, 66, -110, 33, -61, 121, -53, 4, + 61, 63, -112, -109, -57, -99, 83, 57, 87, -105, -22, -27, -91, -111, -91, 124, 46, -50, 83, + 112, -122, -42, 13, 103, 101, 1, 26, 84, 82, 67, 121, -84, -110, 77, -18, -37, 54, -58, + -39, -68, -23, -117, -114, -62, 91, -33, -63, 71, -1, 4, -1, 46, -60, 6, -39, 2, -9, + 29, 111, 3, -89, 15, 68, 98, 98, 9, -76, 115, 5, 9, 81, 38, -46, -118, 68, -116, + 96, -98, 37, 70, -102, -6, 30, -117, 44, 65, 107, 101, -36, 65, 105, 48, 32, -84, -40, + 118, -77, 47, -97, 12, 63, 0, 125, 94, 109, 53, 74, -51, 28, -33, -53, 33, -33, -42, + -99, 100, 116, -110, 107, -90, 101, -28, 44, 61, 13, -29, 123, 85, -117, -99, -93, -57, 106, + 67, 102, -62, 64, -86, 43, 63, -3, -59, -5, -28, -42, 19, -19, 115, -53, -7, 15, -27, + 118, -27, -42, -102, -30, -27, -14, -48, -99, 102, 73, 49, 86, -16, -52, 74, -42, 39, 103, + 37, 108, -42, 17, -118, -105, 109, -117, 18, 74, -22, 80, 77, -8, -26, 99, -48, -47, -21, + -31, 4, 86, 122, 20, 55, 32, 118, -124, 74, -45, -42, 56, -96, -11, -33, 8, 116, 104, + 125, 78, -118, 111, -92, 79, 106, -65, -70, -109, -89, 93, -35, -8, 97, -37, 47, 75, -97, + 90, -62, 113, -77, 70, -82, -109, -111, 13, 120, -9, 62, 72, -3, -98, -89, 60, -115, 35, + 56, -116, 83, 119, 75, -125, 105, 41, 109, -105, 115, -26, 45, -109, -25, 69, -91, 81, 43, + -33, 127, 25, 14, -44, -65, -30, -106, 42, -78, 31, -98, -64, -80, 63, 44, -121, -10, 100, + -65, 55, -36, -85, -21, -124, 88, -26, 36, -30, 110, 127, -61, 29, -72, -114, 114, -76, 30, + -53, 72, 39, -60, -49, -44, 99, -26, 70, 22, 67, -89, -127, 66, -80, 45, 32, 42, 40, + 3, 19, -21, -116, 105, -62, 23, 122, -7, -5, 16, 104, 96, -75, 86, 53, -34, -21, 118, + -52, 1, 78, -1, 60, -26, 76, 63, -25, 103, 10, 22, 54, 25, -65, -41, -72, 45, -107, + -4, -117, 40, -7, 91, 45, -13, 36, -90, 5, -70, -38, 19, -98, 49, -125, -15, -92, 67, + -13, -87, -30, -67, 118, 69, -65, -102, 39, -47, -61, -62, 77, 63, -18, -82, 36, -85, 25, + -14, -17, 58, -75, -10, -4, 2, 42, -41, 42, -101, 116, -116, -102, -120, 32, 34, -50, -51, + -47, -80, 49, 37, -9, -90, 24, 66, 49, -3, 97, 41, -57, 122, -85, 96, 90, 76, -27, + 99, -102, 122, -44, 76, 114, 10, -81, -101, 94, 123, 69, 59, -19, 33, -96, -93, 22, -55, + 52, -35, 14, -14, -71, -85, -93, -7, 74, -4, 100, 112, -20, -107, 115, -49, -34, -78, 83, + -96, -48, 110, -76, -79, 62, -91, 48, 26, -80, -73, 63, 31, 88, 26, -20, -115, -40, 100, + -75, -17, 98, 51, -51, 48, -66, 23, 122, -38, -12, 123, -19, -95, -10, 57, -57, -48, 70, + 83, 16, 41, -104, 48, -71, 20, 110, -7, 84, 105, -56, -42, 104, 117, -15, 61, -69, 25, + -66, -104, -26, -98, -86, -112, 52, -111, -85, 72, -34, 8, 94, 106, -12, -53, 94, 126, 7, + 76, -13, 90, -58, 86, 28, 42, -71, -89, 27, -72, 42, 7, 102, -43, 68, -7, 1, -101, + -49, 100, 39, 64, 8, 44, -68, 16, -92, 31, 100, 6, 49, -89, 14, 90, -113, 95, 87, + 122, 27, 34, -107, 96, -6, 81, 14, 42, 0, -124, -85, 38, 84, -6, 91, -61, -87, -68, + -16, -45, 126, -104, -36, -35, -25, -36, -92, -124, 6, 41, -41, -25, -75, 34, -35, 76, 15, + 13, 127, -99, 30, 22, 28, -20, -10, -77, -48, 61, 73, -90, 34, 116, -80, -4, -45, -18, + 36, -4, 109, 42, 92, -48, 121, -13, -71, -95, 57, -22, 105, 117, -65, -90, -70, -123, 91, + -22, -90, -110, -107, -113, -40, 71, 60, -95, -72, 95, -106, 76, 43, 48, -44, -105, -112, -64, + 100, -59, -87, -64, 56, -118, 89, -15, 79, 63, 99, 107, -84, -113, -26, 121, -50, 14, -123, + 76, 49, -84, 90, -108, -22, 56, -4, -99, 28, 83, -39, -35, -34, -25, -13, 46, 28, 124, + 57, 19, 1, -52, -49, 93, 80, 12, -108, 110, 45, -56, 35, 76, -35, 2, -5, -101, -76, + -7, -37, -100, 70, -92, 123, -74, 102, -9, -19, -37, -70, -4, 126, -43, -58, -65, 59, -101, + -19, 11, -118, 76, 48, 6, -122, 116, -125, -105, 2, 6, 125, -27, -61, -119, 98, -1, -25, + -120, -70, -16, -27, 55, 82, 121, -28, 47, 27, -64, 105, 19, 62, 15, -38, 66, 17, 101, + -21, 111, 66, -29, 101, 43, 20, -70, 91, -72, 45, -22, -12, -64, 73, 75, 59, -77, -75, + -19, 51, 94, -105, 62, 114, 95, -125, -42, 104, 44, -117, -76, 74, 62, -32, -10, 33, -43, + 73, 101, -40, 101, -7, 88, -103, 49, -104, -76, -84, -94, 52, 31, -68, -127, -93}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/weights_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill/weights_data.h deleted file mode 100644 index 35ff86df..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill/weights_data.h +++ /dev/null @@ -1,781 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int8_t int16xint8_spill_weights[17820] = { - 79, 101, 58, 81, 42, 71, 35, 44, 102, 13, 8, 58, 12, 100, 15, 59, 85, 94, 86, 9, 50, 53, 63, - 17, 76, 82, 122, 74, 26, 41, 46, 92, 125, 70, 75, 32, 62, 53, 80, 21, 102, 110, 17, 21, 82, 104, - 120, 114, 26, 19, 33, 74, 116, 60, 96, 45, 110, 53, 102, 97, 124, 47, 8, 100, 25, 2, 75, 16, 36, - 115, 33, 86, 59, 8, 62, 108, 101, 35, 62, 106, 51, 87, 94, 102, 87, 68, 107, 60, 75, 24, 79, 50, - 96, 26, 21, 29, 26, 34, 102, 102, 31, 35, 118, 117, 104, 53, 82, 124, 2, 27, 62, 117, 70, 93, 14, - 7, 3, 76, 15, 27, 120, 17, 10, 1, 93, 75, 101, 63, 19, 37, 119, 11, 16, 109, 35, 91, 68, 58, - 45, 84, 25, 39, 18, 55, 118, 64, 45, 112, 95, 67, 121, 109, 75, 26, 62, 37, 82, 19, 46, 20, 108, - 91, 108, 47, 34, 102, 22, 126, 2, 30, 44, 98, 28, 58, 77, 20, 83, 17, 65, 101, 101, 11, 87, 42, - 101, 36, 55, 81, 24, 82, 101, 42, 2, 86, 17, 120, 10, 51, 75, 41, 66, 123, 73, 102, 9, 64, 14, - 57, 14, 3, 75, 91, 37, 92, 11, 35, 44, 28, 21, 124, 36, 13, 25, 3, 122, 24, 17, 46, 18, 113, - 32, 20, 3, 118, 89, 124, 20, 120, 44, 51, 74, 100, 120, 75, 68, 35, 106, 111, 7, 108, 99, 110, 113, - 28, 21, 68, 42, 119, 108, 9, 14, 39, 47, 59, 115, 21, 109, 93, 95, 53, 21, 18, 35, 106, 79, 43, - 54, 52, 118, 77, 63, 65, 105, 67, 12, 27, 12, 126, 71, 103, 23, 100, 72, 22, 7, 113, 1, 71, 66, - 84, 96, 57, 76, 117, 72, 6, 85, 126, 35, 22, 111, 28, 117, 12, 80, 82, 115, 40, 59, 38, 115, 7, - 100, 111, 20, 33, 77, 60, 119, 16, 123, 96, 94, 66, 99, 115, 47, 8, 109, 105, 56, 9, 8, 17, 116, - 97, 112, 47, 40, 100, 48, 16, 44, 61, 24, 107, 34, 67, 26, 92, 2, 78, 107, 89, 11, 8, 123, 74, - 90, 108, 84, 18, 28, 29, 70, 16, 115, 23, 106, 102, 64, 123, 56, 101, 125, 53, 122, 39, 70, 4, 39, - 41, 25, 72, 71, 69, 70, 62, 106, 57, 105, 125, 64, 113, 96, 27, 102, 37, 8, 83, 91, 38, 90, 63, - 118, 10, 35, 40, 121, 89, 50, 106, 30, 110, 120, 45, 18, 10, 85, 119, 23, 8, 15, 33, 34, 100, 84, - 74, 6, 111, 70, 47, 12, 30, 54, 102, 92, 92, 119, 83, 50, 95, 70, 106, 88, 77, 45, 73, 116, 127, - 104, 70, 22, 25, 83, 46, 67, 3, 82, 120, 93, 73, 43, 72, 81, 105, 100, 105, 84, 3, 32, 14, 53, - 117, 52, 106, 45, 31, 30, 123, 67, 95, 66, 53, 16, 58, 18, 19, 50, 109, 123, 25, 61, 13, 17, 91, - 25, 47, 116, 22, 64, 50, 28, 13, 22, 109, 1, 71, 102, 16, 25, 29, 38, 12, 32, 87, 65, 52, 2, - 83, 54, 46, 111, 48, 63, 36, 44, 44, 37, 31, 106, 33, 54, 39, 8, 103, 40, 15, 92, 14, 3, 75, - 26, 27, 107, 99, 93, 124, 22, 94, 38, 68, 25, 67, 108, 9, 25, 2, 14, 108, 2, 41, 36, 24, 125, - 41, 76, 119, 87, 103, 64, 60, 52, 98, 71, 40, 104, 89, 77, 49, 12, 122, 18, 23, 82, 93, 103, 94, - 78, 30, 68, 57, 23, 79, 113, 40, 56, 118, 22, 78, 22, 67, 53, 37, 29, 75, 30, 79, 31, 101, 104, - 68, 117, 19, 72, 5, 89, 39, 102, 4, 9, 36, 29, 106, 57, 98, 19, 28, 126, 10, 52, 9, 16, 29, - 103, 38, 126, 64, 78, 51, 30, 32, 103, 46, 48, 118, 59, 100, 31, 42, 7, 78, 16, 78, 124, 49, 16, - 36, 59, 22, 85, 42, 107, 45, 12, 68, 51, 104, 57, 77, 113, 101, 89, 43, 91, 97, 76, 114, 76, 126, - 29, 15, 102, 35, 65, 88, 46, 98, 103, 15, 64, 89, 18, 47, 77, 22, 59, 23, 29, 74, 105, 16, 33, - 74, 110, 3, 18, 113, 127, 12, 4, 84, 96, 66, 24, 9, 118, 71, 33, 35, 100, 67, 36, 21, 83, 101, - 32, 124, 82, 14, 84, 27, 59, 20, 34, 25, 84, 85, 114, 79, 72, 5, 42, 86, 42, 105, 109, 44, 119, - 29, 110, 1, 98, 43, 94, 77, 43, 117, 51, 29, 12, 125, 23, 26, 75, 32, 43, 58, 11, 108, 82, 53, - 63, 67, 109, 1, 30, 92, 53, 124, 45, 45, 15, 116, 70, 95, 31, 121, 44, 5, 92, 79, 48, 56, 40, - 65, 101, 52, 125, 85, 19, 114, 44, 64, 19, 105, 88, 26, 38, 39, 124, 43, 54, 76, 13, 86, 93, 45, - 3, 33, 105, 53, 108, 61, 118, 59, 125, 93, 113, 22, 97, 96, 4, 79, 113, 39, 123, 93, 114, 87, 28, - 92, 90, 27, 8, 103, 108, 6, 87, 31, 119, 74, 89, 39, 71, 123, 116, 108, 92, 83, 92, 64, 54, 23, - 46, 98, 15, 48, 120, 18, 124, 80, 79, 27, 24, 95, 90, 53, 87, 59, 65, 14, 40, 107, 74, 62, 74, - 104, 77, 36, 104, 86, 0, 73, 103, 18, 93, 12, 87, 102, 62, 110, 34, 20, 17, 69, 3, 101, 31, 37, - 117, 117, 113, 51, 24, 76, 78, 64, 51, 61, 39, 26, 45, 61, 75, 16, 57, 39, 79, 59, 106, 35, 76, - 27, 18, 73, 42, 6, 58, 92, 102, 59, 30, 17, 103, 24, 88, 61, 70, 41, 101, 8, 118, 97, 106, 69, - 10, 0, 97, 8, 11, 89, 63, 13, 65, 81, 55, 51, 10, 11, 17, 105, 13, 113, 123, 113, 93, 54, 123, - 35, 113, 98, 14, 99, 40, 68, 106, 45, 48, 116, 115, 66, 71, 17, 46, 123, 49, 92, 122, 110, 103, 56, - 54, 17, 102, 16, 103, 35, 117, 23, 18, 41, 11, 67, 107, 13, 64, 59, 73, 23, 39, 69, 10, 27, 93, - 61, 2, 26, 45, 80, 8, 85, 64, 60, 110, 74, 77, 72, 67, 50, 38, 6, 52, 113, 55, 84, 62, 6, - 90, 109, 15, 43, 72, 55, 106, 8, 89, 5, 120, 120, 38, 110, 37, 93, 59, 126, 35, 117, 59, 86, 125, - 74, 75, 76, 95, 19, 82, 20, 91, 7, 39, 64, 5, 14, 57, 39, 1, 13, 22, 8, 53, 66, 6, 13, - 83, 96, 32, 83, 82, 99, 121, 104, 65, 109, 79, 35, 3, 44, 1, 90, 1, 116, 72, 43, 5, 109, 59, - 76, 127, 25, 85, 72, 34, 126, 114, 40, 43, 117, 61, 92, 52, 117, 62, 124, 102, 6, 26, 95, 112, 9, - 56, 121, 13, 102, 86, 27, 110, 71, 6, 123, 97, 123, 87, 52, 118, 107, 37, 42, 10, 46, 12, 82, 126, - 8, 71, 16, 40, 84, 18, 50, 124, 67, 68, 65, 18, 117, 58, 108, 67, 66, 55, 87, 60, 102, 34, 77, - 27, 63, 101, 12, 46, 84, 82, 50, 110, 87, 66, 10, 17, 110, 60, 111, 57, 105, 123, 27, 99, 85, 92, - 87, 66, 58, 33, 16, 21, 15, 57, 61, 121, 52, 94, 8, 109, 111, 24, 22, 31, 125, 94, 33, 90, 19, - 64, 89, 124, 20, 60, 126, 39, 101, 69, 81, 42, 18, 64, 100, 50, 62, 108, 66, 58, 80, 38, 72, 40, - 22, 42, 2, 47, 95, 35, 22, 78, 46, 21, 8, 75, 84, 98, 99, 13, 127, 87, 108, 52, 62, 104, 49, - 43, 102, 63, 35, 68, 37, 30, 47, 49, 1, 105, 114, 116, 62, 19, 121, 105, 5, 113, 111, 26, 70, 122, - 4, 119, 95, 122, 75, 52, 107, 45, 1, 42, 27, 40, 108, 97, 117, 103, 13, 118, 15, 65, 90, 25, 116, - 33, 20, 9, 116, 80, 37, 11, 39, 92, 33, 81, 100, 19, 60, 20, 11, 95, 114, 85, 116, 23, 52, 52, - 7, 39, 120, 43, 34, 25, 116, 39, 101, 106, 10, 65, 84, 54, 87, 85, 55, 41, 44, 123, 97, 49, 16, - 76, 91, 24, 114, 92, 51, 79, 34, 5, 40, 21, 72, 82, 120, 68, 20, 113, 101, 50, 51, 27, 56, 22, - 100, 48, 21, 113, 48, 90, 30, 8, 52, 76, 18, 113, 54, 51, 22, 120, 29, 105, 58, 51, 98, 99, 40, - 56, 45, 47, 125, 42, 91, 112, 72, 124, 81, 70, 99, 87, 1, 97, 40, 20, 8, 57, 112, 31, 59, 124, - 101, 44, 0, 40, 93, 36, 6, 106, 70, 48, 60, 100, 112, 38, 91, 22, 103, 31, 19, 10, 46, 70, 75, - 29, 10, 120, 96, 5, 37, 101, 124, 0, 46, 89, 60, 2, 95, 27, 58, 7, 46, 63, 3, 14, 61, 10, - 123, 7, 51, 22, 18, 39, 38, 9, 125, 9, 75, 47, 46, 24, 53, 4, 80, 35, 98, 38, 114, 36, 86, - 68, 89, 11, 73, 16, 117, 75, 81, 25, 98, 127, 97, 79, 92, 22, 16, 25, 32, 74, 9, 52, 54, 95, - 33, 60, 66, 101, 23, 57, 7, 77, 33, 121, 37, 6, 68, 29, 71, 79, 33, 106, 117, 85, 46, 49, 3, - 84, 68, 126, 49, 119, 8, 79, 57, 16, 40, 82, 91, 60, 94, 3, 49, 4, 40, 125, 27, 7, 14, 78, - 19, 83, 19, 117, 23, 83, 0, 39, 107, 65, 63, 44, 61, 112, 65, 68, 55, 19, 52, 11, 79, 82, 119, - 59, 8, 114, 92, 32, 120, 27, 119, 48, 57, 102, 46, 94, 38, 46, 62, 26, 81, 106, 34, 103, 25, 108, - 51, 38, 20, 8, 78, 76, 33, 76, 72, 92, 74, 114, 112, 55, 104, 16, 89, 60, 89, 39, 124, 65, 49, - 118, 15, 21, 81, 21, 73, 97, 111, 66, 89, 122, 104, 82, 9, 25, 17, 81, 56, 27, 117, 58, 101, 41, - 92, 72, 18, 2, 16, 40, 42, 59, 46, 106, 59, 91, 75, 117, 7, 82, 95, 69, 45, 54, 22, 41, 94, - 55, 0, 36, 73, 75, 14, 0, 17, 81, 74, 47, 127, 13, 60, 56, 34, 92, 20, 53, 41, 64, 20, 55, - 102, 118, 15, 105, 7, 22, 70, 93, 53, 48, 84, 107, 16, 89, 86, 52, 39, 26, 114, 51, 67, 71, 87, - 6, 71, 49, 70, 59, 9, 50, 105, 121, 77, 100, 47, 119, 8, 61, 12, 2, 50, 121, 89, 46, 109, 56, - 114, 69, 96, 49, 104, 58, 80, 35, 125, 25, 114, 106, 36, 111, 34, 118, 93, 16, 48, 9, 85, 61, 39, - 87, 50, 88, 14, 87, 48, 84, 110, 74, 61, 3, 33, 76, 94, 96, 57, 110, 52, 38, 29, 18, 101, 111, - 68, 83, 6, 9, 12, 124, 3, 30, 62, 98, 83, 116, 11, 127, 91, 60, 105, 23, 79, 47, 63, 35, 63, - 16, 62, 57, 59, 105, 103, 65, 50, 103, 3, 120, 5, 66, 87, 30, 84, 127, 87, 113, 15, 78, 96, 1, - 0, 107, 9, 116, 41, 82, 111, 53, 97, 114, 91, 55, 34, 77, 38, 54, 105, 88, 42, 50, 27, 54, 68, - 54, 79, 114, 71, 97, 34, 6, 28, 6, 3, 88, 125, 50, 114, 39, 48, 29, 104, 87, 108, 100, 44, 50, - 39, 64, 50, 14, 80, 50, 70, 11, 21, 72, 38, 96, 44, 115, 15, 32, 77, 70, 124, 94, 116, 42, 95, - 38, 100, 102, 2, 28, 124, 66, 64, 11, 116, 112, 15, 11, 74, 111, 85, 27, 8, 71, 46, 59, 63, 19, - 65, 70, 62, 70, 76, 95, 51, 71, 74, 49, 43, 108, 38, 19, 74, 79, 83, 118, 24, 104, 120, 59, 65, - 107, 36, 97, 28, 15, 24, 7, 114, 70, 109, 43, 36, 36, 6, 63, 30, 18, 120, 115, 86, 39, 61, 127, - 69, 57, 126, 34, 94, 60, 49, 6, 18, 14, 1, 96, 77, 45, 119, 19, 118, 123, 120, 34, 81, 22, 61, - 61, 22, 80, 18, 75, 84, 49, 43, 86, 45, 28, 36, 97, 16, 1, 0, 85, 118, 61, 17, 96, 21, 10, - 81, 20, 3, 117, 29, 57, 2, 81, 62, 17, 76, 77, 64, 78, 110, 44, 107, 29, 48, 47, 66, 84, 36, - 112, 125, 12, 108, 62, 95, 119, 121, 56, 122, 93, 35, 52, 37, 120, 89, 18, 73, 127, 100, 14, 62, 74, - 53, 15, 13, 51, 42, 64, 80, 116, 50, 42, 22, 65, 88, 23, 17, 7, 83, 125, 4, 40, 109, 37, 1, - 93, 85, 85, 88, 80, 5, 47, 17, 60, 100, 68, 95, 104, 26, 69, 111, 104, 29, 101, 57, 115, 43, 64, - 56, 97, 104, 56, 22, 49, 87, 103, 64, 88, 79, 110, 86, 95, 76, 63, 47, 71, 6, 33, 126, 33, 12, - 51, 53, 7, 63, 27, 34, 3, 4, 21, 15, 7, 78, 119, 8, 114, 108, 10, 125, 64, 116, 73, 101, 60, - 41, 116, 11, 71, 77, 83, 76, 54, 7, 88, 84, 92, 127, 73, 77, 108, 73, 3, 47, 9, 76, 61, 43, - 34, 10, 27, 61, 85, 64, 3, 22, 94, 124, 8, 6, 114, 70, 24, 55, 112, 44, 23, 20, 83, 118, 60, - 127, 110, 45, 98, 117, 110, 44, 29, 15, 40, 29, 66, 71, 17, 121, 72, 18, 90, 38, 12, 54, 119, 92, - 108, 120, 8, 54, 17, 126, 98, 79, 114, 20, 94, 19, 79, 28, 89, 87, 79, 45, 112, 100, 47, 68, 95, - 125, 61, 84, 86, 114, 100, 92, 101, 53, 45, 114, 95, 11, 23, 2, 117, 23, 4, 77, 99, 72, 42, 75, - 109, 100, 69, 41, 109, 2, 111, 46, 111, 31, 59, 115, 27, 3, 93, 86, 29, 65, 1, 45, 12, 81, 96, - 83, 80, 31, 46, 103, 59, 43, 83, 86, 13, 63, 49, 47, 86, 6, 79, 63, 100, 79, 77, 106, 99, 78, - 42, 10, 48, 72, 11, 51, 84, 15, 37, 107, 87, 18, 60, 35, 38, 106, 43, 90, 67, 74, 125, 106, 65, - 88, 103, 94, 79, 9, 32, 0, 64, 25, 66, 52, 125, 92, 21, 19, 121, 15, 105, 14, 54, 66, 95, 95, - 69, 115, 4, 55, 114, 9, 42, 67, 57, 42, 64, 89, 102, 40, 22, 93, 52, 76, 66, 104, 6, 47, 16, - 88, 27, 37, 76, 95, 67, 100, 17, 22, 70, 26, 73, 90, 14, 70, 58, 34, 77, 48, 124, 11, 13, 94, - 27, 0, 1, 22, 5, 126, 53, 11, 73, 93, 1, 82, 102, 118, 53, 61, 87, 20, 52, 105, 2, 87, 78, - 42, 95, 117, 79, 82, 56, 100, 126, 108, 59, 74, 55, 112, 80, 35, 68, 117, 88, 9, 15, 73, 91, 35, - 5, 86, 112, 45, 124, 107, 98, 76, 23, 67, 10, 99, 111, 125, 18, 62, 52, 27, 63, 76, 110, 103, 110, - 51, 82, 17, 111, 43, 110, 4, 91, 99, 10, 90, 121, 75, 56, 20, 50, 72, 77, 100, 107, 28, 101, 104, - 67, 80, 115, 27, 66, 8, 7, 126, 68, 116, 79, 47, 92, 2, 101, 2, 127, 70, 9, 63, 7, 79, 24, - 59, 75, 48, 71, 94, 94, 59, 119, 74, 70, 94, 82, 50, 39, 52, 49, 24, 118, 92, 102, 39, 7, 111, - 77, 5, 106, 53, 89, 54, 0, 86, 66, 94, 41, 9, 5, 80, 88, 81, 117, 57, 9, 33, 60, 99, 105, - 97, 98, 97, 108, 11, 83, 63, 55, 7, 82, 9, 47, 124, 60, 121, 56, 44, 77, 24, 108, 53, 85, 60, - 67, 107, 64, 111, 94, 105, 79, 118, 6, 124, 16, 38, 12, 118, 31, 119, 101, 12, 106, 108, 40, 113, 93, - 97, 11, 17, 34, 108, 51, 55, 61, 110, 96, 60, 54, 120, 19, 54, 61, 46, 113, 117, 38, 125, 46, 38, - 75, 117, 124, 121, 102, 39, 65, 75, 124, 63, 40, 26, 40, 58, 19, 55, 34, 119, 63, 86, 46, 24, 59, - 3, 97, 115, 46, 94, 43, 100, 58, 12, 98, 39, 25, 59, 108, 103, 101, 80, 66, 93, 44, 12, 64, 81, - 56, 71, 127, 44, 58, 96, 89, 72, 80, 41, 109, 110, 80, 50, 93, 71, 52, 110, 103, 95, 91, 56, 111, - 108, 59, 12, 14, 71, 29, 48, 46, 32, 113, 58, 11, 120, 103, 21, 10, 12, 110, 72, 82, 83, 109, 7, - 5, 49, 82, 123, 32, 66, 40, 14, 43, 10, 85, 89, 105, 115, 93, 16, 106, 113, 47, 42, 14, 108, 11, - 95, 106, 120, 93, 115, 83, 110, 2, 113, 70, 6, 123, 26, 121, 106, 72, 91, 56, 94, 114, 60, 54, 49, - 46, 7, 42, 84, 38, 88, 117, 114, 15, 19, 44, 76, 117, 2, 53, 119, 30, 36, 107, 87, 64, 83, 91, - 39, 82, 7, 28, 113, 30, 115, 43, 52, 34, 35, 122, 81, 68, 111, 103, 11, 22, 101, 67, 52, 115, 45, - 7, 126, 112, 25, 114, 51, 70, 24, 116, 44, 19, 116, 30, 111, 52, 49, 70, 108, 126, 85, 39, 46, 30, - 55, 76, 108, 68, 25, 123, 63, 50, 27, 28, 35, 106, 39, 59, 68, 39, 42, 2, 108, 25, 53, 61, 84, - 14, 25, 32, 46, 65, 102, 62, 10, 21, 104, 67, 96, 18, 38, 120, 9, 77, 52, 73, 80, 67, 56, 18, - 40, 88, 86, 51, 43, 9, 74, 115, 92, 49, 49, 77, 15, 75, 90, 77, 39, 74, 23, 33, 64, 49, 5, - 105, 12, 46, 61, 24, 14, 46, 22, 111, 54, 123, 23, 67, 42, 40, 110, 37, 42, 17, 56, 93, 59, 46, - 126, 115, 112, 104, 108, 31, 20, 87, 62, 52, 67, 48, 126, 79, 94, 6, 85, 113, 3, 27, 25, 94, 36, - 74, 14, 95, 20, 33, 20, 70, 118, 31, 78, 26, 47, 28, 25, 22, 120, 10, 17, 20, 100, 36, 51, 102, - 89, 59, 115, 16, 99, 6, 82, 86, 77, 114, 111, 37, 72, 30, 42, 71, 102, 94, 92, 36, 1, 63, 100, - 71, 20, 78, 95, 43, 58, 24, 87, 13, 21, 59, 79, 7, 68, 1, 111, 36, 20, 7, 103, 94, 12, 89, - 55, 3, 52, 127, 25, 18, 33, 87, 42, 0, 108, 15, 48, 118, 64, 71, 49, 118, 108, 8, 72, 58, 38, - 4, 52, 18, 9, 100, 52, 100, 88, 116, 92, 70, 118, 123, 72, 93, 121, 98, 16, 23, 50, 18, 18, 29, - 48, 6, 4, 13, 82, 114, 23, 88, 46, 110, 85, 23, 73, 80, 33, 24, 20, 123, 93, 124, 119, 101, 43, - 31, 87, 15, 71, 85, 74, 119, 46, 112, 40, 25, 74, 65, 105, 104, 24, 68, 38, 73, 117, 26, 75, 79, - 74, 105, 72, 36, 96, 106, 106, 22, 38, 108, 57, 5, 38, 42, 4, 31, 55, 90, 108, 116, 56, 116, 116, - 46, 17, 52, 12, 31, 78, 78, 110, 97, 26, 17, 70, 86, 118, 125, 97, 4, 77, 95, 90, 78, 4, 110, - 25, 103, 11, 115, 93, 53, 70, 14, 12, 9, 45, 72, 51, 53, 102, 40, 81, 110, 65, 38, 48, 92, 49, - 95, 18, 43, 56, 71, 29, 33, 110, 88, 36, 127, 25, 15, 113, 27, 114, 65, 26, 123, 41, 17, 89, 61, - 56, 26, 12, 91, 72, 96, 32, 69, 113, 50, 55, 94, 27, 119, 51, 61, 98, 57, 109, 91, 22, 105, 72, - 43, 58, 35, 11, 97, 39, 32, 80, 12, 114, 75, 77, 7, 111, 24, 37, 93, 21, 114, 59, 36, 127, 93, - 6, 40, 84, 34, 18, 73, 82, 26, 102, 54, 51, 107, 47, 68, 42, 35, 86, 4, 63, 66, 100, 29, 14, - 18, 98, 72, 100, 119, 106, 34, 75, 107, 74, 56, 118, 62, 108, 90, 2, 26, 24, 76, 50, 0, 21, 114, - 106, 29, 19, 85, 97, 42, 50, 64, 86, 66, 105, 33, 82, 80, 109, 74, 52, 122, 63, 123, 81, 69, 116, - 125, 7, 126, 107, 56, 95, 106, 47, 46, 34, 78, 29, 63, 86, 83, 94, 7, 1, 81, 114, 83, 38, 75, - 97, 119, 116, 3, 77, 41, 53, 31, 44, 18, 94, 121, 49, 36, 106, 14, 81, 120, 70, 34, 13, 113, 98, - 50, 104, 126, 105, 67, 103, 52, 32, 4, 101, 91, 87, 32, 54, 8, 89, 111, 48, 51, 74, 89, 31, 30, - 117, 20, 107, 114, 126, 56, 26, 53, 70, 10, 86, 63, 43, 41, 109, 76, 25, 33, 95, 51, 85, 21, 126, - 19, 34, 118, 68, 12, 67, 5, 11, 99, 19, 93, 72, 118, 75, 71, 19, 2, 20, 60, 81, 37, 96, 100, - 92, 3, 106, 27, 68, 99, 97, 67, 20, 100, 11, 54, 35, 79, 69, 125, 20, 105, 37, 48, 16, 10, 7, - 100, 40, 106, 112, 15, 104, 68, 1, 112, 20, 25, 31, 15, 115, 29, 78, 123, 65, 79, 101, 48, 97, 79, - 98, 124, 4, 19, 74, 16, 57, 3, 112, 106, 63, 116, 61, 97, 92, 4, 58, 12, 63, 92, 18, 72, 31, - 41, 70, 80, 30, 77, 40, 20, 3, 38, 33, 49, 90, 93, 67, 53, 113, 14, 82, 38, 61, 47, 61, 31, - 39, 13, 88, 103, 76, 125, 25, 23, 89, 106, 32, 127, 35, 86, 36, 13, 31, 1, 28, 37, 118, 11, 63, - 68, 17, 100, 17, 87, 3, 101, 124, 80, 35, 73, 73, 92, 54, 51, 77, 123, 95, 32, 117, 101, 93, 83, - 61, 125, 5, 106, 101, 65, 14, 60, 51, 63, 14, 24, 73, 8, 34, 54, 109, 101, 81, 103, 10, 42, 67, - 20, 65, 70, 17, 105, 51, 114, 81, 100, 34, 30, 19, 110, 113, 126, 77, 8, 100, 68, 95, 62, 83, 62, - 20, 53, 12, 42, 61, 85, 28, 56, 76, 8, 28, 19, 3, 43, 119, 61, 30, 23, 121, 53, 61, 39, 59, - 6, 107, 101, 57, 42, 35, 6, 39, 39, 113, 50, 81, 49, 88, 107, 51, 107, 88, 15, 63, 111, 81, 22, - 2, 49, 39, 16, 42, 126, 72, 80, 11, 63, 42, 125, 57, 36, 8, 120, 112, 13, 1, 91, 70, 28, 12, - 42, 47, 53, 53, 74, 74, 122, 6, 103, 49, 53, 83, 11, 49, 125, 89, 1, 27, 98, 111, 110, 56, 116, - 111, 68, 46, 121, 90, 52, 22, 57, 80, 26, 93, 127, 89, 103, 21, 17, 37, 43, 27, 110, 2, 23, 121, - 85, 90, 72, 42, 62, 117, 89, 90, 47, 81, 104, 46, 108, 117, 12, 40, 46, 90, 116, 93, 125, 107, 104, - 48, 110, 76, 86, 98, 22, 86, 71, 36, 88, 22, 65, 19, 108, 72, 4, 120, 103, 118, 40, 8, 118, 119, - 96, 51, 12, 7, 37, 74, 95, 12, 81, 109, 124, 21, 29, 4, 0, 0, 39, 54, 33, 57, 108, 107, 124, - 58, 114, 40, 3, 7, 126, 75, 95, 6, 17, 105, 22, 110, 73, 8, 28, 109, 98, 51, 66, 104, 120, 46, - 86, 55, 123, 75, 31, 94, 42, 46, 3, 117, 26, 97, 44, 25, 9, 99, 20, 51, 96, 117, 39, 97, 90, - 111, 57, 16, 119, 73, 60, 31, 100, 66, 50, 47, 103, 43, 118, 2, 121, 68, 122, 67, 31, 92, 77, 22, - 77, 104, 52, 101, 105, 117, 32, 40, 114, 51, 26, 68, 9, 40, 101, 93, 52, 67, 10, 108, 53, 37, 65, - 12, 83, 13, 73, 82, 66, 16, 42, 125, 105, 52, 50, 77, 84, 7, 44, 56, 39, 39, 96, 4, 34, 61, - 58, 87, 49, 41, 26, 63, 88, 0, 52, 36, 14, 30, 6, 99, 35, 111, 1, 106, 122, 53, 1, 114, 5, - 100, 71, 63, 53, 122, 25, 50, 117, 61, 82, 21, 70, 90, 94, 127, 22, 77, 78, 15, 64, 80, 70, 79, - 109, 108, 109, 59, 108, 27, 112, 113, 112, 14, 19, 59, 115, 5, 108, 48, 43, 76, 125, 113, 59, 27, 105, - 125, 49, 1, 39, 33, 32, 77, 3, 45, 28, 30, 117, 103, 23, 67, 98, 88, 95, 90, 3, 97, 72, 66, - 78, 50, 39, 58, 108, 61, 84, 45, 8, 106, 96, 89, 32, 64, 96, 1, 106, 42, 83, 109, 57, 14, 46, - 50, 106, 53, 64, 67, 116, 73, 25, 17, 72, 20, 100, 9, 115, 87, 61, 75, 99, 67, 31, 44, 100, 121, - 46, 120, 104, 38, 77, 42, 26, 74, 89, 10, 114, 5, 115, 42, 27, 66, 96, 51, 5, 28, 71, 61, 93, - 57, 2, 62, 114, 60, 43, 99, 42, 67, 47, 113, 8, 11, 111, 103, 75, 120, 41, 97, 84, 122, 56, 28, - 92, 62, 1, 101, 10, 8, 114, 94, 68, 83, 119, 57, 86, 116, 21, 103, 110, 102, 103, 24, 85, 93, 38, - 103, 66, 24, 110, 102, 12, 121, 123, 108, 53, 70, 66, 35, 86, 43, 22, 51, 19, 77, 86, 66, 59, 3, - 48, 71, 88, 95, 39, 76, 104, 44, 41, 44, 59, 47, 83, 68, 34, 102, 1, 30, 81, 114, 112, 118, 43, - 3, 71, 12, 43, 64, 81, 16, 38, 118, 14, 87, 105, 49, 102, 100, 89, 6, 115, 12, 83, 83, 45, 7, - 38, 79, 126, 90, 63, 64, 113, 84, 15, 62, 7, 104, 35, 100, 15, 6, 48, 51, 81, 69, 96, 77, 122, - 47, 52, 51, 20, 90, 56, 4, 110, 117, 85, 81, 96, 13, 110, 120, 108, 89, 45, 35, 31, 65, 118, 112, - 116, 91, 42, 85, 13, 55, 91, 111, 23, 79, 46, 26, 26, 85, 78, 97, 24, 62, 42, 98, 117, 83, 37, - 38, 45, 39, 50, 115, 12, 61, 50, 9, 94, 13, 127, 100, 109, 88, 72, 81, 71, 71, 95, 17, 113, 100, - 17, 46, 56, 104, 68, 33, 86, 98, 35, 21, 32, 120, 7, 7, 30, 4, 98, 88, 110, 7, 22, 19, 109, - 29, 25, 11, 100, 47, 118, 59, 93, 115, 58, 2, 45, 92, 6, 15, 61, 58, 83, 111, 38, 113, 80, 44, - 78, 6, 94, 121, 102, 61, 47, 124, 83, 26, 98, 8, 52, 88, 45, 11, 15, 6, 109, 71, 7, 21, 99, - 14, 118, 102, 2, 21, 87, 50, 68, 28, 98, 94, 15, 22, 45, 120, 44, 121, 70, 9, 54, 95, 64, 45, - 39, 25, 8, 88, 70, 73, 102, 59, 18, 34, 124, 20, 56, 1, 15, 19, 121, 46, 17, 100, 58, 123, 112, - 46, 83, 11, 31, 82, 63, 46, 84, 74, 76, 58, 90, 113, 20, 91, 63, 49, 54, 109, 40, 80, 77, 107, - 3, 2, 120, 33, 123, 17, 126, 66, 92, 84, 87, 119, 73, 119, 37, 87, 89, 98, 121, 7, 96, 32, 82, - 78, 17, 15, 87, 61, 79, 58, 102, 121, 79, 93, 46, 72, 12, 13, 61, 83, 57, 117, 80, 92, 15, 33, - 106, 103, 87, 87, 56, 7, 63, 59, 112, 25, 117, 31, 122, 1, 50, 109, 26, 48, 56, 40, 39, 85, 55, - 26, 72, 84, 73, 76, 18, 126, 54, 114, 30, 44, 18, 83, 124, 112, 87, 30, 100, 115, 65, 38, 113, 60, - 49, 18, 74, 30, 122, 114, 46, 81, 28, 42, 86, 62, 110, 103, 46, 24, 7, 4, 121, 23, 67, 45, 116, - 83, 34, 124, 91, 57, 127, 5, 2, 15, 86, 13, 102, 16, 32, 33, 4, 20, 11, 23, 14, 31, 81, 21, - 30, 28, 119, 122, 14, 14, 79, 107, 55, 96, 93, 47, 125, 35, 113, 80, 11, 43, 23, 10, 24, 30, 42, - 58, 41, 16, 34, 107, 92, 7, 29, 69, 70, 33, 4, 90, 59, 121, 52, 102, 67, 47, 81, 86, 105, 104, - 44, 102, 109, 49, 57, 23, 27, 96, 30, 108, 117, 63, 47, 18, 92, 70, 58, 9, 109, 108, 42, 40, 118, - 13, 99, 68, 25, 123, 92, 121, 56, 13, 87, 26, 33, 78, 60, 48, 124, 48, 5, 85, 123, 87, 110, 46, - 22, 115, 41, 27, 118, 29, 87, 63, 75, 23, 28, 17, 27, 122, 118, 14, 76, 34, 78, 6, 71, 1, 15, - 37, 107, 8, 118, 70, 17, 82, 51, 70, 11, 113, 34, 46, 23, 48, 52, 15, 80, 105, 24, 52, 53, 50, - 68, 111, 66, 117, 95, 71, 12, 20, 77, 49, 15, 118, 15, 120, 61, 57, 42, 107, 125, 17, 89, 100, 47, - 53, 38, 98, 53, 8, 35, 59, 93, 21, 73, 111, 96, 118, 58, 32, 94, 81, 110, 25, 98, 27, 126, 4, - 59, 89, 74, 7, 39, 60, 29, 38, 13, 120, 44, 12, 64, 63, 82, 116, 105, 1, 95, 56, 83, 71, 87, - 123, 111, 119, 66, 92, 109, 31, 35, 30, 2, 99, 3, 73, 26, 37, 23, 38, 82, 30, 27, 109, 113, 66, - 14, 66, 105, 59, 58, 39, 88, 52, 58, 106, 78, 80, 102, 2, 19, 36, 79, 1, 75, 61, 64, 84, 54, - 81, 74, 88, 98, 38, 50, 113, 67, 7, 48, 52, 120, 103, 39, 69, 40, 0, 39, 60, 93, 1, 92, 82, - 33, 74, 76, 119, 8, 8, 114, 66, 84, 54, 117, 58, 8, 60, 1, 13, 25, 58, 92, 83, 13, 4, 125, - 85, 23, 110, 96, 29, 63, 62, 66, 120, 101, 69, 96, 77, 119, 80, 16, 62, 23, 18, 96, 18, 43, 73, - 42, 1, 72, 100, 99, 72, 99, 94, 18, 26, 12, 119, 49, 115, 69, 107, 76, 63, 81, 60, 19, 98, 85, - 30, 72, 17, 110, 83, 115, 82, 51, 17, 106, 54, 69, 7, 86, 34, 33, 14, 65, 1, 31, 36, 18, 67, - 97, 54, 18, 11, 119, 13, 108, 29, 14, 109, 38, 98, 29, 101, 118, 103, 26, 42, 30, 50, 120, 85, 35, - 1, 49, 0, 20, 124, 8, 107, 119, 33, 22, 18, 121, 93, 72, 41, 62, 98, 122, 26, 3, 121, 54, 39, - 56, 49, 73, 27, 59, 31, 127, 15, 15, 31, 51, 29, 71, 69, 10, 67, 85, 104, 118, 87, 66, 99, 97, - 100, 107, 49, 11, 80, 71, 12, 70, 40, 41, 73, 62, 21, 72, 93, 85, 74, 26, 81, 3, 114, 50, 22, - 62, 102, 69, 10, 35, 95, 84, 18, 38, 111, 114, 9, 69, 83, 124, 53, 55, 113, 68, 43, 70, 103, 118, - 98, 103, 29, 62, 19, 83, 94, 119, 85, 31, 29, 59, 94, 70, 72, 25, 80, 94, 31, 35, 7, 34, 71, - 58, 34, 64, 58, 19, 6, 58, 47, 102, 86, 127, 102, 50, 23, 106, 79, 84, 17, 48, 100, 57, 85, 74, - 1, 63, 122, 15, 103, 62, 124, 52, 78, 102, 82, 43, 70, 64, 126, 81, 51, 89, 96, 4, 110, 89, 38, - 83, 9, 65, 16, 94, 97, 68, 23, 36, 107, 17, 115, 84, 17, 92, 83, 5, 93, 96, 5, 69, 69, 24, - 72, 64, 66, 55, 45, 32, 90, 79, 102, 81, 91, 66, 67, 102, 100, 67, 47, 50, 64, 45, 68, 10, 3, - 117, 37, 11, 4, 10, 103, 119, 95, 103, 78, 106, 3, 67, 23, 104, 69, 28, 81, 92, 70, 127, 43, 65, - 89, 42, 22, 15, 43, 41, 61, 36, 66, 106, 105, 4, 99, 65, 64, 122, 33, 76, 21, 114, 56, 27, 59, - 125, 126, 121, 124, 7, 49, 121, 87, 4, 90, 125, 125, 24, 44, 79, 95, 62, 97, 105, 66, 50, 110, 59, - 25, 110, 117, 27, 97, 86, 106, 126, 100, 65, 120, 99, 51, 85, 8, 17, 41, 121, 58, 110, 23, 57, 13, - 10, 23, 13, 49, 86, 9, 114, 40, 40, 66, 109, 18, 26, 45, 117, 75, 114, 21, 115, 120, 62, 9, 11, - 115, 98, 18, 26, 76, 48, 6, 45, 21, 23, 39, 116, 100, 103, 34, 53, 67, 50, 37, 66, 75, 81, 85, - 79, 97, 24, 111, 21, 35, 3, 39, 126, 8, 93, 98, 61, 28, 81, 24, 59, 47, 28, 102, 121, 27, 125, - 29, 101, 67, 53, 88, 109, 34, 52, 85, 76, 66, 11, 93, 12, 56, 92, 41, 14, 127, 115, 71, 38, 118, - 4, 85, 54, 69, 65, 71, 102, 99, 9, 34, 33, 9, 103, 99, 74, 89, 28, 18, 36, 109, 102, 87, 100, - 67, 13, 47, 22, 6, 9, 44, 31, 84, 126, 26, 96, 26, 71, 14, 125, 31, 48, 34, 69, 49, 80, 19, - 113, 50, 25, 45, 33, 7, 85, 110, 126, 108, 25, 2, 16, 111, 54, 13, 78, 85, 86, 104, 33, 114, 16, - 21, 63, 105, 4, 92, 119, 93, 35, 118, 26, 3, 40, 14, 3, 77, 16, 4, 6, 35, 24, 36, 48, 122, - 16, 114, 37, 34, 53, 36, 32, 3, 50, 6, 75, 97, 28, 92, 21, 22, 75, 47, 46, 43, 45, 95, 121, - 67, 89, 2, 117, 29, 116, 17, 83, 52, 14, 59, 15, 74, 92, 4, 37, 103, 4, 110, 108, 122, 71, 90, - 23, 77, 50, 111, 29, 33, 65, 120, 12, 46, 84, 118, 57, 41, 114, 86, 80, 75, 35, 96, 76, 91, 98, - 60, 5, 80, 29, 109, 74, 92, 120, 86, 62, 75, 102, 5, 70, 107, 108, 96, 46, 36, 35, 27, 71, 40, - 15, 78, 62, 58, 74, 55, 48, 47, 53, 22, 31, 81, 114, 30, 40, 84, 90, 85, 85, 69, 106, 63, 84, - 28, 66, 98, 117, 37, 106, 84, 66, 127, 112, 87, 28, 89, 1, 118, 37, 66, 57, 64, 125, 117, 5, 82, - 25, 9, 8, 12, 8, 82, 110, 43, 90, 2, 73, 86, 106, 45, 18, 77, 45, 38, 22, 6, 41, 6, 87, - 88, 90, 95, 48, 60, 121, 7, 21, 103, 19, 68, 107, 44, 76, 107, 102, 55, 98, 121, 100, 69, 114, 91, - 87, 17, 39, 41, 26, 48, 123, 96, 115, 126, 70, 71, 21, 89, 45, 22, 75, 103, 54, 37, 90, 103, 44, - 11, 26, 68, 7, 110, 58, 102, 29, 105, 97, 83, 15, 86, 51, 9, 97, 21, 28, 102, 41, 47, 26, 65, - 76, 39, 60, 15, 93, 82, 102, 118, 101, 35, 120, 46, 105, 103, 94, 14, 38, 106, 50, 13, 62, 25, 105, - 89, 69, 21, 54, 13, 31, 98, 107, 104, 35, 49, 112, 1, 52, 104, 100, 9, 2, 1, 93, 92, 106, 98, - 44, 88, 106, 36, 99, 21, 90, 50, 97, 58, 115, 7, 51, 126, 77, 124, 17, 1, 64, 22, 56, 14, 127, - 125, 5, 3, 15, 6, 30, 95, 24, 93, 48, 121, 23, 101, 10, 2, 83, 13, 19, 69, 117, 57, 1, 48, - 96, 90, 124, 17, 64, 97, 121, 56, 7, 60, 3, 32, 73, 55, 118, 34, 62, 75, 108, 2, 88, 91, 106, - 57, 2, 28, 61, 2, 107, 100, 39, 78, 121, 64, 125, 34, 113, 126, 108, 86, 97, 26, 96, 32, 78, 57, - 112, 9, 88, 23, 16, 99, 66, 87, 113, 92, 36, 78, 48, 4, 80, 54, 36, 2, 51, 46, 20, 64, 18, - 44, 66, 91, 80, 100, 94, 103, 90, 27, 3, 88, 69, 122, 68, 107, 55, 86, 45, 19, 51, 95, 33, 74, - 66, 92, 30, 71, 46, 23, 104, 44, 10, 116, 27, 54, 78, 27, 95, 121, 59, 87, 86, 98, 87, 54, 48, - 13, 73, 24, 92, 38, 106, 3, 10, 1, 21, 45, 32, 2, 36, 76, 115, 117, 108, 18, 112, 15, 103, 8, - 5, 77, 68, 65, 88, 100, 39, 21, 32, 63, 66, 123, 68, 87, 75, 39, 92, 103, 102, 75, 110, 76, 9, - 39, 100, 57, 113, 51, 61, 65, 89, 123, 33, 118, 92, 62, 117, 63, 71, 48, 29, 77, 81, 102, 59, 20, - 116, 107, 39, 54, 38, 39, 50, 66, 60, 87, 43, 81, 82, 55, 118, 107, 49, 61, 7, 76, 105, 84, 79, - 115, 27, 88, 46, 76, 8, 121, 64, 85, 8, 39, 29, 63, 35, 29, 76, 117, 7, 89, 31, 50, 125, 37, - 49, 114, 32, 99, 61, 120, 70, 126, 3, 110, 101, 29, 121, 110, 80, 22, 119, 120, 7, 64, 26, 117, 99, - 114, 81, 111, 47, 38, 59, 121, 5, 59, 39, 47, 37, 125, 30, 56, 60, 69, 92, 88, 32, 35, 35, 67, - 2, 0, 73, 70, 84, 93, 73, 11, 47, 75, 96, 33, 111, 48, 79, 48, 20, 11, 48, 18, 111, 119, 83, - 126, 124, 120, 48, 27, 4, 50, 13, 12, 84, 20, 27, 112, 83, 126, 9, 10, 119, 84, 118, 45, 44, 96, - 58, 125, 120, 20, 73, 4, 112, 24, 48, 53, 43, 13, 108, 87, 11, 20, 85, 97, 19, 108, 36, 29, 25, - 9, 51, 18, 115, 26, 77, 5, 36, 65, 33, 2, 2, 24, 118, 15, 106, 10, 66, 64, 121, 25, 4, 29, - 40, 41, 17, 6, 107, 66, 10, 56, 102, 43, 66, 76, 69, 91, 3, 31, 63, 17, 4, 35, 91, 13, 58, - 121, 99, 1, 44, 120, 37, 18, 26, 112, 10, 7, 48, 103, 99, 69, 24, 102, 93, 4, 43, 102, 74, 22, - 34, 63, 82, 35, 102, 54, 88, 78, 101, 96, 81, 14, 46, 92, 92, 87, 90, 112, 2, 55, 73, 122, 31, - 103, 24, 91, 84, 93, 77, 15, 93, 32, 41, 36, 69, 1, 43, 28, 39, 9, 35, 57, 29, 104, 44, 35, - 77, 86, 25, 22, 105, 78, 92, 48, 25, 61, 37, 117, 78, 30, 16, 23, 80, 108, 36, 60, 117, 25, 2, - 79, 54, 79, 56, 77, 28, 90, 31, 105, 67, 12, 93, 36, 45, 127, 124, 70, 92, 59, 100, 123, 15, 52, - 66, 87, 83, 24, 115, 17, 93, 49, 87, 78, 121, 122, 64, 69, 43, 69, 27, 42, 91, 40, 32, 77, 108, - 3, 109, 13, 96, 116, 27, 60, 79, 61, 2, 19, 124, 95, 43, 100, 88, 37, 47, 50, 102, 1, 64, 98, - 26, 76, 84, 45, 11, 114, 50, 8, 125, 53, 104, 18, 27, 32, 63, 20, 34, 109, 63, 123, 98, 101, 40, - 23, 99, 54, 35, 4, 121, 85, 51, 28, 38, 109, 104, 51, 123, 11, 65, 56, 50, 107, 85, 83, 25, 49, - 6, 118, 104, 111, 99, 53, 83, 23, 7, 81, 88, 64, 103, 35, 60, 33, 2, 69, 28, 32, 124, 39, 118, - 24, 104, 91, 77, 22, 66, 91, 85, 101, 1, 71, 35, 116, 85, 94, 80, 70, 70, 42, 127, 10, 53, 53, - 105, 29, 60, 44, 103, 35, 75, 80, 63, 121, 75, 37, 9, 88, 81, 118, 91, 57, 116, 48, 52, 10, 105, - 78, 121, 23, 6, 55, 58, 35, 85, 80, 62, 110, 109, 18, 52, 91, 66, 29, 37, 47, 76, 118, 4, 45, - 30, 28, 28, 16, 51, 58, 65, 19, 109, 26, 91, 56, 1, 7, 58, 52, 82, 104, 10, 120, 0, 71, 52, - 4, 106, 125, 123, 101, 99, 117, 13, 7, 105, 101, 30, 104, 7, 55, 64, 114, 76, 8, 91, 121, 40, 55, - 24, 55, 71, 20, 24, 17, 33, 63, 0, 73, 28, 86, 72, 53, 78, 118, 82, 89, 34, 73, 11, 71, 110, - 92, 87, 94, 6, 14, 65, 7, 61, 95, 121, 60, 30, 62, 93, 50, 122, 85, 32, 23, 31, 73, 121, 52, - 6, 11, 71, 61, 76, 110, 78, 102, 123, 34, 60, 88, 112, 78, 121, 27, 20, 97, 64, 53, 106, 0, 32, - 93, 126, 1, 45, 52, 74, 79, 70, 78, 49, 65, 17, 65, 82, 100, 62, 40, 33, 7, 17, 33, 35, 114, - 8, 90, 113, 89, 7, 2, 79, 80, 71, 65, 80, 13, 100, 116, 94, 92, 48, 91, 50, 32, 39, 68, 87, - 58, 122, 88, 28, 42, 13, 58, 70, 52, 92, 64, 55, 116, 98, 98, 74, 74, 24, 115, 20, 47, 47, 19, - 36, 5, 27, 8, 61, 82, 86, 20, 95, 107, 25, 76, 117, 97, 70, 97, 74, 118, 36, 89, 33, 18, 113, - 89, 3, 28, 92, 41, 115, 79, 15, 106, 77, 120, 15, 120, 13, 107, 21, 16, 41, 42, 85, 80, 120, 47, - 76, 73, 32, 9, 13, 7, 104, 107, 112, 101, 75, 42, 33, 34, 99, 80, 34, 126, 108, 60, 28, 92, 112, - 84, 99, 98, 90, 46, 71, 88, 11, 105, 70, 71, 18, 57, 89, 87, 122, 35, 85, 41, 36, 24, 36, 77, - 108, 41, 122, 114, 51, 29, 98, 109, 12, 59, 105, 87, 33, 51, 48, 58, 71, 126, 4, 62, 13, 27, 15, - 8, 86, 117, 117, 78, 31, 33, 106, 93, 125, 106, 51, 16, 82, 105, 9, 10, 26, 2, 88, 78, 114, 101, - 59, 115, 15, 26, 44, 50, 34, 75, 69, 52, 95, 57, 12, 60, 24, 52, 70, 11, 76, 81, 108, 74, 67, - 8, 88, 112, 90, 41, 58, 57, 38, 82, 18, 86, 112, 88, 67, 113, 54, 109, 119, 46, 107, 111, 68, 126, - 77, 50, 52, 105, 37, 62, 77, 39, 67, 81, 94, 47, 114, 93, 49, 35, 76, 73, 79, 2, 12, 109, 66, - 95, 104, 64, 110, 91, 66, 86, 31, 120, 78, 124, 56, 100, 46, 7, 60, 107, 66, 91, 18, 50, 31, 127, - 61, 9, 49, 109, 67, 109, 13, 49, 32, 89, 87, 26, 21, 107, 12, 76, 74, 65, 58, 1, 99, 84, 66, - 3, 11, 20, 26, 27, 42, 64, 63, 10, 27, 112, 32, 105, 122, 55, 113, 21, 2, 52, 102, 32, 84, 26, - 65, 16, 110, 8, 38, 78, 120, 17, 108, 38, 15, 87, 114, 110, 22, 72, 14, 39, 120, 116, 124, 58, 52, - 46, 68, 1, 104, 37, 108, 68, 31, 80, 106, 33, 116, 73, 76, 29, 5, 69, 99, 77, 60, 89, 19, 91, - 114, 19, 119, 81, 114, 119, 72, 25, 3, 40, 69, 30, 97, 36, 17, 62, 36, 69, 95, 116, 73, 113, 17, - 5, 116, 46, 117, 70, 46, 77, 26, 119, 113, 91, 0, 108, 3, 30, 91, 72, 99, 31, 0, 114, 92, 34, - 91, 56, 95, 66, 57, 46, 74, 110, 97, 71, 12, 110, 89, 18, 35, 51, 84, 35, 15, 18, 123, 45, 83, - 45, 80, 58, 101, 86, 24, 12, 49, 76, 81, 126, 28, 46, 15, 114, 37, 31, 118, 63, 41, 120, 44, 82, - 74, 104, 124, 87, 120, 109, 97, 19, 29, 55, 51, 89, 126, 119, 28, 37, 55, 9, 59, 31, 85, 56, 9, - 56, 101, 22, 93, 99, 103, 24, 37, 112, 3, 36, 87, 115, 41, 70, 99, 64, 46, 91, 96, 98, 41, 77, - 40, 68, 22, 7, 7, 21, 73, 26, 17, 18, 27, 4, 93, 45, 106, 125, 96, 81, 91, 56, 89, 62, 125, - 48, 62, 63, 113, 81, 7, 46, 125, 99, 80, 26, 22, 53, 68, 58, 40, 105, 79, 17, 25, 97, 17, 29, - 28, 53, 89, 14, 50, 5, 13, 94, 76, 20, 77, 12, 95, 117, 15, 31, 52, 32, 75, 25, 78, 23, 34, - 51, 125, 100, 23, 30, 115, 53, 28, 2, 114, 91, 26, 66, 109, 101, 9, 109, 48, 8, 104, 6, 85, 10, - 112, 15, 10, 109, 76, 79, 112, 16, 118, 88, 31, 126, 1, 98, 108, 24, 67, 84, 30, 0, 120, 126, 99, - 93, 28, 21, 31, 38, 92, 61, 105, 49, 105, 58, 23, 80, 28, 105, 45, 110, 54, 4, 19, 124, 68, 9, - 61, 2, 92, 100, 104, 3, 91, 98, 62, 80, 110, 73, 112, 57, 105, 43, 13, 62, 88, 98, 104, 99, 100, - 93, 109, 55, 23, 50, 37, 59, 46, 2, 3, 74, 17, 104, 93, 22, 56, 80, 121, 99, 8, 49, 10, 32, - 92, 54, 59, 59, 10, 111, 61, 62, 29, 55, 8, 64, 41, 14, 49, 93, 28, 100, 54, 3, 5, 23, 126, - 123, 69, 48, 94, 70, 61, 97, 61, 33, 3, 50, 26, 44, 82, 80, 47, 93, 105, 27, 70, 38, 50, 109, - 75, 47, 99, 62, 117, 106, 113, 6, 65, 54, 74, 1, 24, 113, 79, 85, 19, 64, 113, 28, 127, 72, 126, - 84, 13, 14, 48, 101, 107, 31, 3, 103, 31, 25, 31, 24, 30, 32, 64, 98, 112, 45, 95, 83, 57, 108, - 16, 66, 23, 97, 93, 85, 12, 88, 64, 67, 2, 122, 81, 114, 24, 113, 53, 90, 100, 82, 68, 81, 22, - 103, 12, 95, 76, 37, 88, 2, 61, 83, 46, 51, 126, 24, 8, 16, 118, 99, 25, 0, 70, 12, 76, 1, - 72, 123, 99, 105, 90, 90, 57, 87, 10, 9, 40, 40, 55, 10, 125, 78, 5, 109, 23, 38, 40, 21, 53, - 99, 79, 8, 19, 123, 109, 57, 88, 68, 91, 5, 17, 60, 9, 44, 122, 14, 31, 0, 26, 87, 105, 27, - 81, 48, 10, 7, 44, 93, 10, 52, 106, 79, 122, 82, 34, 122, 52, 105, 49, 36, 60, 8, 83, 10, 122, - 95, 33, 53, 82, 30, 1, 103, 87, 51, 118, 11, 33, 95, 56, 27, 12, 84, 33, 30, 84, 11, 2, 29, - 7, 4, 7, 28, 9, 100, 73, 55, 109, 19, 28, 28, 51, 16, 27, 9, 65, 71, 92, 27, 125, 2, 48, - 75, 49, 117, 114, 83, 55, 121, 122, 37, 13, 5, 35, 95, 96, 97, 21, 10, 29, 118, 97, 10, 60, 58, - 41, 126, 45, 89, 126, 92, 44, 47, 12, 7, 24, 120, 119, 116, 82, 50, 61, 110, 4, 43, 32, 109, 46, - 36, 41, 67, 43, 82, 39, 101, 67, 47, 87, 105, 115, 103, 109, 52, 44, 122, 29, 125, 113, 50, 84, 91, - 12, 23, 17, 9, 32, 85, 117, 48, 106, 73, 78, 11, 121, 56, 118, 22, 125, 53, 37, 100, 22, 77, 89, - 17, 76, 109, 9, 42, 70, 42, 62, 26, 96, 96, 102, 99, 32, 13, 102, 11, 45, 26, 76, 62, 12, 1, - 89, 90, 5, 28, 107, 71, 95, 27, 117, 15, 56, 30, 36, 101, 55, 107, 63, 20, 111, 81, 45, 20, 104, - 98, 118, 11, 117, 108, 47, 5, 63, 30, 94, 11, 96, 85, 35, 93, 109, 127, 39, 42, 96, 39, 9, 98, - 64, 110, 61, 81, 58, 88, 46, 79, 102, 95, 118, 50, 76, 105, 69, 25, 11, 9, 2, 97, 113, 56, 74, - 124, 34, 61, 109, 72, 106, 86, 3, 52, 88, 99, 39, 78, 89, 102, 79, 60, 6, 45, 1, 29, 10, 31, - 51, 70, 2, 50, 8, 100, 98, 82, 29, 19, 75, 60, 80, 4, 7, 36, 23, 12, 11, 62, 18, 68, 18, - 68, 38, 62, 82, 42, 103, 70, 36, 65, 110, 92, 8, 57, 82, 88, 106, 46, 24, 37, 46, 97, 37, 117, - 49, 112, 18, 40, 68, 13, 70, 85, 12, 120, 16, 80, 50, 52, 124, 44, 126, 108, 6, 91, 7, 34, 109, - 49, 5, 0, 102, 96, 124, 48, 27, 19, 52, 8, 55, 38, 8, 62, 10, 31, 31, 2, 50, 82, 61, 70, - 42, 111, 45, 32, 107, 37, 119, 102, 76, 8, 53, 99, 7, 16, 123, 21, 112, 36, 81, 66, 68, 100, 111, - 85, 22, 58, 107, 78, 0, 9, 96, 45, 79, 53, 72, 94, 48, 119, 50, 2, 53, 41, 120, 96, 32, 56, - 23, 10, 125, 124, 56, 15, 79, 13, 32, 61, 10, 111, 102, 16, 109, 31, 87, 63, 119, 127, 87, 5, 69, - 45, 109, 18, 70, 4, 116, 124, 124, 83, 32, 63, 85, 108, 3, 7, 81, 74, 20, 40, 49, 61, 48, 121, - 64, 66, 13, 103, 75, 125, 31, 116, 91, 86, 93, 89, 116, 8, 75, 40, 47, 123, 54, 55, 106, 122, 88, - 80, 81, 39, 28, 101, 5, 37, 50, 46, 28, 66, 31, 124, 12, 23, 113, 30, 80, 14, 10, 53, 74, 66, - 53, 57, 115, 52, 50, 111, 3, 101, 19, 59, 45, 31, 117, 28, 124, 120, 67, 51, 56, 89, 74, 24, 58, - 10, 62, 52, 41, 89, 93, 108, 114, 96, 100, 71, 55, 49, 7, 103, 92, 74, 78, 96, 29, 90, 14, 34, - 61, 59, 85, 101, 84, 10, 93, 14, 10, 66, 94, 38, 27, 85, 67, 8, 5, 53, 76, 115, 80, 27, 80, - 36, 49, 125, 99, 85, 116, 6, 97, 78, 51, 87, 110, 126, 65, 2, 58, 24, 3, 10, 94, 47, 1, 121, - 88, 75, 67, 116, 60, 17, 90, 21, 87, 34, 102, 123, 93, 109, 15, 80, 100, 11, 28, 16, 79, 126, 115, - 126, 77, 82, 108, 105, 96, 1, 100, 52, 40, 39, 80, 12, 96, 90, 116, 75, 94, 61, 117, 84, 86, 61, - 18, 10, 94, 30, 100, 84, 54, 41, 127, 79, 104, 67, 72, 36, 32, 119, 47, 123, 31, 107, 94, 3, 32, - 30, 35, 41, 44, 27, 112, 42, 61, 44, 126, 104, 115, 4, 106, 102, 108, 124, 34, 109, 81, 120, 55, 103, - 90, 91, 115, 50, 49, 6, 125, 88, 99, 34, 103, 28, 72, 34, 55, 4, 103, 119, 107, 102, 32, 98, 34, - 38, 25, 50, 70, 92, 11, 77, 87, 127, 91, 67, 8, 18, 62, 79, 95, 60, 82, 77, 72, 118, 38, 121, - 43, 53, 55, 96, 93, 79, 51, 80, 108, 117, 97, 103, 14, 15, 73, 82, 105, 119, 51, 55, 118, 31, 126, - 124, 28, 27, 126, 43, 12, 40, 71, 74, 17, 55, 40, 35, 4, 64, 125, 69, 43, 90, 47, 94, 27, 48, - 74, 100, 16, 9, 106, 10, 12, 59, 72, 9, 103, 8, 39, 21, 26, 90, 16, 49, 72, 105, 17, 114, 41, - 107, 37, 119, 82, 55, 97, 87, 7, 45, 22, 9, 51, 42, 14, 31, 54, 85, 122, 126, 60, 24, 104, 89, - 95, 14, 49, 61, 118, 17, 80, 80, 108, 53, 11, 116, 120, 22, 14, 112, 65, 22, 91, 53, 106, 109, 22, - 81, 39, 52, 60, 53, 93, 4, 73, 39, 10, 8, 40, 55, 35, 40, 124, 42, 62, 74, 97, 107, 3, 104, - 65, 65, 43, 48, 68, 89, 4, 101, 22, 97, 50, 4, 106, 104, 78, 60, 85, 82, 6, 96, 35, 4, 4, - 48, 106, 111, 71, 10, 90, 27, 82, 44, 87, 19, 94, 49, 91, 91, 118, 47, 93, 32, 47, 61, 115, 21, - 121, 14, 87, 46, 4, 67, 97, 54, 68, 103, 20, 85, 60, 41, 22, 105, 93, 45, 2, 81, 20, 64, 67, - 17, 87, 27, 82, 85, 14, 96, 94, 2, 8, 44, 17, 89, 107, 98, 18, 101, 64, 117, 91, 90, 63, 39, - 53, 50, 9, 122, 120, 30, 37, 104, 93, 50, 109, 67, 105, 4, 117, 42, 92, 61, 14, 62, 67, 72, 75, - 44, 18, 42, 100, 70, 120, 5, 91, 101, 105, 22, 87, 83, 79, 90, 21, 38, 76, 47, 120, 94, 26, 73, - 120, 74, 73, 102, 100, 113, 90, 124, 30, 0, 72, 111, 30, 112, 38, 26, 70, 119, 112, 24, 35, 126, 96, - 37, 60, 106, 14, 11, 33, 25, 56, 54, 117, 68, 65, 81, 111, 43, 91, 93, 68, 2, 43, 35, 52, 97, - 55, 71, 38, 16, 102, 35, 68, 75, 53, 78, 27, 64, 75, 109, 43, 60, 114, 22, 116, 15, 91, 108, 14, - 64, 52, 87, 67, 25, 0, 34, 98, 56, 124, 13, 87, 86, 31, 48, 68, 10, 119, 102, 76, 74, 88, 38, - 87, 38, 54, 33, 105, 123, 8, 33, 46, 117, 47, 22, 122, 100, 11, 73, 35, 15, 27, 73, 4, 60, 73, - 10, 44, 104, 122, 113, 115, 99, 114, 20, 41, 4, 90, 66, 34, 80, 97, 42, 42, 99, 63, 77, 45, 4, - 55, 113, 70, 44, 112, 23, 109, 120, 21, 43, 7, 102, 16, 18, 24, 32, 118, 112, 63, 122, 41, 31, 63, - 26, 16, 35, 7, 81, 89, 36, 1, 126, 68, 97, 104, 35, 7, 21, 59, 45, 79, 109, 12, 56, 49, 41, - 23, 55, 56, 32, 83, 3, 42, 65, 43, 67, 17, 62, 49, 95, 11, 104, 7, 55, 2, 38, 59, 5, 124, - 29, 11, 30, 21, 109, 103, 50, 51, 16, 31, 94, 67, 37, 89, 3, 20, 36, 127, 62, 91, 61, 113, 18, - 75, 99, 34, 103, 64, 96, 8, 92, 2, 108, 1, 103, 18, 48, 43, 107, 20, 39, 74, 88, 120, 115, 120, - 78, 80, 91, 11, 100, 101, 11, 7, 9, 72, 89, 84, 45, 63, 98, 73, 95, 52, 31, 48, 9, 127, 11, - 32, 32, 78, 26, 64, 14, 11, 89, 122, 5, 5, 49, 43, 24, 101, 21, 122, 64, 114, 117, 61, 39, 95, - 64, 19, 83, 83, 88, 106, 30, 62, 5, 71, 31, 9, 104, 59, 102, 103, 122, 71, 84, 74, 22, 26, 111, - 48, 1, 92, 115, 45, 64, 80, 117, 5, 89, 74, 33, 39, 41, 23, 16, 70, 15, 0, 86, 46, 67, 5, - 19, 33, 23, 125, 78, 102, 116, 43, 26, 108, 63, 65, 87, 14, 104, 24, 51, 111, 2, 92, 69, 87, 6, - 21, 23, 29, 61, 114, 113, 39, 90, 53, 60, 91, 79, 90, 59, 11, 37, 13, 124, 23, 18, 69, 59, 77, - 62, 13, 96, 51, 90, 47, 26, 89, 115, 93, 93, 18, 116, 54, 24, 106, 80, 99, 72, 44, 4, 14, 10, - 58, 58, 35, 47, 61, 87, 112, 71, 36, 29, 45, 69, 10, 64, 67, 86, 113, 108, 1, 92, 2, 122, 39, - 64, 55, 100, 31, 54, 21, 88, 51, 87, 33, 67, 121, 10, 105, 56, 122, 89, 39, 98, 15, 118, 52, 103, - 119, 50, 32, 2, 31, 82, 116, 44, 73, 110, 34, 4, 100, 28, 13, 17, 27, 97, 77, 94, 96, 53, 68, - 103, 14, 119, 101, 78, 41, 67, 117, 69, 70, 16, 51, 52, 3, 55, 58, 48, 41, 53, 93, 62, 102, 73, - 95, 80, 62, 72, 50, 35, 3, 7, 71, 91, 60, 84, 93, 45, 34, 108, 40, 39, 87, 38, 81, 48, 20, - 7, 19, 8, 84, 56, 2, 43, 126, 83, 67, 68, 11, 48, 56, 31, 81, 20, 44, 15, 9, 23, 95, 118, - 61, 123, 80, 18, 39, 27, 26, 42, 121, 85, 31, 119, 99, 43, 17, 87, 85, 75, 36, 28, 12, 25, 77, - 103, 47, 112, 76, 16, 126, 39, 80, 1, 122, 44, 21, 18, 14, 100, 58, 47, 58, 42, 29, 40, 103, 84, - 65, 49, 46, 13, 53, 123, 4, 108, 16, 27, 114, 79, 86, 103, 88, 29, 37, 115, 81, 41, 69, 15, 17, - 97, 73, 59, 56, 57, 70, 61, 66, 84, 41, 9, 107, 86, 120, 61, 6, 10, 114, 79, 26, 86, 26, 20, - 7, 52, 29, 127, 40, 110, 36, 71, 45, 64, 17, 1, 68, 46, 78, 114, 26, 28, 117, 118, 95, 34, 68, - 121, 90, 9, 113, 111, 30, 34, 30, 3, 1, 111, 96, 50, 24, 89, 62, 115, 14, 33, 78, 111, 5, 73, - 25, 115, 81, 50, 27, 48, 25, 2, 49, 85, 81, 62, 28, 87, 58, 98, 28, 67, 3, 21, 16, 82, 48, - 41, 112, 114, 47, 105, 6, 48, 10, 64, 43, 124, 71, 12, 28, 6, 11, 3, 79, 96, 111, 33, 62, 83, - 93, 60, 21, 7, 26, 113, 10, 89, 90, 88, 11, 1, 82, 116, 1, 73, 64, 81, 65, 36, 20, 109, 119, - 8, 28, 18, 89, 50, 124, 63, 2, 78, 1, 41, 37, 97, 61, 26, 126, 111, 114, 115, 69, 80, 1, 10, - 102, 49, 101, 22, 62, 42, 125, 96, 50, 114, 35, 26, 105, 90, 48, 95, 58, 121, 27, 61, 2, 114, 34, - 114, 101, 0, 49, 102, 47, 92, 99, 72, 3, 107, 77, 102, 115, 83, 7, 75, 35, 13, 106, 66, 127, 122, - 74, 89, 31, 86, 91, 51, 110, 48, 51, 119, 71, 3, 116, 60, 56, 53, 7, 77, 40, 25, 60, 113, 109, - 10, 100, 88, 102, 23, 125, 105, 76, 16, 72, 84, 12, 75, 5, 117, 105, 19, 112, 36, 101, 4, 107, 122, - 74, 98, 62, 33, 0, 85, 1, 104, 29, 71, 26, 78, 69, 79, 113, 45, 105, 33, 104, 32, 76, 98, 119, - 52, 26, 124, 71, 8, 10, 27, 23, 35, 102, 38, 26, 87, 114, 10, 30, 84, 107, 69, 67, 9, 115, 73, - 53, 36, 45, 37, 123, 95, 119, 68, 40, 16, 33, 91, 100, 16, 82, 54, 53, 71, 2, 106, 105, 62, 100, - 83, 50, 4, 107, 3, 119, 49, 33, 22, 103, 71, 64, 42, 86, 124, 115, 102, 120, 2, 40, 127, 97, 101, - 107, 23, 3, 121, 78, 10, 45, 93, 82, 65, 87, 72, 33, 22, 97, 25, 100, 106, 114, 27, 3, 84, 111, - 17, 29, 71, 6, 126, 17, 58, 80, 32, 81, 64, 9, 126, 69, 64, 72, 15, 56, 22, 116, 126, 5, 96, - 3, 3, 8, 46, 38, 98, 102, 36, 77, 53, 91, 117, 124, 50, 24, 11, 102, 120, 117, 24, 98, 103, 98, - 90, 3, 100, 26, 48, 109, 7, 40, 58, 97, 95, 43, 114, 78, 44, 55, 125, 18, 94, 25, 125, 49, 72, - 106, 1, 91, 36, 9, 96, 53, 123, 126, 23, 90, 19, 92, 5, 41, 121, 26, 113, 64, 108, 37, 122, 124, - 112, 3, 38, 18, 89, 38, 19, 94, 56, 27, 13, 64, 61, 73, 61, 106, 80, 70, 63, 3, 103, 87, 74, - 74, 76, 77, 68, 70, 89, 61, 115, 115, 38, 113, 3, 19, 17, 22, 116, 57, 34, 67, 16, 39, 59, 62, - 43, 109, 51, 35, 0, 66, 7, 85, 63, 95, 122, 102, 6, 2, 64, 39, 14, 93, 18, 40, 52, 109, 27, - 117, 35, 62, 84, 2, 12, 39, 27, 20, 26, 3, 9, 102, 42, 94, 85, 27, 16, 33, 46, 18, 97, 71, - 123, 101, 3, 62, 71, 126, 106, 99, 89, 22, 124, 28, 13, 53, 110, 10, 91, 16, 93, 37, 74, 33, 44, - 31, 4, 89, 90, 96, 38, 110, 111, 13, 105, 100, 74, 19, 71, 113, 53, 102, 28, 26, 0, 55, 49, 0, - 83, 80, 11, 21, 12, 25, 8, 33, 46, 15, 74, 114, 41, 97, 35, 89, 71, 108, 57, 4, 32, 36, 65, - 37, 62, 3, 115, 63, 1, 68, 30, 4, 106, 89, 35, 94, 28, 101, 126, 115, 27, 26, 37, 109, 17, 75, - 64, 1, 108, 8, 27, 32, 63, 71, 14, 55, 4, 121, 115, 78, 26, 96, 91, 71, 101, 19, 21, 111, 4, - 40, 20, 97, 115, 72, 77, 10, 65, 67, 26, 17, 78, 4, 104, 105, 8, 81, 65, 19, 74, 81, 54, 83, - 121, 56, 118, 107, 48, 49, 49, 5, 78, 68, 58, 109, 98, 87, 110, 21, 51, 107, 27, 97, 39, 57, 122, - 20, 48, 96, 79, 12, 58, 122, 46, 10, 84, 20, 15, 38, 123, 84, 57, 22, 14, 6, 65, 0, 16, 76, - 121, 55, 6, 60, 23, 7, 50, 81, 73, 69, 21, 63, 39, 63, 13, 92, 60, 98, 117, 89, 59, 23, 70, - 8, 16, 11, 109, 10, 18, 111, 63, 105, 76, 56, 25, 49, 82, 114, 94, 123, 117, 96, 90, 26, 78, 36, - 19, 11, 46, 82, 114, 13, 82, 23, 101, 25, 65, 24, 56, 8, 107, 21, 127, 51, 127, 51, 52, 37, 49, - 100, 12, 126, 78, 35, 4, 126, 33, 64, 39, 19, 97, 60, 111, 32, 3, 25, 73, 57, 89, 59, 63, 80, - 54, 24, 67, 95, 60, 18, 74, 95, 105, 35, 94, 94, 29, 85, 32, 34, 40, 40, 115, 1, 13, 13, 125, - 109, 107, 103, 99, 17, 60, 120, 108, 109, 111, 90, 65, 107, 39, 52, 101, 75, 91, 59, 92, 43, 122, 38, - 112, 13, 125, 27, 48, 117, 122, 37, 119, 115, 53, 116, 53, 53, 58, 50, 48, 85, 46, 12, 92, 108, 7, - 78, 58, 51, 14, 97, 93, 80, 18, 68, 53, 14, 10, 17, 89, 85, 74, 59, 6, 31, 96, 3, 58, 103, - 23, 60, 76, 127, 94, 60, 103, 40, 79, 82, 94, 97, 7, 127, 51, 47, 86, 81, 78, 12, 107, 11, 31, - 47, 3, 16, 105, 29, 97, 66, 89, 71, 7, 72, 70, 52, 14, 28, 86, 89, 72, 77, 77, 17, 89, 13, - 96, 37, 113, 27, 33, 65, 23, 46, 39, 42, 41, 45, 82, 53, 71, 92, 64, 39, 101, 120, 28, 32, 75, - 47, 52, 90, 57, 94, 70, 117, 9, 105, 99, 8, 89, 40, 56, 44, 119, 117, 73, 21, 49, 64, 87, 1, - 79, 30, 121, 50, 89, 47, 45, 82, 35, 5, 92, 109, 66, 44, 76, 80, 37, 124, 51, 76, 118, 114, 68, - 124, 87, 97, 98, 121, 64, 19, 84, 81, 86, 105, 72, 12, 8, 83, 126, 86, 99, 25, 49, 109, 25, 25, - 104, 118, 94, 22, 45, 106, 88, 58, 21, 93, 90, 21, 81, 38, 67, 7, 10, 95, 108, 31, 46, 81, 50, - 18, 26, 110, 114, 6, 109, 90, 26, 57, 35, 54, 65, 55, 115, 115, 115, 55, 24, 79, 70, 82, 11, 54, - 31, 79, 93, 37, 5, 95, 104, 125, 52, 117, 46, 111, 90, 80, 82, 53, 16, 124, 15, 6, 28, 37, 113, - 37, 55, 28, 71, 1, 126, 22, 32, 109, 114, 17, 78, 72, 117, 86, 116, 123, 50, 21, 83, 115, 56, 73, - 36, 45, 39, 20, 2, 1, 109, 52, 22, 61, 108, 102, 115, 64, 104, 32, 11, 105, 74, 108, 105, 102, 44, - 77, 63, 50, 42, 99, 71, 116, 31, 100, 43, 95, 121, 56, 50, 66, 96, 53, 57, 17, 41, 66, 109, 85, - 75, 52, 42, 29, 11, 116, 85, 113, 122, 106, 80, 73, 125, 58, 62, 69, 66, 73, 127, 14, 64, 4, 119, - 122, 60, 2, 68, 126, 86, 118, 69, 6, 75, 7, 64, 127, 93, 6, 98, 80, 92, 42, 125, 125, 111, 28, - 67, 28, 103, 54, 44, 56, 78, 95, 108, 119, 117, 101, 96, 82, 18, 59, 83, 93, 123, 42, 38, 100, 33, - 42, 73, 119, 60, 127, 95, 48, 60, 12, 14, 32, 123, 8, 104, 22, 6, 23, 123, 44, 19, 60, 13, 17, - 37, 22, 88, 34, 67, 14, 49, 105, 46, 61, 110, 105, 73, 88, 51, 113, 46, 57, 106, 109, 22, 72, 5, - 95, 62, 74, 60, 117, 59, 98, 63, 32, 62, 117, 53, 88, 59, 117, 51, 54, 60, 127, 123, 97, 105, 63, - 33, 94, 32, 10, 121, 83, 37, 12, 56, 21, 98, 122, 62, 61, 56, 68, 92, 110, 16, 87, 104, 56, 105, - 106, 32, 36, 115, 105, 74, 126, 69, 81, 86, 66, 74, 97, 69, 77, 99, 92, 103, 35, 3, 34, 118, 99, - 74, 91, 25, 119, 60, 53, 96, 126, 35, 76, 42, 69, 12, 19, 112, 116, 54, 96, 74, 32, 86, 64, 51, - 27, 5, 21, 34, 43, 22, 15, 74, 27, 116, 6, 82, 24, 11, 41, 26, 3, 29, 103, 110, 98, 92, 46, - 1, 27, 127, 3, 70, 101, 63, 25, 98, 54, 25, 61, 7, 38, 64, 75, 69, 31, 70, 83, 70, 104, 65, - 106, 58, 117, 68, 85, 83, 36, 93, 70, 25, 14, 117, 120, 104, 9, 8, 77, 26, 88, 68, 114, 38, 108, - 99, 86, 71, 114, 36, 69, 70, 92, 31, 63, 106, 86, 102, 109, 70, 14, 126, 110, 19, 95, 13, 46, 62, - 107, 53, 105, 116, 36, 4, 59, 37, 66, 9, 120, 76, 80, 34, 49, 98, 49, 91, 39, 100, 108, 15, 42, - 11, 90, 93, 32, 6, 59, 105, 27, 109, 105, 118, 108, 102, 114, 106, 103, 124, 72, 76, 61, 38, 65, 3, - 10, 116, 39, 67, 1, 19, 91, 48, 7, 120, 106, 15, 35, 13, 20, 95, 69, 24, 39, 122, 81, 99, 100, - 103, 8, 32, 115, 14, 122, 72, 100, 84, 107, 120, 84, 26, 9, 93, 94, 66, 76, 82, 83, 15, 18, 75, - 31, 77, 71, 59, 44, 84, 9, 2, 13, 21, 84, 106, 94, 124, 43, 46, 5, 96, 100, 74, 50, 76, 87, - 105, 107, 34, 83, 100, 44, 51, 57, 15, 124, 106, 115, 118, 63, 98, 83, 49, 93, 56, 105, 52, 91, 49, - 125, 94, 67, 40, 126, 11, 15, 98, 7, 69, 4, 8, 68, 60, 94, 113, 52, 107, 30, 58, 47, 23, 67, - 74, 101, 63, 28, 125, 13, 97, 85, 76, 8, 81, 16, 79, 94, 42, 91, 24, 40, 41, 118, 22, 43, 93, - 54, 45, 20, 115, 56, 105, 117, 17, 48, 43, 20, 118, 79, 119, 9, 90, 108, 57, 4, 39, 123, 17, 60, - 14, 78, 16, 118, 19, 120, 27, 71, 116, 107, 96, 44, 1, 79, 37, 124, 35, 78, 110, 47, 16, 73, 85, - 119, 40, 40, 41, 13, 10, 81, 71, 95, 81, 48, 53, 92, 86, 100, 36, 108, 68, 2, 37, 96, 108, 94, - 110, 84, 127, 61, 116, 29, 47, 56, 86, 98, 33, 78, 126, 20, 88, 8, 100, 30, 78, 60, 121, 115, 6, - 87, 14, 3, 6, 32, 92, 104, 1, 7, 27, 63, 41, 40, 11, 99, 82, 102, 103, 95, 87, 118, 121, 59, - 93, 99, 28, 53, 48, 122, 37, 13, 62, 13, 100, 27, 57, 20, 97, 42, 89, 44, 43, 23, 9, 73, 63, - 65, 91, 109, 22, 32, 48, 40, 87, 86, 31, 90, 90, 109, 117, 28, 84, 50, 46, 35, 109, 62, 25, 15, - 126, 73, 96, 0, 31, 12, 72, 108, 54, 35, 80, 117, 96, 43, 108, 88, 126, 121, 70, 58, 52, 64, 21, - 8, 59, 56, 90, 80, 102, 105, 114, 9, 41, 96, 68, 5, 9, 108, 3, 90, 118, 20, 22, 51, 91, 43, - 123, 39, 32, 11, 79, 67, 118, 109, 11, 9, 64, 125, 75, 50, 53, 65, 24, 116, 103, 52, 53, 102, 115, - 53, 84, 112, 104, 124, 53, 110, 119, 113, 103, 15, 109, 37, 37, 123, 43, 42, 56, 88, 93, 114, 7, 121, - 54, 64, 19, 108, 77, 109, 59, 65, 127, 0, 60, 5, 105, 74, 119, 64, 124, 5, 57, 26, 56, 119, 7, - 81, 7, 16, 88, 18, 77, 26, 66, 23, 85, 9, 71, 68, 8, 97, 14, 81, 121, 89, 122, 89, 70, 19, - 120, 50, 125, 92, 60, 6, 94, 42, 65, 98, 52, 126, 8, 90, 88, 38, 40, 32, 57, 11, 1, 5, 83, - 93, 31, 24, 59, 50, 115, 18, 52, 77, 88, 71, 10, 107, 46, 8, 66, 120, 12, 52, 107, 113, 46, 29, - 96, 118, 91, 21, 125, 59, 89, 108, 121, 96, 56, 32, 62, 124, 24, 23, 106, 50, 122, 40, 53, 97, 19, - 20, 88, 101, 11, 43, 18, 44, 30, 42, 51, 80, 90, 39, 77, 46, 43, 108, 32, 127, 119, 71, 107, 33, - 43, 107, 2, 23, 17, 8, 10, 64, 29, 78, 22, 115, 87, 46, 75, 123, 40, 72, 76, 126, 95, 51, 16, - 7, 46, 108, 80, 93, 12, 37, 60, 45, 66, 86, 32, 49, 4, 34, 5, 16, 29, 33, 78, 115, 9, 45, - 72, 8, 110, 109, 26, 4, 17, 109, 121, 43, 31, 57, 87, 63, 67, 6, 33, 126, 74, 44, 117, 18, 61, - 4, 45, 6, 37, 47, 120, 33, 8, 30, 13, 52, 120, 18, 61, 78, 32, 102, 114, 122, 96, 5, 51, 91, - 1, 66, 92, 120, 7, 38, 109, 111, 79, 103, 5, 118, 90, 117, 24, 99, 124, 81, 40, 63, 115, 49, 41, - 67, 81, 3, 10, 4, 21, 25, 99, 4, 32, 39, 115, 11, 27, 20, 20, 108, 48, 27, 43, 44, 49, 16, - 30, 119, 42, 8, 61, 104, 49, 117, 11, 54, 14, 77, 33, 63, 36, 15, 105, 41, 85, 121, 28, 31, 30, - 114, 21, 126, 38, 74, 83, 89, 105, 74, 118, 22, 62, 48, 87, 18, 16, 125, 38, 70, 75, 30, 45, 104, - 63, 60, 37, 80, 93, 7, 91, 53, 17, 111, 102, 39, 61, 45, 40, 107, 27, 122, 62, 54, 50, 86, 41, - 55, 5, 125, 13, 14, 39, 81, 47, 54, 75, 38, 42, 94, 52, 59, 124, 21, 118, 85, 12, 28, 40, 29, - 40, 27, 43, 45, 53, 73, 4, 6, 51, 86, 113, 19, 105, 93, 117, 21, 88, 17, 101, 108, 84, 100, 13, - 51, 105, 61, 48, 34, 80, 10, 45, 5, 126, 86, 64, 11, 57, 19, 94, 122, 38, 68, 49, 23, 38, 116, - 47, 76, 77, 9, 76, 126, 48, 48, 69, 61, 9, 14, 70, 9, 31, 36, 25, 89, 114, 35, 92, 16, 27, - 80, 110, 115, 37, 53, 121, 2, 37, 0, 12, 109, 83, 80, 50, 36, 42, 85, 23, 103, 80, 45, 17, 118, - 107, 71, 42, 78, 35, 38, 31, 65, 85, 125, 111, 26, 35, 37, 85, 12, 32, 100, 114, 40, 74, 122, 10, - 35, 23, 71, 61, 14, 37, 32, 29, 119, 33, 102, 87, 50, 92, 18, 112, 88, 32, 68, 67, 7, 46, 85, - 88, 93, 57, 58, 12, 3, 62, 27, 102, 39, 98, 89, 50, 4, 12, 70, 15, 24, 115, 40, 53, 69, 26, - 99, 36, 44, 112, 93, 62, 80, 119, 109, 76, 53, 55, 125, 3, 31, 37, 91, 55, 14, 41, 30, 87, 106, - 86, 12, 111, 65, 104, 40, 71, 104, 25, 28, 84, 91, 7, 126, 78, 38, 63, 70, 45, 99, 58, 111, 23, - 80, 7, 108, 69, 50, 70, 88, 125, 51, 57, 125, 21, 115, 91, 22, 97, 9, 86, 100, 8, 92, 112, 21, - 13, 54, 64, 81, 115, 65, 73, 74, 77, 87, 18, 26, 11, 87, 58, 112, 124, 97, 29, 43, 25, 47, 77, - 56, 10, 19, 5, 84, 114, 74, 15, 33, 89, 7, 115, 23, 64, 60, 17, 100, 34, 75, 33, 97, 2, 16, - 47, 3, 101, 119, 33, 39, 118, 37, 94, 106, 78, 54, 48, 55, 82, 43, 57, 80, 34, 110, 39, 76, 6, - 44, 43, 41, 70, 15, 31, 102, 59, 12, 95, 95, 6, 76, 108, 111, 110, 85, 110, 15, 7, 61, 124, 90, - 25, 81, 99, 56, 91, 13, 28, 4, 70, 24, 53, 70, 83, 27, 45, 20, 110, 29, 77, 71, 52, 95, 23, - 90, 56, 57, 33, 61, 27, 122, 67, 68, 1, 33, 44, 51, 40, 4, 102, 25, 13, 62, 59, 105, 6, 70, - 16, 88, 44, 7, 99, 43, 91, 95, 13, 35, 9, 23, 91, 12, 7, 85, 8, 112, 76, 34, 21, 104, 53, - 43, 22, 99, 38, 33, 114, 104, 44, 89, 90, 52, 78, 101, 70, 111, 45, 78, 16, 41, 107, 28, 25, 84, - 124, 95, 48, 35, 54, 0, 86, 103, 94, 17, 19, 26, 105, 53, 43, 119, 18, 65, 119, 40, 66, 78, 6, - 118, 80, 8, 55, 105, 116, 21, 54, 44, 20, 25, 94, 107, 13, 93, 122, 78, 124, 47, 57, 71, 76, 94, - 10, 8, 17, 49, 81, 41, 44, 78, 76, 16, 30, 14, 35, 86, 51, 98, 66, 29, 115, 103, 59, 62, 4, - 88, 89, 110, 61, 46, 82, 47, 38, 69, 47, 36, 90, 118, 23, 62, 23, 44, 71, 93, 25, 71, 14, 15, - 69, 23, 32, 76, 66, 55, 12, 55, 56, 107, 123, 77, 118, 27, 7, 53, 46, 122, 101, 12, 4, 19, 117, - 39, 48, 19, 38, 96, 65, 27, 91, 108, 104, 114, 103, 82, 40, 45, 49, 31, 36, 52, 41, 81, 47, 47, - 38, 121, 115, 78, 87, 90, 18, 79, 19, 100, 36, 20, 48, 42, 38, 75, 43, 56, 103, 97, 1, 96, 8, - 22, 86, 26, 108, 62, 112, 96, 17, 73, 92, 81, 20, 82, 70, 3, 91, 77, 58, 68, 48, 3, 87, 76, - 70, 35, 84, 1, 78, 62, 81, 2, 83, 5, 125, 112, 91, 88, 74, 22, 121, 91, 115, 27, 114, 78, 116, - 69, 71, 86, 7, 1, 31, 103, 120, 123, 106, 87, 59, 105, 72, 8, 2, 66, 3, 6, 10, 5, 9, 56, - 44, 34, 6, 75, 45, 40, 125, 7, 32, 104, 3, 35, 5, 81, 101, 83, 58, 56, 81, 122, 63, 15, 43, - 100, 21, 106, 23, 55, 64, 24, 23, 73, 119, 22, 97, 110, 46, 79, 12, 31, 49, 117, 65, 93, 95, 75, - 59, 75, 86, 88, 46, 89, 1, 108, 94, 11, 62, 8, 113, 75, 40, 98, 92, 6, 19, 109, 76, 42, 117, - 61, 125, 16, 72, 123, 19, 95, 67, 5, 70, 75, 11, 18, 19, 14, 70, 122, 47, 87, 110, 22, 97, 107, - 59, 50, 88, 39, 75, 48, 19, 27, 36, 99, 90, 53, 9, 43, 42, 121, 126, 37, 13, 83, 115, 111, 22, - 21, 117, 58, 73, 21, 54, 106, 10, 50, 37, 38, 99, 33, 22, 40, 91, 64, 12, 26, 78, 49, 93, 10, - 127, 100, 53, 89, 50, 12, 33, 48, 71, 75, 111, 22, 44, 83, 98, 87, 17, 39, 80, 67, 11, 74, 123, - 14, 48, 59, 78, 51, 35, 108, 24, 7, 39, 94, 117, 94, 0, 53, 105, 1, 119, 3, 6, 53, 115, 12, - 86, 110, 121, 76, 2, 120, 32, 38, 93, 19, 2, 28, 117, 89, 61, 55, 102, 101, 24, 125, 4, 105, 81, - 72, 19, 120, 80, 92, 80, 11, 54, 118, 80, 4, 32, 56, 37, 65, 97, 68, 122, 36, 22, 85, 90, 2, - 56, 56, 117, 0, 63, 24, 124, 76, 78, 109, 31, 0, 3, 93, 64, 72, 95, 80, 29, 55, 54, 27, 28, - 82, 101, 25, 82, 71, 42, 17, 56, 25, 69, 26, 122, 59, 62, 101, 22, 23, 15, 57, 38, 108, 90, 55, - 74, 64, 110, 55, 117, 36, 57, 21, 38, 36, 115, 36, 97, 100, 48, 69, 60, 52, 85, 74, 114, 41, 8, - 98, 95, 26, 26, 79, 103, 12, 27, 96, 125, 66, 67, 27, 124, 40, 53, 41, 20, 110, 33, 90, 64, 4, - 27, 26, 76, 60, 101, 18, 6, 32, 99, 67, 4, 8, 9, 82, 122, 41, 96, 13, 65, 97, 5, 63, 19, - 26, 120, 5, 48, 7, 8, 37, 92, 52, 22, 43, 78, 10, 36, 107, 99, 120, 78, 14, 108, 26, 90, 113, - 5, 65, 24, 74, 109, 66, 99, 74, 76, 87, 39, 50, 19, 40, 13, 126, 77, 112, 45, 106, 64, 96, 71, - 107, 64, 47, 4, 108, 34, 42, 31, 92, 31, 64, 56, 60, 82, 119, 36, 95, 127, 97, 73, 78, 38, 78, - 59, 13, 1, 59, 68, 127, 20, 47, 10, 118, 119, 44, 45, 127, 69, 63, 84, 106, 44, 25, 119, 104, 102, - 71, 83, 26, 71, 21, 26, 111, 45, 12, 91, 53, 118, 55, 116, 104, 82, 25, 6, 99, 47, 78, 30, 17, - 40, 65, 116, 108, 102, 66, 4, 104, 27, 32, 62, 16, 85, 30, 92, 123, 13, 101, 64, 71, 48, 55, 71, - 14, 41, 65, 98, 1, 22, 73, 48, 58, 89, 46, 59, 72, 72, 126, 76, 0, 21, 37, 117, 83, 11, 9, - 45, 8, 94, 27, 63, 1, 32, 44, 54, 82, 124, 65, 58, 91, 81, 93, 50, 39, 125, 28, 42, 9, 59, - 95, 75, 68, 52, 43, 123, 122, 74, 31, 102, 120, 95, 59, 93, 38, 117, 114, 72, 117, 31, 35, 25, 93, - 39, 74, 53, 107, 51, 6, 29, 15, 82, 47, 73, 14, 52, 75, 12, 75, 69, 13, 13, 45, 103, 121, 36, - 77, 105, 70, 53, 54, 37, 78, 94, 110, 109, 79, 118, 81, 36, 76, 78, 100, 22, 111, 111, 114, 61, 43, - 120, 113, 125, 25, 126, 14, 69, 82, 107, 36, 0, 40, 120, 126, 108, 27, 93, 17, 12, 56, 48, 45, 109, - 109, 52, 45, 43, 13, 2, 10, 88, 30, 22, 127, 2, 106, 16, 43, 87, 6, 31, 109, 87, 39, 108, 114, - 86, 39, 121, 89, 127, 49, 49, 12, 22, 114, 85, 59, 77, 52, 61, 54, 32, 59, 2, 41, 93, 31, 31, - 0, 95, 24, 17, 71, 44, 21, 27, 26, 6, 89, 17, 108, 12, 53, 100, 28, 110, 121, 8, 56, 66, 115, - 30, 23, 53, 55, 2, 114, 86, 111, 15, 78, 50, 50, 1, 49, 39, 77, 62, 9, 12, 118, 119, 114, 96, - 48, 8, 5, 92, 92, 94, 85, 51, 47, 93, 14, 2, 38, 65, 42, 13, 50, 65, 7, 4, 77, 87, 7, - 30, 32, 51, 81, 122, 25, 55, 59, 16, 69, 63, 71, 96, 99, 57, 14, 32, 79, 123, 33, 37, 38, 44, - 14, 82, 45, 24, 27, 89, 25, 23, 37, 29, 31, 63, 41, 48, 115, 115, 46, 33, 107, 3, 71, 98, 35, - 32, 41, 19, 122, 40, 95, 87, 45, 17, 24, 11, 77, 119, 86, 71, 25, 123, 114, 8, 49, 49, 71, 91, - 96, 88, 42, 81, 127, 34, 82, 124, 48, 79, 20, 16, 118, 66, 123, 124, 45, 7, 51, 73, 44, 88, 37, - 28, 55, 120, 6, 10, 77, 119, 92, 52, 115, 82, 21, 124, 66, 26, 39, 76, 91, 10, 6, 81, 96, 45, - 118, 39, 101, 61, 66, 79, 103, 71, 40, 50, 21, 15, 52, 104, 14, 100, 35, 21, 55, 88, 37, 125, 8, - 117, 45, 113, 10, 16, 32, 85, 125, 112, 56, 81, 123, 3, 80, 117, 7, 111, 6, 60, 50, 53, 76, 67, - 40, 119, 102, 7, 118, 72, 107, 48, 72, 29, 53, 69, 88, 87, 10, 120, 33, 38, 39, 89, 35, 23, 119, - 75, 44, 8, 66, 113, 94, 70, 16, 95, 91, 79, 99, 68, 56, 4, 52, 66, 39, 68, 5, 104, 59, 80, - 79, 26, 33, 102, 67, 41, 89, 70, 111, 30, 91, 64, 60, 49, 82, 62, 38, 46, 43, 50, 112, 79, 29, - 98, 30, 18, 2, 45, 68, 119, 94, 97, 13, 5, 0, 46, 43, 71, 17, 49, 1, 41, 61, 65, 7, 12, - 34, 12, 39, 33, 4, 92, 14, 3, 45, 10, 15, 121, 13, 65, 81, 7, 46, 82, 112, 52, 56, 118, 63, - 29, 74, 51, 39, 85, 20, 90, 87, 8, 38, 105, 17, 91, 69, 48, 74, 54, 121, 7, 32, 90, 7, 117, - 23, 119, 100, 14, 56, 122, 107, 34, 67, 120, 50, 89, 91, 102, 36, 117, 18, 110, 40, 73, 26, 27, 71, - 96, 20, 24, 28, 25, 39, 60, 92, 107, 58, 29, 16, 119, 48, 93, 69, 119, 1, 59, 71, 90, 102, 34, - 87, 106, 126, 54, 53, 103, 100, 54, 38, 52, 4, 126, 24, 39, 111, 57, 18, 4, 79, 63, 8, 91, 113, - 105, 95, 57, 30, 42, 64, 26, 23, 95, 2, 122, 56, 118, 29, 122, 110, 104, 109, 34, 114, 36, 87, 17, - 25, 75, 97, 87, 88, 66, 12, 95, 50, 125, 101, 96, 91, 82, 121, 125, 16, 17, 97, 74, 103, 66, 120, - 67, 81, 77, 43, 97, 69, 26, 17, 19, 122, 49, 52, 48, 56, 5, 100, 31, 79, 42, 3, 110, 119, 91, - 39, 3, 55, 67, 81, 17, 112, 9, 10, 16, 76, 7, 125, 93, 114, 36, 80, 110, 41, 53, 31, 112, 59, - 72, 59, 126, 84, 85, 51, 49, 41, 20, 90, 83, 58, 37, 45, 115, 29, 81, 114, 29, 12, 65, 86, 117, - 68, 107, 35, 99, 113, 70, 104, 106, 117, 17, 94, 112, 64, 62, 91, 49, 58, 2, 17, 87, 122, 20, 61, - 36, 58, 100, 32, 2, 74, 74, 79, 108, 9, 48, 71, 14, 85, 78, 73, 81, 70, 124, 108, 105, 71, 92, - 92, 55, 24, 8, 104, 19, 86, 119, 48, 3, 100, 105, 60, 23, 40, 126, 103, 2, 39, 127, 27, 53, 87, - 104, 58, 74, 61, 119, 95, 44, 14, 18, 123, 79, 50, 43, 98, 121, 15, 115, 124, 10, 28, 25, 114, 34, - 43, 22, 110, 10, 111, 108, 63, 21, 18, 55, 19, 120, 101, 22, 85, 71, 9, 34, 82, 47, 124, 32, 122, - 38, 58, 105, 84, 86, 98, 61, 117, 60, 104, 69, 46, 76, 50, 55, 25, 41, 53, 111, 89, 105, 113, 126, - 111, 30, 39, 127, 43, 18, 73, 17, 78, 42, 57, 6, 29, 66, 102, 82, 50, 18, 119, 84, 9, 100, 72, - 62, 92, 23, 13, 62, 92, 32, 5, 81, 60, 4, 110, 114, 77, 18, 66, 79, 54, 27, 77, 46, 52, 63, - 112, 53, 125, 42, 126, 95, 111, 114, 65, 17, 87, 32, 23, 75, 19, 127, 46, 73, 9, 69, 125, 123, 124, - 2, 86, 79, 106, 20, 118, 103, 13, 45, 110, 97, 28, 25, 51, 41, 90, 102, 72, 67, 102, 97, 67, 104, - 10, 77, 125, 28, 125, 56, 47, 114, 66, 87, 29, 56, 0, 50, 13, 23, 54, 47, 41, 121, 65, 66, 70, - 91, 100, 12, 9, 94, 119, 103, 82, 10, 91, 76, 87, 101, 86, 78, 96, 71, 23, 56, 9, 71, 109, 88, - 76, 82, 73, 32, 94, 76, 11, 36, 25, 84, 115, 42, 113, 80, 35, 125, 124, 22, 119, 68, 116, 90, 127, - 26, 89, 39, 90, 38, 63, 119, 120, 8, 16, 83, 19, 21, 68, 95, 98, 86, 18, 117, 77, 26, 35, 47, - 34, 43, 104, 31, 91, 107, 101, 45, 119, 118, 92, 113, 89, 101, 5, 14, 73, 99, 5, 68, 14, 93, 121, - 87, 113, 59, 120, 112, 80, 29, 83, 109, 47, 122, 36, 124, 2, 64, 120, 83, 22, 117, 15, 25, 46, 64, - 9, 36, 38, 47, 125, 49, 36, 112, 24, 33, 32, 102, 15, 123, 87, 30, 31, 99, 32, 120, 16, 18, 78, - 126, 8, 11, 74, 118, 73, 2, 111, 93, 21, 38, 85, 68, 31, 72, 100, 7, 94, 100, 98, 88, 122, 23, - 30, 39, 116, 70, 124, 81, 5, 104, 40, 125, 53, 116, 96, 28, 110, 55, 52, 97, 52, 30, 4, 36, 64, - 25, 71, 17, 85, 104, 8, 50, 115, 16, 96, 100, 122, 36, 35, 57, 34, 50, 32, 12, 84, 15, 82, 13, - 8, 92, 59, 87, 126, 105, 74, 5, 10, 52, 61, 35, 28, 122, 118, 47, 86, 84, 65, 29, 75, 100, 111, - 54, 70, 110, 110, 112, 89, 126, 70, 76, 35, 49, 88, 102, 102, 121, 11, 19, 52, 1, 48, 103, 121, 10, - 34, 67, 15, 1, 8, 12, 77, 98, 56, 5, 60, 78, 27, 59, 30, 36, 126, 49, 66, 86, 19, 121, 121, - 73, 49, 21, 21, 96, 72, 114, 60, 98, 75, 69, 74, 96, 100, 7, 97, 18, 74, 9, 96, 105, 89, 35, - 91, 58, 4, 11, 6, 70, 21, 86, 126, 37, 40, 100, 7, 84, 74, 63, 75, 69, 82, 81, 69, 51, 1, - 95, 83, 22, 37, 28, 125, 95, 112, 53, 57, 125, 117, 102, 118, 74, 66, 108, 104, 44, 103, 17, 23, 14, - 56, 63, 11, 85, 113, 106, 47, 94, 20, 58, 99, 107, 46, 38, 45, 126, 85, 103, 118, 18, 99, 126, 21, - 120, 19, 40, 80, 29, 126, 60, 59, 65, 27, 33, 39, 59, 29, 84, 85, 108, 94, 64, 99, 1, 79, 18, - 86, 117, 21, 5, 37, 124, 26, 71, 64, 68, 41, 29, 78, 9, 32, 70, 8, 3, 76, 33, 27, 7, 119, - 53, 53, 61, 31, 19, 120, 40, 112, 13, 120, 0, 91, 92, 78, 53, 126, 71, 48, 74, 73, 17, 78, 57, - 84, 26, 117, 38, 90, 33, 124, 14, 18, 21, 56, 110, 115, 104, 87, 96, 15, 75, 61, 12, 90, 96, 125, - 102, 116, 3, 64, 68, 93, 127, 64, 11, 92, 49, 123, 52, 76, 68, 55, 102, 28, 67, 20, 90, 99, 55, - 3, 23, 11, 3, 42, 9, 61, 94, 45, 95, 111, 2, 69, 116, 73, 81, 16, 0, 88, 62, 86, 5, 33, - 47, 72, 45, 10, 21, 31, 5, 18, 70, 97, 7, 67, 45, 103, 70, 118, 90, 124, 22, 78, 64, 56, 19, - 109, 29, 50, 10, 52, 81, 34, 29, 65, 59, 107, 39, 118, 0, 9, 53, 122, 45, 80, 30, 74, 47, 42, - 70, 75, 112, 51, 120, 50, 40, 5, 15, 116, 116, 85, 125, 12, 78, 4, 27, 11, 84, 124, 39, 98, 65, - 46, 124, 107, 62, 51, 105, 21, 68, 11, 107, 29, 94, 66, 1, 24, 54, 26, 54, 115, 8, 55, 86, 100, - 102, 37, 117, 51, 88, 77, 9, 59, 14, 11, 76, 43, 25, 10, 89, 49, 123, 124, 124, 56, 121, 67, 67, - 24, 125, 37, 59, 114, 104, 93, 89, 118, 43, 2, 12, 65, 114, 106, 114, 91, 13, 101, 124, 52, 2, 7, - 60, 73, 22, 46, 42, 74, 117, 94, 63, 121, 66, 78, 70, 66, 112, 31, 100, 124, 116, 32, 77, 107, 58, - 19, 51, 34, 69, 8, 72, 25, 90, 5, 35, 31, 116, 11, 37, 127, 14, 62, 67, 49, 74, 35, 20, 101, - 36, 123, 59, 125, 127, 5, 10, 34, 43, 89, 61, 51, 112, 123, 30, 60, 41, 70, 70, 89, 114, 80, 10, - 59, 53, 13, 31, 61, 118, 104, 123, 118, 103, 127, 13, 7, 96, 1, 37, 8, 72, 58, 7, 89, 107, 70, - 47, 93, 123, 52, 103, 59, 47, 3, 41, 84, 52, 125, 27, 24, 61, 78, 107, 1, 122, 20, 121, 107, 57, - 120, 6, 125, 73, 91, 32, 56, 2, 56, 81, 113, 20, 0, 97, 119, 68, 103, 90, 45, 21, 8, 11, 21, - 123, 97, 125, 80, 91, 76, 66, 117, 84, 10, 68, 57, 117, 66, 71, 65, 39, 94, 11, 10, 39, 41, 116, - 109, 66, 119, 55, 85, 2, 70, 23, 80, 88, 58, 5, 14, 11, 83, 126, 39, 60, 44, 20, 28, 107, 75, - 38, 32, 99, 104, 72, 89, 75, 59, 81, 15, 15, 77, 15, 80, 91, 65, 123, 108, 90, 18, 50, 16, 107, - 125, 76, 52, 1, 97, 33, 48, 35, 90, 116, 46, 51, 107, 14, 104, 49, 120, 58, 111, 35, 92, 73, 119, - 26, 91, 5, 117, 5, 29, 1, 82, 73, 54, 18, 118, 38, 73, 9, 47, 77, 121, 105, 40, 80, 63, 38, - 74, 95, 100, 112, 40, 39, 48, 82, 62, 62, 51, 118, 50, 18, 11, 102, 4, 72, 38, 32, 126, 70, 55, - 92, 49, 116, 122, 39, 13, 75, 1, 106, 99, 2, 57, 76, 49, 122, 35, 2, 83, 90, 116, 103, 91, 79, - 99, 27, 99, 15, 97, 121, 95, 56, 125, 28, 121, 1, 55, 111, 58, 33, 110, 111, 100, 53, 113, 125, 92, - 14, 0, 106, 113, 79, 78, 52, 1, 80, 52, 13, 56, 16, 57, 125, 33, 119, 64, 78, 70, 116, 83, 6, - 115, 35, 79, 95, 83, 47, 36, 29, 22, 11, 31, 50, 31, 52, 45, 53, 89, 51, 17, 119, 117, 86, 57, - 92, 15, 59, 116, 113, 46, 46, 42, 111, 0, 31, 29, 93, 70, 122, 47, 110, 35, 23, 94, 61, 30, 110, - 15, 113, 95, 116, 35, 24, 96, 95, 19, 2, 45, 91, 5, 37, 56, 99, 65, 14, 70, 27, 8, 38, 59, - 106, 35, 44, 101, 48, 9, 57, 8, 8, 24, 94, 83, 46, 112, 113, 24, 75, 70, 121, 83, 20, 76, 50, - 102, 4, 119, 114, 21, 12, 26, 39, 102, 61, 66, 73, 127, 87, 98, 3, 109, 80, 97, 13, 31, 115, 118, - 126, 108, 59, 6, 65, 33, 15, 28, 7, 45, 44, 83, 79, 10, 114, 32, 101, 73, 117, 52, 122, 29, 107, - 8, 108, 22, 31, 31, 116, 27, 75, 44, 104, 98, 99, 91, 6, 109, 127, 65, 98, 13, 64, 0, 101, 49, - 91, 88, 107, 112, 10, 122, 56, 91, 118, 75, 41, 54, 57, 19, 56, 60, 56, 50, 19, 118, 111, 88, 54, - 114, 111, 78, 0, 40, 92, 58, 83, 52, 75, 5, 3, 70, 77, 47, 34, 64, 20, 65, 29, 61, 39, 66, - 28, 7, 72, 35, 5, 117, 43, 30, 56, 43, 7, 124, 6, 57, 43, 34, 29, 32, 81, 49, 75, 74, 47, - 10, 104, 24, 121, 10, 35, 18, 16, 81, 13, 63, 89, 75, 86, 3, 21, 91, 44, 70, 35, 65, 120, 94, - 57, 109, 33, 27, 95, 82, 3, 18, 52, 49, 57, 15, 8, 33, 98, 99, 70, 65, 79, 22, 52, 83, 20, - 75, 23, 69, 23, 48, 54, 91, 89, 33, 54, 83, 82, 103, 19, 51, 77, 14, 106, 1, 44, 7, 123, 108, - 22, 17, 51, 87, 13, 66, 0, 57, 53, 113, 42, 9, 35, 75, 15, 61, 113, 84, 45, 40, 112, 37, 19, - 120, 51, 8, 66, 76, 117, 36, 104, 47, 69, 96, 54, 75, 81, 65, 69, 24, 91, 45, 39, 29, 91, 15, - 80, 24, 80, 18, 50, 101, 49, 72, 25, 93, 87, 14, 4, 41, 103, 12, 71, 43, 26, 84, 82, 77, 83, - 25, 108, 47, 120, 58, 82, 93, 84, 39, 33, 102, 4, 99, 93, 90, 32, 92, 65, 66, 35, 88, 8, 125, - 38, 40, 51, 3, 22, 62, 57, 18, 92, 55, 107, 65, 18, 113, 61, 123, 126, 8, 94, 86, 18, 93, 78, - 35, 95, 31, 20, 126, 119, 101, 56, 9, 121, 71, 30, 104, 63, 42, 125, 111, 29, 19, 115, 11, 25, 30, - 116, 64, 57, 53, 13, 102, 68, 70, 8, 74, 114, 82, 119, 12, 20, 37, 112, 16, 52, 125, 50, 26, 114, - 121, 90, 74, 36, 8, 55, 60, 31, 11, 45, 38, 115, 101, 122, 8, 102, 40, 114, 88, 35, 110, 21, 69, - 56, 117, 105, 102, 60, 12, 37, 119, 0, 60, 3, 4, 12, 7, 106, 66, 29, 32, 37, 44, 7, 96, 95, - 6, 75, 8, 79, 124, 44, 84, 84, 78, 45, 99, 51, 61, 81, 115, 57, 1, 110, 10, 77, 116, 57, 79, - 52, 110, 95, 47, 44, 20, 98, 4, 93, 81, 36, 41, 80, 114, 72, 75, 33, 82, 71, 17, 41, 13, 105, - 90, 38, 105, 120, 18, 60, 52, 106, 106, 74, 19, 25, 82, 88, 108, 17, 124, 123, 85, 68, 23, 68, 116, - 61, 122, 94, 90, 23, 86, 70, 70, 13, 124, 66, 115, 22, 125, 65, 109, 76, 107, 74, 16, 34, 40, 63, - 102, 16, 83, 61, 67, 75, 12, 60, 1, 73, 37, 74, 123, 104, 14, 108, 60, 35, 89, 64, 81, 68, 64, - 9, 111, 26, 109, 101, 79, 108, 36, 47, 43, 18, 21, 41, 42, 90, 60, 124, 11, 110, 82, 42, 8, 46, - 21, 81, 2, 14, 96, 79, 106, 103, 67, 56, 74, 113, 14, 18, 86, 52, 95, 46, 33, 1, 51, 59, 96, - 2, 33, 87, 49, 105, 4, 106, 1, 44, 82, 108, 17, 127, 29, 111, 106, 27, 99, 81, 117, 77, 11, 50, - 100, 99, 97, 88, 58, 109, 66, 87, 74, 105, 33, 125, 14, 89, 97, 98, 36, 2, 38, 61, 85, 11, 82, - 32, 123, 2, 53, 61, 48, 26, 124, 78, 53, 108, 30, 63, 127, 63, 74, 33, 49, 62, 46, 45, 73, 22, - 47, 45, 43, 119, 98, 108, 50, 22, 106, 86, 2, 107, 53, 110, 113, 6, 43, 71, 99, 118, 103, 59, 43, - 112, 100, 58, 99, 79, 46, 101, 26, 104, 51, 102, 54, 59, 60, 109, 124, 26, 126, 90, 83, 32, 99, 55, - 82, 119, 55, 106, 13, 71, 28, 1, 116, 80, 64, 77, 127, 78, 119, 113, 43, 100, 10, 101, 2, 14, 1, - 37, 44, 61, 91, 16, 114, 21, 110, 121, 90, 110, 37, 7, 108, 123, 126, 65, 100, 41, 44, 68, 17, 119, - 4, 50, 86, 57, 93, 121, 115, 18, 36, 46, 48, 89, 114, 26, 70, 115, 88, 114, 116, 74, 119, 44, 36, - 52, 106, 61, 81, 37, 94, 90, 82, 72, 40, 111, 7, 45, 52, 32, 62, 44, 116, 28, 14, 30, 104, 106, - 42, 91, 117, 122, 113, 118, 52, 126, 40, 74, 37, 59, 10, 6, 115, 21, 63, 71, 89, 82, 99, 92, 32, - 8, 99, 41, 28, 78, 79, 18, 66, 57, 90, 84, 115, 45, 90, 3, 123, 74, 8, 11, 105, 16, 84, 27, - 106, 110, 82, 19, 74, 7, 80, 78, 24, 1, 113, 57, 47, 9, 126, 71, 103, 26, 100, 126, 106, 88, 46, - 57, 44, 18, 53, 34, 57, 62, 63, 108, 80, 55, 118, 108, 73, 93, 66, 38, 121, 59, 27, 114, 90, 81, - 16, 56, 107, 9, 104, 3, 94, 51, 117, 41, 111, 18, 94, 7, 58, 57, 103, 14, 35, 117, 126, 57, 35, - 78, 120, 88, 125, 47, 43, 68, 37, 113, 125, 63, 116, 46, 32, 13, 49, 120, 120, 71, 116, 124, 65, 42, - 89, 64, 101, 92, 126, 94, 79, 106, 124, 78, 32, 98, 40, 23, 108, 3, 13, 94, 121, 80, 39, 108, 64, - 122, 32, 83, 2, 57, 104, 120, 123, 7, 92, 5, 62, 18, 49, 26, 118, 17, 124, 13, 101, 125, 114, 118, - 83, 31, 119, 53, 51, 12, 17, 108, 64, 101, 12, 122, 46, 24, 73, 97, 121, 71, 126, 44, 105, 37, 75, - 106, 4, 33, 20, 27, 79, 73, 30, 104, 77, 71, 99, 20, 63, 119, 106, 60, 10, 12, 28, 72, 80, 48, - 21, 18, 59, 118, 59, 108, 95, 60, 66, 46, 88, 41, 16, 34, 118, 2, 97, 3, 86, 9, 122, 11, 116, - 126, 118, 8, 64, 5, 118, 119, 71, 84, 104, 6, 93, 28, 95, 64, 88, 90, 113, 121, 86, 67, 99, 46, - 70, 5, 63, 19, 22, 45, 31, 29, 25, 1, 40, 14, 116, 115, 38, 4, 30, 78, 38, 107, 16, 77, 52, - 90, 32, 24, 55, 55, 70, 105, 59, 89, 5, 10, 120, 122, 111, 54, 66, 99, 50, 83, 6, 94, 39, 14, - 65, 119, 26, 112, 58, 13, 73, 124, 70, 80, 32, 45, 7, 0, 66, 12, 123, 81, 96, 103, 21, 64, 86, - 3, 68, 72, 19, 109, 48, 25, 14, 95, 21, 37, 115, 14, 106, 126, 13, 9, 107, 35, 59, 58, 89, 58, - 16, 122, 28, 81, 37, 25, 37, 69, 85, 19, 123, 76, 115, 41, 13, 50, 126, 6, 114, 28, 86, 104, 14, - 11, 118, 80, 85, 86, 76, 118, 36, 110, 2, 104, 4, 91, 9, 34, 123, 37, 69, 21, 97, 60, 74, 106, - 60, 106, 118, 30, 76, 110, 33, 14, 65, 63, 38, 76, 27, 110, 127, 43, 56, 16, 80, 96, 118, 78, 106, - 105, 123, 55, 127, 44, 101, 31, 52, 100, 9, 58, 121, 85, 33, 65, 126, 25, 117, 45, 4, 7, 2, 115, - 72, 66, 75, 109, 9, 13, 125, 9, 59, 112, 71, 101, 108, 27, 81, 115, 17, 65, 91, 86, 30, 36, 123, - 3, 23, 14, 66, 19, 6, 21, 106, 67, 96, 73, 118, 45, 82, 58, 68, 107, 98, 40, 36, 9, 56, 27, - 17, 114, 78, 101, 5, 75, 118, 65, 2, 19, 117, 84, 95, 19, 4, 90, 99, 34, 73, 29, 62, 73, 89, - 106, 125, 65, 43, 57, 107, 85, 36, 99, 4, 104, 113, 2, 3, 49, 108, 127, 59, 52, 99, 29, 78, 81, - 40, 114, 70, 71, 23, 59, 119, 12, 91, 53, 30, 102, 125, 46, 47, 1, 59, 126, 87, 32, 32, 115, 45, - 95, 57, 58, 29, 70, 98, 95, 45, 116, 35, 1, 14, 18, 18, 87, 20, 15, 106, 95, 34, 48, 37, 64, - 42, 1, 117, 16, 60, 21, 82, 93, 39, 83, 120, 52, 10, 111, 46, 36, 49, 122, 30, 58, 116, 74, 19, - 15, 55, 44, 118, 11, 50, 28, 102, 6, 5, 37, 35, 45, 100, 117, 98, 115, 6, 63, 65, 65, 108, 73, - 99, 58, 75, 70, 48, 103, 48, 49, 92, 64, 67, 126, 6, 44, 85, 0, 64, 26, 112, 117, 31, 14, 69, - 66, 111, 35, 125, 65, 110, 30, 36, 58, 45, 8, 12, 46, 104, 111, 93, 30, 77, 57, 75, 83, 55, 64, - 86, 79, 22, 95, 39, 5, 50, 77, 34, 20, 123, 101, 99, 16, 33, 67, 45, 109, 45, 10, 52, 86, 98, - 60, 49, 117, 67, 120, 7, 114, 43, 119, 69, 107, 110, 99, 5, 95, 15, 86, 35, 22, 47, 113, 104, 32, - 78, 24, 69, 6, 107, 75, 3, 22, 126, 63, 125, 41, 75, 110, 87, 69, 21, 63, 92, 21, 56, 106, 18, - 65, 47, 75, 95, 14, 114, 97, 126, 22, 17, 77, 55, 65, 32, 38, 126, 83, 106, 49, 69, 7, 15, 67, - 97, 19, 29, 106, 25, 64, 111, 19, 44, 39, 7, 43, 81, 51, 115, 40, 119, 21, 93, 65, 122, 59, 7, - 30, 94, 33, 67, 51, 70, 56, 18, 73, 122, 86, 32, 21, 98, 83, 65, 126, 71, 35, 8, 2, 125, 24, - 7, 63, 56, 3, 44, 44, 61, 97, 29, 78, 97, 5, 117, 94, 33, 34, 51, 75, 42, 16, 63, 95, 16, - 69, 80, 58, 90, 83, 19, 72, 77, 64, 32, 115, 39, 59, 32, 65, 40, 12, 22, 32, 40, 47, 42, 102, - 3, 30, 90, 26, 15, 98, 53, 92, 15, 126, 73, 97, 45, 68, 83, 2, 33, 122, 74, 56, 47, 98, 84, - 72, 118, 37, 59, 76, 40, 90, 33, 62, 76, 51, 91, 11, 111, 116, 120, 59, 79, 46, 114, 70, 21, 116, - 7, 41, 40, 25, 106, 72, 118, 6, 14, 109, 93, 102, 8, 77, 33, 111, 16, 85, 112, 99, 82, 106, 108, - 28, 46, 84, 65, 105, 27, 30, 77, 55, 65, 109, 57, 44, 96, 26, 12, 42, 99, 23, 101, 9, 96, 113, - 59, 24, 90, 14, 21, 57, 55, 81, 67, 112, 104, 124, 3, 57, 116, 121, 97, 120, 10, 4, 38, 49, 40, - 23, 5, 78, 20, 35, 114, 93, 61, 80, 61, 66, 27, 120, 9, 30, 59, 107, 39, 54, 125, 114, 46, 61, - 39, 82, 116, 103, 78, 32, 32, 120, 116, 38, 29, 27, 12, 3, 40, 53, 18, 32, 22, 75, 86, 125, 12, - 28, 90, 28, 97, 31, 67, 55, 42, 112, 113, 42, 49, 59, 76, 109, 20, 52, 57, 113, 115, 17, 24, 116, - 65, 107, 115, 119, 105, 59, 86, 83, 59, 75, 123, 107, 72, 39, 104, 22, 85, 88, 99, 52, 70, 46, 106, - 60, 26, 4, 3, 2, 80, 48, 121, 33, 74, 0, 99, 94, 40, 71, 29, 82, 29, 59, 74, 72, 68, 42, - 112, 42, 37, 77, 20, 85, 23, 30, 87, 102, 123, 48, 50, 21, 51, 16, 121, 45, 86, 99, 65, 63, 40, - 89, 22, 45, 111, 113, 94, 51, 72, 31, 116, 5, 43, 84, 74, 110, 7, 98, 9, 47, 50, 34, 91, 105, - 73, 11, 81, 23, 82, 106, 27, 19, 41, 83, 56, 60, 3, 81, 42, 109, 63, 68, 45, 10, 77, 41, 91, - 93, 119, 94, 7, 12, 64, 81, 113, 97, 32, 36, 41, 69, 24, 73, 83, 106, 29, 63, 81, 51, 64, 48, - 87, 116, 126, 125, 58, 12, 17, 110, 8, 89, 96, 33, 17, 116, 72, 75, 83, 49, 31, 4, 37, 92, 84, - 8, 75, 16, 84, 81, 103, 104, 54, 20, 22, 23, 80, 118, 9, 18, 126, 5, 107, 45, 111, 70, 47, 112, - 45, 28, 103, 97, 45, 37, 77, 25, 92, 78, 66, 123, 67, 92, 81, 100, 113, 73, 3, 115, 17, 118, 27, - 120, 109, 11, 42, 58, 96, 95, 83, 124, 19, 107, 118, 41, 21, 124, 125, 33, 114, 29, 22, 40, 85, 50, - 70, 118, 45, 109, 27, 24, 28, 94, 118, 86, 95, 105, 55, 15, 16, 16, 11, 48, 98, 65, 75, 87, 82, - 118, 104, 105, 98, 122, 78, 31, 75, 47, 111, 89, 66, 97, 51, 68, 32, 6, 31, 117, 90, 70, 107, 85, - 72, 1, 35, 21, 82, 75, 118, 42, 81, 10, 36, 0, 8, 126, 54, 112, 118, 67, 126, 108, 16, 117, 103, - 82, 34, 124, 4, 20, 89, 112, 43, 46, 106, 96, 123, 44, 56, 41, 24, 44, 90, 80, 116, 33, 36, 6, - 120, 70, 81, 61, 72, 47, 47, 79, 126, 56, 105, 68, 4, 34, 95, 61, 121, 11, 40, 11, 77, 28, 9, - 41, 98, 38, 82, 14, 90, 25, 125, 44, 12, 105, 92, 123, 22, 78, 87, 6, 42, 113, 31, 81, 17, 68, - 52, 81, 20, 119, 32, 5, 51, 11, 74, 81, 119, 45, 117, 7, 33, 126, 10, 92, 69, 74, 76, 106, 28, - 11, 76, 92, 74, 8, 111, 70, 35, 71, 77, 127, 106, 45, 125, 21, 108, 87, 85, 48, 80, 71, 113, 107, - 114, 52, 115, 66, 48, 61, 65, 125, 41, 71, 25, 67, 59, 112, 86, 78, 18, 105, 68, 2, 95, 30, 97, - 105, 52, 91, 40, 117, 102, 84, 68, 108, 9, 120, 73, 119, 12, 56, 6, 1, 115, 43, 58, 58, 114, 117, - 54, 83, 113, 125, 23, 50, 109, 5, 51, 62, 90, 22, 109, 69, 92, 77, 17, 43, 67, 114, 26, 104, 21, - 15, 1, 42, 75, 30, 124, 8, 29, 70, 67, 73, 28, 34, 38, 64, 118, 64, 32, 70, 111, 12, 88, 109, - 35, 113, 81, 17, 43, 97, 16, 83, 46, 71, 67, 93, 31, 15, 8, 20, 7, 12, 65, 89, 3, 54, 64, - 56, 79, 23, 54, 108, 48, 89, 13, 35, 35, 112, 35, 53, 46, 1, 32, 78, 32, 29, 89, 16, 2, 41, - 14, 97, 75, 82, 61, 114, 37, 53, 123, 61, 97, 10, 120, 108, 98, 39, 1, 83, 78, 116, 82, 127, 81, - 83, 90, 104, 123, 16, 120, 116, 49, 32, 58, 97, 24, 35, 81, 98, 101, 52, 95, 90, 34, 103, 79, 101, - 55, 58, 68, 95, 3, 63, 116, 20, 108, 109, 99, 9, 72, 80, 40, 17, 7, 115, 54, 26, 84, 12, 42, - 110, 52, 82, 41, 78, 118, 115, 24, 36, 60, 48, 62, 119, 30, 13, 38, 85, 108, 35, 36, 121, 58, 43, - 92, 127, 16, 55, 42, 75, 35, 50, 101, 2, 119, 57, 92, 109, 79, 94, 99, 3, 95, 60, 15, 36, 19, - 78, 8, 2, 0, 83, 69, 100, 98, 53, 59, 107, 121, 47, 40, 109, 49, 43, 81, 22, 14, 27, 38, 64, - 121, 50, 62, 11, 30, 50, 77, 50, 86, 96, 4, 110, 34, 18, 76, 20, 115, 121, 95, 116, 106, 1, 17, - 108, 115, 84, 75, 106, 8, 75, 95, 126, 78, 53, 42, 122, 89, 116, 56, 26, 113, 70, 86, 58, 95, 65, - 48, 96, 116, 113, 117, 17, 123, 26, 26, 117, 33, 91, 2, 115, 36, 66, 92, 6, 66, 118, 105, 117, 54, - 60, 104, 93, 83, 34, 93, 47, 114, 111, 30, 64, 70, 19, 46, 20, 49, 17, 53, 35, 110, 78, 111, 40, - 72, 58, 115, 119, 26, 86, 82, 19, 51, 116, 60, 45, 120, 81, 57, 46, 124, 7, 18, 15, 119, 22, 107, - 80, 110, 78, 27, 47, 13, 64, 62, 91, 102, 104, 59, 47, 109, 82, 81, 103, 80, 115, 103, 55, 109, 71, - 108, 124, 44, 85, 117, 79, 123, 119, 125, 124, 70, 47, 42, 123, 54, 30, 108, 54, 59, 101, 13, 127, 67, - 48, 8, 45, 87, 42, 28, 49, 56, 98, 107, 111, 63, 55, 73, 28, 43, 96, 120, 62, 77, 25, 47, 32, - 40, 48, 101, 106, 115, 32, 5, 92, 86, 27, 115, 127, 107, 9, 14, 49, 121, 24, 60, 61, 26, 57, 10, - 21, 51, 56, 69, 69, 35, 79, 5, 109, 25, 79, 56, 52, 88, 88, 4, 38, 22, 54, 102, 85, 32, 80, - 72, 36, 58, 67, 80, 4, 6, 104, 82, 7, 53, 37, 48, 93, 42, 49, 49, 27, 61, 56, 7, 38, 83, - 113, 99, 83, 30, 82, 110, 25, 63, 88, 58, 70, 97, 50, 34, 20, 45, 71, 77, 89, 76, 12, 59, 107, - 79, 80, 125, 47, 85, 86, 43, 70, 80, 22, 36, 124, 44, 23, 7, 37, 50, 51, 46, 122, 5, 89, 1, - 47, 72, 30, 89, 10, 102, 103, 72, 75, 116, 121, 13, 104, 75, 43, 79, 106, 50, 56, 35, 25, 27, 10, - 73, 17, 58, 112, 102, 49, 72, 63, 84, 36, 126, 26, 76, 118, 50, 90, 113, 90, 118, 16, 10, 85, 127, - 79, 30, 50, 85, 29, 45, 103, 99, 52, 111, 57, 110, 85, 25, 16, 36, 118, 64, 41, 48, 26, 29, 62, - 40, 60, 37, 3, 73, 87, 112, 57, 64, 4, 97, 90, 84, 57, 18, 94, 92, 62, 97, 101, 50, 86, 34, - 29, 116, 59, 44, 124, 49, 9, 27, 71, 118, 53, 18, 76, 55, 11, 100, 61, 108, 115, 120, 49, 73, 80, - 42, 23, 74, 113, 35, 31, 38, 35, 121, 3, 96, 122, 28, 26, 20, 12, 67, 46, 84, 117, 30, 81, 58, - 125, 14, 39, 19, 95, 58, 44, 96, 122, 60, 39, 77, 109, 58, 10, 35, 73, 120, 101, 24, 87, 126, 72, - 90, 9, 1, 18, 12, 16, 87, 32, 71, 12, 10, 5, 123, 127, 64, 98, 81, 27, 68, 89, 57, 126, 31, - 94, 126, 60, 31, 109, 71, 120, 34, 1, 115, 75, 119, 26, 122, 104, 9, 101, 106, 52, 75, 46, 46, 54, - 37, 69, 38, 38, 65, 67, 68, 31, 40, 60, 110, 117, 8, 42, 45, 117, 89, 114, 11, 86, 15, 58, 27, - 113, 47, 71, 15, 49, 79, 50, 106, 10, 38, 80, 39, 86, 87, 74, 49, 126, 42, 99, 127, 80, 26, 110, - 31, 83, 110, 67, 32, 48, 66, 48, 110, 121, 120, 90, 36, 68, 67, 124, 68, 115, 26, 60, 112, 51, 25, - 83, 17, 84, 73, 125, 44, 42, 48, 75, 24, 33, 98, 88, 102, 110, 124, 6, 119, 118, 65, 47, 68, 88, - 19, 32, 22, 53, 51, 64, 11, 8, 25, 16, 8, 102, 18, 118, 97, 110, 52, 19, 70, 5, 111, 61, 103, - 17, 91, 11, 16, 39, 11, 43, 107, 115, 47, 95, 8, 8, 72, 31, 9, 62, 7, 50, 103, 67, 86, 121, - 83, 57, 123, 59, 67, 71, 40, 6, 119, 11, 98, 51, 103, 26, 54, 107, 100, 89}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/bias.h new file mode 100644 index 00000000..5950f5a8 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/bias.h @@ -0,0 +1,9 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int64_t int16xint8_spill2_bias[9] = + {-2977243, -1882378, 1369262, -3601834, -1539928, -2667006, -4116905, 381236, -424834}; + +const int64_t *const int16xint8_spill2_biases = int16xint8_spill2_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/biases_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/biases_data.h deleted file mode 100644 index ace28d6c..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/biases_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int64_t *int16xint8_spill2_biases = NULL; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/config_data.h index b79e38d8..efda6e4f 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/config_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/config_data.h @@ -1,24 +1,27 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. #pragma once -#define INT16XINT8_SPILL2_OUT_CH 9 #define INT16XINT8_SPILL2_IN_CH 12 +#define INT16XINT8_SPILL2_OUT_CH 9 #define INT16XINT8_SPILL2_INPUT_W 10 #define INT16XINT8_SPILL2_INPUT_H 8 -#define INT16XINT8_SPILL2_DST_SIZE 90 -#define INT16XINT8_SPILL2_INPUT_SIZE 960 -#define INT16XINT8_SPILL2_OUT_ACTIVATION_MIN 32667 -#define INT16XINT8_SPILL2_OUT_ACTIVATION_MAX 32767 -#define INT16XINT8_SPILL2_INPUT_BATCHES 1 #define INT16XINT8_SPILL2_FILTER_X 9 #define INT16XINT8_SPILL2_FILTER_Y 4 +#define INT16XINT8_SPILL2_PADDING VALID +#define INT16XINT8_SPILL2_OUT_ACTIVATION_MIN 32667 +#define INT16XINT8_SPILL2_INPUT_MIN 32667 +#define INT16XINT8_SPILL2_INPUT_MAX 32767 #define INT16XINT8_SPILL2_STRIDE_X 1 #define INT16XINT8_SPILL2_STRIDE_Y 1 +#define INT16XINT8_SPILL2_DILATION_X 1 +#define INT16XINT8_SPILL2_DILATION_Y 1 +#define INT16XINT8_SPILL2_BATCH_SIZE 1 +#define INT16XINT8_SPILL2_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8_SPILL2_INPUT_BATCHES 1 #define INT16XINT8_SPILL2_PAD_X 0 #define INT16XINT8_SPILL2_PAD_Y 0 -#define INT16XINT8_SPILL2_OUTPUT_W 2 #define INT16XINT8_SPILL2_OUTPUT_H 5 +#define INT16XINT8_SPILL2_OUTPUT_W 2 +#define INT16XINT8_SPILL2_DST_SIZE 90 #define INT16XINT8_SPILL2_INPUT_OFFSET 0 #define INT16XINT8_SPILL2_OUTPUT_OFFSET 0 -#define INT16XINT8_SPILL2_DILATION_X 1 -#define INT16XINT8_SPILL2_DILATION_Y 1 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/input.h new file mode 100644 index 00000000..6277a45a --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/input.h @@ -0,0 +1,66 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_spill2_input[960] = { + 32759, 32674, 32672, 32671, 32752, 32741, 32711, 32708, 32738, 32685, 32705, 32761, 32764, 32756, 32761, 32764, + 32707, 32710, 32735, 32667, 32721, 32750, 32750, 32738, 32697, 32699, 32729, 32677, 32698, 32675, 32691, 32744, + 32743, 32758, 32692, 32736, 32678, 32764, 32732, 32693, 32698, 32702, 32744, 32707, 32706, 32668, 32707, 32688, + 32760, 32738, 32695, 32732, 32670, 32699, 32734, 32753, 32670, 32722, 32739, 32732, 32685, 32752, 32684, 32698, + 32751, 32753, 32689, 32697, 32752, 32726, 32729, 32742, 32748, 32755, 32718, 32713, 32706, 32741, 32712, 32673, + 32723, 32670, 32726, 32709, 32712, 32760, 32704, 32747, 32765, 32715, 32722, 32716, 32714, 32696, 32729, 32693, + 32719, 32732, 32680, 32720, 32684, 32757, 32685, 32695, 32698, 32726, 32673, 32722, 32762, 32731, 32690, 32676, + 32699, 32693, 32669, 32761, 32756, 32741, 32678, 32737, 32742, 32749, 32692, 32719, 32761, 32734, 32729, 32680, + 32718, 32670, 32731, 32682, 32678, 32749, 32752, 32706, 32688, 32762, 32748, 32729, 32735, 32710, 32676, 32748, + 32704, 32751, 32694, 32691, 32668, 32734, 32695, 32737, 32760, 32757, 32752, 32672, 32701, 32744, 32674, 32721, + 32764, 32751, 32669, 32681, 32721, 32697, 32742, 32732, 32680, 32710, 32698, 32667, 32744, 32690, 32753, 32732, + 32675, 32727, 32670, 32721, 32753, 32760, 32677, 32732, 32688, 32734, 32674, 32718, 32718, 32679, 32766, 32712, + 32757, 32687, 32683, 32724, 32721, 32670, 32744, 32685, 32737, 32677, 32738, 32736, 32715, 32741, 32754, 32762, + 32716, 32696, 32716, 32718, 32742, 32691, 32696, 32691, 32721, 32733, 32703, 32756, 32701, 32716, 32683, 32744, + 32731, 32679, 32707, 32732, 32753, 32696, 32725, 32673, 32761, 32714, 32720, 32756, 32710, 32750, 32675, 32673, + 32766, 32739, 32703, 32753, 32689, 32718, 32742, 32738, 32744, 32766, 32706, 32678, 32735, 32706, 32671, 32750, + 32727, 32738, 32755, 32736, 32728, 32683, 32710, 32701, 32748, 32692, 32694, 32729, 32699, 32743, 32717, 32706, + 32670, 32732, 32702, 32762, 32698, 32733, 32675, 32677, 32697, 32734, 32766, 32745, 32701, 32747, 32684, 32740, + 32741, 32668, 32728, 32677, 32697, 32701, 32765, 32667, 32676, 32683, 32690, 32682, 32709, 32755, 32714, 32739, + 32723, 32684, 32704, 32670, 32757, 32762, 32761, 32680, 32754, 32713, 32764, 32694, 32699, 32754, 32677, 32733, + 32675, 32737, 32761, 32704, 32699, 32752, 32690, 32705, 32685, 32673, 32688, 32714, 32679, 32738, 32704, 32721, + 32692, 32670, 32714, 32693, 32755, 32711, 32731, 32713, 32674, 32700, 32716, 32698, 32732, 32752, 32684, 32716, + 32706, 32706, 32698, 32732, 32736, 32766, 32726, 32681, 32708, 32744, 32697, 32674, 32698, 32733, 32673, 32715, + 32724, 32669, 32723, 32700, 32675, 32686, 32687, 32758, 32766, 32685, 32704, 32691, 32724, 32670, 32734, 32744, + 32721, 32673, 32671, 32704, 32734, 32672, 32743, 32681, 32753, 32680, 32727, 32708, 32757, 32687, 32668, 32704, + 32752, 32739, 32761, 32682, 32690, 32743, 32750, 32723, 32731, 32702, 32706, 32741, 32682, 32706, 32740, 32716, + 32747, 32766, 32723, 32716, 32735, 32726, 32685, 32698, 32735, 32754, 32716, 32691, 32687, 32729, 32718, 32695, + 32730, 32714, 32715, 32680, 32671, 32730, 32746, 32723, 32725, 32753, 32701, 32738, 32690, 32672, 32739, 32719, + 32693, 32681, 32767, 32707, 32724, 32667, 32686, 32696, 32706, 32715, 32686, 32697, 32762, 32707, 32749, 32764, + 32765, 32719, 32691, 32684, 32671, 32677, 32736, 32667, 32672, 32669, 32757, 32687, 32685, 32727, 32697, 32676, + 32674, 32734, 32667, 32691, 32732, 32682, 32722, 32764, 32752, 32684, 32750, 32738, 32668, 32677, 32680, 32721, + 32754, 32710, 32756, 32710, 32671, 32706, 32764, 32715, 32725, 32756, 32728, 32686, 32725, 32670, 32667, 32700, + 32726, 32685, 32683, 32745, 32714, 32744, 32744, 32742, 32741, 32692, 32736, 32738, 32728, 32725, 32729, 32683, + 32700, 32762, 32744, 32716, 32746, 32700, 32742, 32682, 32732, 32686, 32765, 32720, 32699, 32750, 32757, 32709, + 32685, 32721, 32755, 32703, 32709, 32738, 32673, 32736, 32749, 32685, 32704, 32669, 32674, 32725, 32703, 32759, + 32734, 32709, 32740, 32715, 32702, 32692, 32680, 32691, 32728, 32671, 32710, 32701, 32749, 32715, 32699, 32747, + 32745, 32684, 32690, 32764, 32734, 32690, 32705, 32713, 32689, 32720, 32674, 32717, 32691, 32721, 32728, 32717, + 32709, 32705, 32708, 32739, 32726, 32688, 32744, 32708, 32692, 32735, 32682, 32724, 32694, 32691, 32760, 32715, + 32726, 32691, 32702, 32718, 32729, 32706, 32676, 32752, 32703, 32763, 32707, 32691, 32754, 32723, 32670, 32698, + 32686, 32702, 32693, 32731, 32765, 32754, 32742, 32680, 32732, 32765, 32668, 32743, 32673, 32672, 32700, 32687, + 32681, 32763, 32746, 32765, 32722, 32707, 32765, 32758, 32737, 32743, 32719, 32757, 32670, 32715, 32714, 32748, + 32765, 32744, 32707, 32739, 32681, 32706, 32732, 32702, 32751, 32709, 32675, 32680, 32706, 32683, 32708, 32669, + 32672, 32753, 32684, 32746, 32675, 32704, 32727, 32735, 32710, 32684, 32684, 32684, 32764, 32744, 32679, 32678, + 32731, 32716, 32735, 32734, 32748, 32717, 32687, 32750, 32753, 32682, 32682, 32745, 32757, 32716, 32758, 32724, + 32761, 32730, 32714, 32754, 32687, 32746, 32745, 32679, 32696, 32750, 32675, 32743, 32754, 32679, 32716, 32762, + 32746, 32722, 32692, 32667, 32705, 32731, 32705, 32735, 32737, 32685, 32669, 32703, 32719, 32706, 32707, 32684, + 32699, 32735, 32762, 32677, 32751, 32764, 32671, 32764, 32722, 32755, 32681, 32673, 32689, 32760, 32740, 32716, + 32722, 32738, 32668, 32710, 32714, 32723, 32710, 32734, 32765, 32735, 32684, 32694, 32670, 32675, 32716, 32684, + 32688, 32703, 32734, 32681, 32717, 32689, 32761, 32720, 32691, 32754, 32689, 32723, 32680, 32679, 32677, 32707, + 32727, 32751, 32708, 32667, 32738, 32682, 32756, 32740, 32681, 32743, 32726, 32729, 32679, 32701, 32763, 32717, + 32749, 32729, 32681, 32672, 32722, 32680, 32705, 32765, 32675, 32699, 32704, 32767, 32671, 32748, 32741, 32752, + 32737, 32721, 32695, 32727, 32700, 32721, 32671, 32717, 32696, 32754, 32669, 32685, 32764, 32705, 32765, 32766, + 32695, 32692, 32700, 32696, 32725, 32699, 32686, 32691, 32677, 32706, 32766, 32708, 32731, 32710, 32720, 32676, + 32710, 32757, 32687, 32713, 32718, 32677, 32712, 32751, 32757, 32706, 32694, 32766, 32700, 32725, 32765, 32719, + 32766, 32687, 32691, 32766, 32684, 32724, 32728, 32728, 32675, 32687, 32744, 32766, 32753, 32705, 32668, 32680, + 32683, 32704, 32686, 32690, 32672, 32742, 32681, 32712, 32686, 32743, 32690, 32733, 32675, 32708, 32669, 32713, + 32674, 32720, 32734, 32755, 32726, 32732, 32724, 32690, 32708, 32714, 32697, 32668, 32692, 32742, 32733, 32711, + 32764, 32689, 32765, 32733, 32721, 32711, 32670, 32675, 32756, 32688, 32739, 32755, 32717, 32682, 32713, 32740, + 32726, 32719, 32732, 32749, 32746, 32721, 32689, 32750, 32758, 32738, 32718, 32744, 32745, 32739, 32726, 32709, + 32741, 32692, 32673, 32685, 32760, 32738, 32767, 32708, 32762, 32743, 32727, 32735, 32757, 32706, 32678, 32755}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/input_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/input_data.h deleted file mode 100644 index d81c3483..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/input_data.h +++ /dev/null @@ -1,66 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int16_t int16xint8_spill2_input[960] = { - 32732, 32696, 32712, 32689, 32702, 32755, 32747, 32756, 32690, 32671, 32733, 32703, 32714, 32668, 32687, 32730, - 32742, 32735, 32699, 32674, 32711, 32675, 32719, 32718, 32737, 32694, 32748, 32669, 32735, 32676, 32743, 32755, - 32740, 32719, 32746, 32688, 32719, 32733, 32739, 32689, 32766, 32703, 32674, 32687, 32728, 32704, 32708, 32691, - 32730, 32684, 32701, 32683, 32731, 32712, 32723, 32722, 32724, 32700, 32733, 32703, 32745, 32732, 32714, 32694, - 32732, 32754, 32695, 32741, 32750, 32739, 32688, 32722, 32756, 32674, 32681, 32759, 32741, 32697, 32706, 32747, - 32687, 32730, 32741, 32667, 32682, 32684, 32726, 32691, 32721, 32755, 32735, 32715, 32732, 32689, 32716, 32749, - 32677, 32692, 32694, 32739, 32715, 32717, 32723, 32717, 32716, 32736, 32678, 32701, 32694, 32705, 32688, 32718, - 32701, 32758, 32700, 32709, 32688, 32737, 32687, 32736, 32676, 32727, 32731, 32688, 32713, 32730, 32698, 32686, - 32762, 32722, 32685, 32720, 32754, 32753, 32711, 32726, 32760, 32759, 32680, 32702, 32683, 32761, 32713, 32699, - 32674, 32679, 32727, 32757, 32672, 32691, 32720, 32728, 32704, 32700, 32680, 32704, 32749, 32765, 32719, 32730, - 32683, 32751, 32736, 32718, 32696, 32674, 32674, 32690, 32747, 32690, 32763, 32706, 32758, 32720, 32710, 32735, - 32721, 32698, 32738, 32668, 32718, 32694, 32681, 32707, 32706, 32761, 32756, 32687, 32700, 32686, 32686, 32680, - 32751, 32761, 32715, 32744, 32697, 32712, 32686, 32725, 32764, 32746, 32739, 32739, 32733, 32763, 32718, 32720, - 32714, 32681, 32696, 32711, 32734, 32761, 32746, 32697, 32729, 32711, 32677, 32740, 32741, 32715, 32729, 32685, - 32685, 32726, 32728, 32707, 32763, 32731, 32676, 32729, 32711, 32714, 32739, 32753, 32729, 32716, 32735, 32712, - 32724, 32722, 32731, 32699, 32765, 32745, 32695, 32739, 32755, 32726, 32750, 32756, 32693, 32700, 32697, 32752, - 32726, 32732, 32722, 32684, 32724, 32706, 32737, 32755, 32684, 32764, 32703, 32687, 32733, 32671, 32699, 32726, - 32703, 32747, 32670, 32667, 32724, 32697, 32719, 32739, 32760, 32740, 32700, 32756, 32716, 32754, 32696, 32744, - 32750, 32732, 32761, 32760, 32751, 32668, 32753, 32698, 32748, 32667, 32760, 32746, 32725, 32708, 32711, 32706, - 32715, 32752, 32667, 32734, 32724, 32745, 32743, 32723, 32682, 32706, 32718, 32762, 32733, 32676, 32708, 32680, - 32761, 32673, 32710, 32749, 32704, 32738, 32684, 32681, 32756, 32669, 32691, 32726, 32760, 32742, 32725, 32667, - 32760, 32704, 32728, 32706, 32719, 32709, 32671, 32759, 32720, 32669, 32742, 32695, 32694, 32765, 32717, 32761, - 32730, 32712, 32714, 32687, 32750, 32734, 32730, 32720, 32745, 32688, 32752, 32679, 32749, 32723, 32708, 32688, - 32683, 32712, 32668, 32690, 32669, 32749, 32734, 32678, 32678, 32698, 32713, 32727, 32702, 32694, 32697, 32759, - 32730, 32749, 32745, 32696, 32733, 32701, 32672, 32730, 32748, 32707, 32747, 32758, 32711, 32691, 32688, 32681, - 32755, 32748, 32748, 32735, 32727, 32707, 32677, 32712, 32751, 32741, 32724, 32674, 32689, 32752, 32740, 32710, - 32764, 32676, 32729, 32674, 32688, 32757, 32709, 32724, 32710, 32683, 32764, 32762, 32713, 32765, 32669, 32667, - 32704, 32736, 32749, 32732, 32712, 32748, 32733, 32695, 32743, 32693, 32761, 32740, 32675, 32682, 32744, 32714, - 32765, 32668, 32757, 32711, 32756, 32701, 32721, 32706, 32733, 32715, 32720, 32744, 32739, 32740, 32670, 32757, - 32675, 32687, 32722, 32753, 32683, 32752, 32685, 32685, 32688, 32747, 32727, 32701, 32734, 32677, 32669, 32674, - 32675, 32706, 32753, 32695, 32759, 32731, 32687, 32754, 32738, 32680, 32702, 32752, 32714, 32731, 32730, 32749, - 32721, 32699, 32760, 32684, 32719, 32687, 32694, 32720, 32671, 32723, 32679, 32741, 32690, 32737, 32737, 32689, - 32684, 32685, 32687, 32734, 32729, 32755, 32736, 32742, 32756, 32710, 32734, 32766, 32725, 32701, 32756, 32682, - 32683, 32749, 32741, 32736, 32695, 32723, 32726, 32758, 32678, 32689, 32681, 32765, 32708, 32718, 32693, 32737, - 32724, 32677, 32720, 32721, 32680, 32683, 32752, 32765, 32696, 32765, 32745, 32684, 32699, 32681, 32731, 32729, - 32678, 32711, 32667, 32668, 32756, 32713, 32745, 32737, 32741, 32673, 32719, 32678, 32759, 32673, 32714, 32698, - 32670, 32759, 32702, 32691, 32710, 32744, 32686, 32715, 32739, 32726, 32721, 32758, 32701, 32682, 32727, 32737, - 32743, 32704, 32762, 32743, 32701, 32685, 32720, 32763, 32729, 32752, 32763, 32696, 32735, 32697, 32700, 32707, - 32695, 32700, 32697, 32744, 32714, 32704, 32708, 32741, 32739, 32669, 32719, 32743, 32674, 32712, 32715, 32701, - 32704, 32708, 32684, 32707, 32736, 32731, 32697, 32729, 32689, 32741, 32730, 32760, 32689, 32674, 32766, 32693, - 32689, 32736, 32678, 32685, 32672, 32753, 32683, 32761, 32691, 32700, 32709, 32708, 32672, 32672, 32763, 32742, - 32696, 32714, 32722, 32752, 32735, 32697, 32724, 32678, 32712, 32668, 32707, 32678, 32679, 32696, 32759, 32760, - 32709, 32741, 32724, 32717, 32689, 32705, 32725, 32722, 32681, 32736, 32684, 32695, 32721, 32669, 32706, 32740, - 32693, 32704, 32737, 32694, 32738, 32720, 32690, 32763, 32689, 32675, 32725, 32765, 32669, 32676, 32688, 32723, - 32750, 32669, 32763, 32707, 32755, 32720, 32740, 32688, 32766, 32721, 32734, 32723, 32685, 32700, 32756, 32736, - 32702, 32721, 32698, 32722, 32745, 32718, 32675, 32752, 32702, 32726, 32668, 32675, 32714, 32694, 32745, 32676, - 32743, 32731, 32745, 32759, 32758, 32708, 32700, 32703, 32752, 32725, 32708, 32683, 32720, 32732, 32686, 32760, - 32766, 32733, 32750, 32737, 32746, 32702, 32684, 32709, 32731, 32733, 32689, 32713, 32730, 32762, 32688, 32710, - 32716, 32674, 32722, 32667, 32678, 32710, 32747, 32688, 32715, 32708, 32738, 32679, 32720, 32709, 32705, 32713, - 32703, 32681, 32732, 32684, 32717, 32715, 32711, 32736, 32685, 32695, 32669, 32758, 32725, 32680, 32758, 32678, - 32670, 32720, 32705, 32715, 32743, 32703, 32711, 32717, 32683, 32736, 32732, 32700, 32728, 32726, 32717, 32716, - 32713, 32763, 32697, 32711, 32736, 32704, 32728, 32761, 32677, 32679, 32731, 32720, 32712, 32723, 32762, 32718, - 32699, 32751, 32755, 32694, 32736, 32670, 32679, 32676, 32701, 32760, 32735, 32716, 32726, 32714, 32703, 32667, - 32671, 32668, 32729, 32738, 32727, 32704, 32748, 32717, 32716, 32717, 32701, 32748, 32721, 32679, 32747, 32707, - 32757, 32696, 32712, 32757, 32693, 32711, 32741, 32687, 32763, 32747, 32730, 32727, 32698, 32702, 32678, 32699, - 32756, 32733, 32697, 32691, 32732, 32732, 32680, 32690, 32739, 32740, 32750, 32717, 32674, 32686, 32703, 32671, - 32726, 32672, 32738, 32724, 32765, 32690, 32749, 32714, 32694, 32691, 32725, 32676, 32699, 32725, 32713, 32762, - 32724, 32690, 32676, 32710, 32697, 32765, 32670, 32758, 32728, 32681, 32744, 32712, 32741, 32765, 32756, 32766, - 32713, 32706, 32737, 32758, 32733, 32763, 32670, 32667, 32674, 32726, 32718, 32732, 32735, 32734, 32703, 32673, - 32709, 32723, 32717, 32759, 32754, 32671, 32723, 32719, 32740, 32677, 32697, 32668, 32671, 32739, 32704, 32744}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output.h new file mode 100644 index 00000000..5cf8fa58 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output.h @@ -0,0 +1,14 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8_spill2_output[90] = { + 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, + 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, + 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, + 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, + 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, + 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767}; + +const int16_t *const int16xint8_spill2_output_ref = int16xint8_spill2_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_mult_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_mult_data.h deleted file mode 100644 index 0fd80c3c..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_mult_data.h +++ /dev/null @@ -1,7 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int32_t int16xint8_spill2_output_mult[9] = - {1231320420, 1228194292, 1228950954, 1231269879, 1231112138, 1229528901, 1230557932, 1230167876, 1229640034}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_multiplier.h new file mode 100644 index 00000000..904518d2 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_multiplier.h @@ -0,0 +1,9 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_spill2_output_multiplier[9] = + {1164873661, 1165711091, 1166142428, 1162691874, 1164766483, 1164948563, 1163570962, 1166077734, 1164470327}; + +const int32_t *const int16xint8_spill2_output_mult = int16xint8_spill2_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_ref_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_ref_data.h deleted file mode 100644 index ba5623b5..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_ref_data.h +++ /dev/null @@ -1,12 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int16_t int16xint8_spill2_output_ref[90] = { - 32716, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32718, 32667, 32667, 32667, 32667, 32667, - 32667, 32667, 32667, 32716, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32714, 32667, 32667, - 32667, 32667, 32667, 32667, 32667, 32667, 32716, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, - 32716, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32713, 32667, 32667, 32667, 32667, 32667, - 32667, 32667, 32667, 32714, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32713, 32667, 32667, - 32667, 32667, 32667, 32667, 32667, 32667, 32714, 32667, 32667, 32667, 32667, 32667, 32667, 32667, 32667}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_shift.h new file mode 100644 index 00000000..766dbaf8 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8_spill2_output_shift[9] = {-13, -13, -13, -13, -13, -13, -13, -13, -13}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_shift_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_shift_data.h deleted file mode 100644 index 074e382c..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/output_shift_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int32_t int16xint8_spill2_output_shift[9] = {-14, -14, -14, -14, -14, -14, -14, -14, -14}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/test_data.h index 4d61c5f2..33835748 100644 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/test_data.h +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/test_data.h @@ -1,9 +1,7 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#include "biases_data.h" +#include "bias.h" #include "config_data.h" -#include "input_data.h" -#include "output_mult_data.h" -#include "output_ref_data.h" -#include "output_shift_data.h" -#include "weights_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/weights.h new file mode 100644 index 00000000..9f45aded --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/weights.h @@ -0,0 +1,176 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8_spill2_weights[3888] = { + 18, 32, 89, 54, 38, 126, 63, 121, 123, 30, 112, 96, 124, 9, 125, 64, 118, 39, 54, 99, 61, 27, 51, + 114, 73, 71, 98, 123, 60, 81, 89, 119, 57, 48, 122, 48, 44, 64, 9, 25, 15, 56, 25, 6, 70, 90, + 65, 26, 26, 78, 70, 99, 62, 118, 122, 55, 101, 123, 25, 109, 13, 93, 127, 10, 120, 122, 26, 45, 53, + 3, 31, 86, 32, 95, 78, 88, 103, 119, 72, 69, 65, 52, 43, 114, 100, 52, 26, 25, 40, 76, 16, 19, + 6, 27, 74, 98, 59, 38, 80, 38, 17, 35, 30, 94, 76, 52, 39, 90, 101, 17, 102, 104, 33, 5, 36, + 25, 38, 18, 50, 29, 93, 47, 105, 122, 33, 58, 68, 28, 106, 21, 12, 48, 96, 107, 103, 46, 81, 17, + 31, 108, 66, 98, 80, 5, 75, 46, 85, 98, 38, 42, 77, 51, 86, 3, 120, 124, 21, 32, 75, 60, 95, + 105, 29, 14, 5, 116, 64, 104, 45, 12, 12, 86, 51, 100, 81, 43, 85, 71, 102, 106, 41, 81, 4, 45, + 81, 42, 32, 71, 9, 3, 48, 15, 45, 116, 68, 75, 13, 5, 57, 16, 60, 82, 44, 28, 20, 92, 23, + 67, 37, 70, 65, 11, 10, 96, 76, 64, 126, 47, 19, 90, 67, 94, 117, 127, 84, 55, 101, 71, 83, 45, + 86, 24, 107, 104, 19, 72, 126, 98, 6, 37, 111, 124, 76, 61, 16, 122, 26, 39, 2, 62, 106, 64, 12, + 22, 16, 96, 113, 74, 60, 90, 30, 103, 89, 100, 111, 54, 25, 105, 5, 88, 75, 80, 91, 3, 26, 49, + 70, 59, 53, 84, 31, 39, 69, 126, 18, 2, 112, 24, 92, 98, 82, 89, 122, 82, 85, 106, 108, 18, 118, + 86, 89, 10, 82, 125, 4, 65, 70, 37, 14, 35, 26, 40, 61, 73, 89, 18, 101, 5, 34, 19, 25, 120, + 21, 21, 21, 14, 114, 10, 25, 5, 65, 8, 78, 94, 44, 99, 19, 61, 112, 98, 55, 89, 32, 72, 68, + 121, 83, 17, 59, 91, 101, 101, 28, 8, 15, 68, 114, 83, 28, 107, 35, 44, 55, 73, 8, 50, 54, 69, + 76, 38, 88, 114, 89, 73, 83, 64, 52, 44, 125, 20, 50, 116, 110, 87, 67, 24, 70, 41, 81, 101, 73, + 52, 48, 47, 70, 75, 84, 49, 38, 36, 63, 100, 57, 85, 111, 79, 114, 59, 17, 21, 58, 67, 56, 79, + 65, 9, 18, 4, 46, 115, 112, 124, 81, 21, 61, 109, 65, 31, 40, 83, 33, 2, 109, 106, 75, 33, 10, + 8, 47, 41, 3, 32, 79, 94, 119, 1, 105, 56, 120, 97, 11, 5, 20, 118, 54, 58, 22, 81, 47, 31, + 34, 10, 0, 78, 24, 115, 110, 87, 68, 13, 98, 50, 72, 15, 75, 101, 56, 15, 40, 30, 88, 110, 12, + 108, 108, 126, 92, 10, 24, 34, 72, 92, 96, 57, 80, 17, 28, 98, 76, 33, 38, 125, 32, 99, 84, 49, + 114, 69, 40, 88, 28, 102, 104, 13, 123, 117, 125, 65, 4, 39, 79, 60, 118, 29, 100, 124, 63, 35, 88, + 42, 52, 25, 85, 82, 71, 18, 46, 68, 83, 109, 78, 47, 61, 76, 17, 24, 115, 31, 53, 93, 7, 17, + 62, 26, 38, 69, 7, 44, 17, 6, 22, 19, 69, 36, 67, 62, 57, 93, 37, 80, 19, 35, 31, 38, 49, + 121, 36, 36, 39, 117, 26, 74, 35, 125, 121, 62, 61, 6, 98, 80, 52, 126, 120, 65, 64, 16, 13, 9, + 43, 106, 63, 121, 44, 95, 117, 51, 100, 12, 82, 74, 103, 33, 88, 42, 20, 104, 105, 99, 111, 77, 93, + 89, 56, 48, 102, 52, 22, 58, 106, 52, 72, 91, 14, 50, 103, 14, 35, 99, 87, 104, 22, 28, 20, 120, + 29, 26, 115, 104, 105, 1, 48, 4, 123, 85, 41, 74, 26, 116, 103, 26, 10, 25, 79, 114, 105, 23, 87, + 84, 17, 98, 65, 8, 28, 99, 75, 84, 13, 0, 33, 84, 22, 24, 100, 38, 64, 55, 101, 100, 119, 14, + 110, 83, 104, 28, 25, 80, 41, 97, 42, 57, 41, 74, 14, 100, 76, 76, 90, 4, 43, 4, 68, 127, 13, + 107, 110, 102, 78, 82, 81, 62, 119, 123, 105, 10, 93, 8, 61, 96, 99, 123, 116, 3, 76, 47, 122, 49, + 33, 5, 95, 26, 80, 18, 122, 10, 3, 39, 9, 79, 66, 63, 88, 24, 44, 123, 22, 78, 79, 30, 127, + 23, 93, 9, 88, 61, 117, 84, 3, 62, 4, 23, 5, 55, 111, 97, 51, 121, 20, 119, 94, 7, 65, 10, + 85, 48, 71, 51, 54, 48, 71, 38, 96, 51, 25, 63, 8, 86, 62, 121, 125, 20, 41, 5, 27, 26, 9, + 28, 39, 66, 98, 114, 66, 101, 94, 80, 126, 47, 13, 118, 115, 36, 7, 107, 19, 52, 77, 96, 7, 69, + 0, 87, 60, 110, 113, 69, 76, 116, 97, 49, 79, 66, 107, 94, 21, 51, 84, 27, 95, 92, 33, 34, 2, + 22, 79, 102, 68, 80, 74, 18, 101, 0, 92, 33, 84, 103, 15, 97, 66, 73, 5, 55, 0, 55, 116, 91, + 25, 27, 105, 91, 23, 103, 66, 10, 2, 37, 77, 94, 69, 115, 62, 119, 108, 34, 123, 9, 32, 79, 20, + 15, 20, 2, 23, 65, 76, 103, 113, 25, 124, 65, 78, 45, 121, 52, 95, 18, 103, 55, 60, 20, 2, 84, + 64, 89, 117, 112, 90, 29, 75, 84, 126, 91, 87, 92, 107, 92, 49, 19, 8, 105, 7, 111, 54, 108, 117, + 10, 93, 24, 104, 75, 13, 80, 15, 36, 15, 5, 121, 69, 39, 66, 26, 15, 103, 81, 111, 88, 7, 93, + 27, 68, 43, 64, 109, 75, 96, 127, 104, 116, 114, 119, 118, 48, 41, 25, 119, 42, 104, 20, 86, 40, 5, + 53, 107, 92, 69, 100, 105, 45, 102, 125, 126, 77, 43, 98, 35, 115, 80, 86, 114, 5, 116, 106, 56, 4, + 116, 2, 30, 38, 62, 99, 36, 111, 34, 118, 118, 109, 90, 38, 106, 31, 107, 104, 50, 118, 86, 56, 115, + 59, 114, 120, 73, 96, 112, 65, 3, 14, 49, 113, 66, 96, 11, 118, 73, 105, 87, 112, 48, 32, 86, 21, + 55, 123, 85, 19, 12, 18, 51, 75, 93, 11, 98, 59, 8, 91, 56, 49, 13, 85, 122, 122, 93, 48, 15, + 83, 113, 96, 3, 65, 22, 101, 98, 122, 56, 22, 48, 52, 125, 23, 12, 25, 49, 18, 61, 98, 123, 10, + 103, 99, 102, 103, 1, 28, 72, 31, 121, 54, 24, 120, 76, 97, 42, 108, 16, 48, 23, 106, 83, 92, 108, + 41, 50, 116, 26, 3, 94, 21, 58, 5, 68, 89, 126, 92, 19, 84, 116, 25, 3, 104, 127, 102, 72, 25, + 39, 77, 50, 107, 27, 125, 122, 39, 97, 46, 112, 21, 55, 118, 24, 86, 76, 111, 124, 54, 8, 69, 22, + 23, 86, 23, 3, 89, 125, 22, 126, 3, 119, 54, 118, 74, 20, 21, 90, 16, 101, 35, 121, 82, 88, 58, + 29, 65, 17, 109, 4, 53, 99, 21, 20, 4, 11, 49, 72, 21, 114, 89, 113, 1, 102, 118, 104, 92, 121, + 4, 51, 90, 28, 48, 47, 21, 29, 48, 76, 87, 26, 7, 51, 106, 75, 79, 93, 40, 3, 70, 119, 24, + 117, 80, 37, 11, 15, 75, 12, 115, 116, 72, 88, 97, 101, 111, 114, 78, 77, 51, 62, 70, 100, 78, 85, + 6, 47, 27, 68, 50, 78, 13, 26, 99, 23, 76, 33, 119, 74, 113, 73, 15, 48, 40, 7, 4, 116, 70, + 93, 71, 40, 63, 97, 110, 89, 48, 11, 78, 64, 62, 74, 1, 22, 105, 2, 72, 25, 110, 121, 16, 86, + 96, 123, 82, 39, 125, 39, 125, 62, 10, 81, 17, 109, 124, 68, 92, 104, 97, 41, 18, 95, 43, 22, 50, + 93, 119, 61, 58, 59, 73, 47, 43, 115, 110, 86, 12, 125, 120, 10, 122, 98, 26, 99, 73, 69, 17, 76, + 6, 42, 72, 43, 98, 6, 94, 122, 72, 48, 8, 109, 108, 45, 94, 13, 13, 122, 44, 96, 124, 107, 92, + 48, 75, 7, 0, 112, 81, 114, 81, 106, 57, 97, 46, 81, 55, 3, 62, 24, 42, 87, 53, 86, 107, 23, + 127, 54, 50, 62, 105, 110, 106, 91, 97, 34, 105, 11, 116, 122, 110, 81, 54, 55, 116, 61, 79, 93, 111, + 42, 23, 61, 15, 16, 43, 35, 96, 80, 19, 97, 36, 101, 126, 63, 42, 15, 3, 56, 118, 96, 99, 88, + 81, 98, 20, 57, 83, 96, 27, 55, 38, 57, 114, 64, 110, 1, 58, 92, 110, 55, 77, 24, 3, 64, 23, + 18, 106, 104, 52, 12, 26, 45, 47, 90, 68, 40, 4, 97, 74, 68, 13, 118, 21, 71, 44, 9, 89, 113, + 80, 115, 21, 47, 86, 51, 77, 75, 77, 60, 59, 30, 104, 101, 78, 91, 7, 117, 63, 16, 23, 111, 39, + 18, 97, 25, 112, 83, 39, 93, 37, 115, 87, 12, 32, 3, 48, 92, 14, 7, 95, 24, 58, 109, 17, 90, + 49, 126, 85, 43, 96, 118, 82, 89, 55, 66, 21, 14, 1, 73, 117, 44, 60, 102, 34, 124, 82, 68, 27, + 31, 110, 124, 16, 12, 124, 11, 117, 86, 18, 20, 3, 125, 97, 7, 8, 73, 13, 100, 66, 44, 82, 7, + 95, 10, 52, 102, 96, 61, 53, 113, 91, 59, 90, 47, 37, 69, 54, 123, 43, 96, 94, 97, 81, 38, 26, + 123, 111, 15, 39, 19, 85, 108, 62, 34, 29, 71, 9, 18, 93, 120, 70, 36, 98, 2, 10, 80, 45, 49, + 3, 3, 0, 8, 89, 53, 114, 27, 85, 89, 107, 84, 81, 64, 19, 116, 31, 23, 43, 118, 7, 34, 71, + 118, 88, 85, 21, 113, 29, 124, 106, 43, 26, 87, 49, 117, 59, 76, 123, 78, 70, 104, 85, 93, 90, 20, + 25, 73, 91, 51, 53, 69, 106, 89, 53, 115, 52, 119, 18, 75, 33, 41, 94, 60, 45, 54, 103, 121, 40, + 74, 80, 90, 64, 102, 92, 10, 50, 114, 95, 78, 100, 85, 30, 34, 75, 95, 70, 23, 109, 47, 85, 55, + 117, 83, 107, 77, 8, 36, 35, 127, 43, 17, 112, 33, 6, 103, 15, 52, 47, 114, 96, 13, 117, 77, 101, + 62, 83, 41, 121, 85, 97, 83, 118, 57, 74, 2, 45, 77, 99, 7, 121, 47, 25, 106, 65, 21, 56, 77, + 73, 13, 125, 49, 53, 40, 9, 58, 7, 81, 31, 69, 23, 2, 110, 115, 31, 22, 59, 17, 12, 67, 116, + 39, 78, 86, 117, 112, 0, 3, 85, 45, 38, 7, 108, 9, 9, 50, 47, 33, 90, 108, 16, 96, 85, 101, + 62, 5, 67, 88, 91, 35, 28, 10, 36, 14, 77, 104, 110, 13, 31, 96, 23, 19, 45, 90, 63, 104, 101, + 23, 28, 101, 80, 50, 45, 44, 78, 69, 11, 94, 96, 74, 21, 87, 18, 21, 7, 81, 42, 46, 95, 120, + 75, 74, 102, 8, 73, 119, 94, 15, 95, 97, 39, 59, 88, 93, 10, 27, 117, 46, 75, 124, 44, 27, 127, + 113, 27, 124, 16, 91, 84, 114, 115, 120, 85, 58, 47, 106, 65, 26, 83, 82, 53, 99, 96, 73, 53, 82, + 121, 113, 93, 118, 127, 92, 71, 29, 22, 91, 87, 42, 48, 29, 126, 16, 85, 47, 84, 84, 3, 26, 19, + 115, 54, 75, 102, 50, 110, 0, 41, 27, 12, 107, 52, 84, 83, 53, 91, 12, 35, 61, 82, 43, 111, 106, + 38, 65, 22, 52, 72, 3, 46, 26, 72, 81, 47, 87, 109, 50, 10, 91, 80, 12, 3, 72, 80, 40, 33, + 13, 2, 87, 34, 17, 83, 32, 50, 73, 118, 91, 25, 52, 50, 3, 32, 71, 72, 20, 2, 125, 31, 63, + 125, 28, 0, 28, 43, 55, 34, 85, 115, 91, 46, 18, 45, 17, 55, 85, 18, 15, 107, 56, 74, 31, 127, + 105, 90, 63, 26, 35, 66, 94, 59, 60, 86, 74, 49, 100, 43, 33, 55, 106, 84, 5, 101, 45, 58, 116, + 111, 62, 74, 21, 2, 115, 81, 64, 58, 45, 35, 4, 125, 49, 52, 39, 114, 79, 50, 71, 85, 84, 6, + 99, 113, 105, 98, 25, 28, 34, 16, 91, 69, 57, 27, 52, 25, 61, 36, 90, 9, 70, 33, 4, 15, 76, + 113, 125, 4, 47, 125, 80, 66, 62, 100, 59, 23, 55, 76, 67, 106, 118, 34, 50, 124, 77, 107, 52, 13, + 7, 5, 13, 43, 68, 96, 103, 87, 80, 58, 78, 67, 126, 75, 105, 119, 82, 6, 11, 17, 122, 57, 23, + 43, 91, 53, 23, 2, 14, 89, 101, 108, 57, 45, 46, 30, 33, 46, 41, 24, 14, 27, 100, 110, 87, 24, + 77, 26, 36, 121, 10, 13, 35, 22, 14, 10, 126, 14, 49, 12, 76, 125, 3, 1, 13, 96, 8, 15, 47, + 117, 88, 58, 81, 58, 90, 19, 78, 67, 74, 5, 119, 53, 16, 85, 43, 1, 101, 47, 20, 19, 48, 125, + 58, 27, 9, 127, 46, 51, 89, 121, 82, 12, 34, 15, 43, 3, 6, 89, 94, 97, 33, 117, 90, 51, 108, + 78, 106, 77, 12, 31, 95, 28, 60, 126, 95, 91, 33, 8, 70, 58, 35, 18, 3, 52, 6, 81, 126, 27, + 6, 49, 32, 113, 61, 58, 77, 45, 118, 121, 108, 34, 114, 53, 118, 5, 10, 48, 90, 92, 39, 69, 41, + 99, 30, 29, 100, 33, 124, 64, 26, 81, 90, 112, 89, 11, 90, 81, 50, 25, 105, 47, 46, 31, 38, 89, + 119, 67, 113, 58, 70, 32, 67, 83, 14, 60, 2, 115, 16, 53, 81, 71, 96, 119, 106, 61, 35, 83, 39, + 19, 36, 107, 99, 99, 34, 68, 74, 127, 46, 26, 65, 17, 9, 65, 117, 110, 15, 81, 90, 68, 98, 42, + 93, 115, 54, 72, 95, 76, 92, 10, 36, 53, 48, 95, 104, 18, 44, 92, 6, 122, 2, 89, 104, 61, 39, + 39, 14, 115, 50, 45, 70, 104, 57, 17, 9, 86, 24, 3, 101, 0, 67, 107, 97, 70, 77, 27, 35, 19, + 79, 86, 46, 38, 94, 81, 112, 114, 4, 7, 31, 2, 38, 105, 117, 57, 98, 17, 29, 70, 102, 66, 37, + 105, 90, 104, 99, 19, 72, 74, 28, 55, 102, 90, 109, 119, 24, 96, 44, 115, 84, 96, 115, 102, 72, 37, + 22, 94, 80, 42, 93, 53, 35, 70, 53, 96, 92, 23, 121, 65, 16, 44, 86, 33, 105, 70, 85, 25, 26, + 44, 77, 59, 73, 71, 50, 98, 112, 94, 3, 49, 47, 117, 72, 115, 19, 37, 35, 10, 62, 120, 98, 72, + 119, 39, 76, 126, 57, 17, 45, 80, 12, 31, 65, 82, 44, 3, 103, 70, 31, 82, 46, 117, 109, 96, 67, + 77, 118, 101, 41, 3, 78, 102, 38, 62, 125, 123, 13, 50, 56, 53, 100, 65, 126, 126, 21, 17, 5, 22, + 82, 32, 97, 63, 86, 118, 53, 85, 34, 66, 96, 88, 34, 23, 127, 95, 105, 48, 39, 7, 72, 4, 34, + 111, 92, 107, 91, 20, 29, 67, 11, 48, 61, 127, 38, 106, 47, 78, 105, 12, 75, 15, 116, 110, 13, 76, + 74, 91, 81, 13, 24, 121, 23, 64, 21, 118, 65, 65, 82, 77, 44, 19, 26, 14, 14, 56, 63, 37, 25, + 26, 81, 81, 53, 23, 80, 22, 72, 71, 104, 26, 70, 83, 25, 14, 59, 65, 61, 72, 4, 69, 11, 23, + 27, 81, 30, 70, 3, 124, 105, 32, 55, 87, 85, 101, 93, 95, 83, 109, 82, 52, 25, 81, 103, 47, 28, + 15, 24, 5, 12, 74, 91, 26, 121, 29, 24, 41, 90, 21, 119, 103, 40, 39, 49, 110, 36, 5, 53, 121, + 8, 124, 14, 125, 54, 81, 3, 76, 48, 118, 29, 66, 1, 32, 63, 39, 15, 112, 56, 117, 43, 26, 120, + 115, 61, 25, 72, 84, 56, 104, 95, 111, 72, 70, 25, 30, 19, 104, 81, 121, 62, 122, 53, 3, 102, 41, + 83, 2, 83, 40, 101, 100, 66, 17, 11, 70, 63, 103, 25, 19, 57, 13, 71, 27, 7, 50, 3, 13, 100, + 37, 14, 16, 118, 34, 21, 86, 37, 68, 65, 20, 73, 1, 114, 7, 86, 53, 81, 17, 40, 114, 78, 39, + 54, 34, 13, 28, 105, 99, 24, 26, 52, 25, 4, 55, 107, 52, 121, 24, 95, 72, 12, 87, 46, 6, 127, + 86, 5, 79, 94, 65, 28, 66, 109, 121, 9, 40, 104, 64, 76, 77, 18, 8, 35, 86, 37, 79, 79, 85, + 125, 5, 110, 26, 121, 3, 43, 76, 81, 116, 3, 116, 7, 124, 102, 34, 41, 46, 90, 80, 112, 16, 71, + 122, 72, 96, 48, 96, 87, 18, 39, 79, 59, 38, 112, 77, 75, 96, 76, 106, 7, 56, 15, 0, 116, 86, + 74, 19, 19, 111, 2, 89, 79, 71, 29, 5, 114, 13, 54, 24, 0, 9, 32, 123, 3, 84, 5, 61, 5, + 93, 117, 4, 14, 79, 0, 15, 37, 49, 20, 4, 60, 74, 45, 98, 93, 73, 57, 116, 114, 65, 91, 55, + 28, 64, 3, 95, 125, 96, 95, 25, 100, 113, 30, 93, 107, 71, 127, 81, 29, 119, 68, 90, 16, 43, 57, + 96, 40, 8, 25, 90, 88, 92, 102, 89, 62, 40, 98, 120, 37, 36, 61, 23, 74, 67, 5, 85, 76, 56, + 126, 95, 64, 12, 127, 124, 18, 104, 75, 31, 53, 50, 85, 2, 75, 105, 83, 82, 126, 49, 48, 71, 5, + 21, 106, 50, 76, 112, 54, 66, 105, 56, 24, 36, 119, 30, 110, 38, 112, 97, 3, 65, 33, 122, 124, 68, + 95, 117, 31, 24, 61, 84, 87, 84, 62, 69, 65, 120, 15, 1, 91, 10, 60, 17, 58, 81, 53, 96, 34, + 49, 93, 78, 17, 111, 17, 127, 67, 31, 103, 10, 36, 52, 6, 37, 85, 117, 51, 61, 23, 0, 126, 11, + 101, 4, 18, 67, 103, 39, 73, 49, 1, 11, 80, 118, 19, 95, 74, 51, 115, 20, 78, 43, 50, 66, 122, + 46, 2, 4, 33, 74, 93, 64, 74, 127, 93, 0, 40, 92, 124, 33, 113, 74, 18, 127, 59, 57, 111, 23, + 123, 23, 3, 44, 53, 119, 13, 46, 29, 35, 89, 103, 79, 67, 111, 8, 81, 117, 72, 108, 93, 52, 98, + 33, 96, 103, 6, 120, 121, 52, 36, 9, 33, 26, 125, 50, 126, 44, 114, 92, 67, 74, 40, 41, 108, 87, + 92, 63, 122, 105, 114, 125, 85, 82, 18, 64, 124, 39, 97, 124, 77, 94, 30, 95, 9, 110, 78, 85, 117, + 99, 106, 65, 26, 103, 119, 91, 116, 56, 22, 45, 63, 45, 44, 63, 36, 103, 11, 46, 73, 9, 118, 27, + 58, 60, 26, 1, 4, 51, 41, 123, 64, 102, 72, 110, 104, 62, 45, 75, 63, 11, 31, 90, 44, 47, 121, + 103, 52, 63, 82, 30, 108, 60, 70, 67, 38, 108, 51, 42, 4, 87, 93, 78, 6, 110, 95, 65, 19, 72, + 67, 75, 112, 16, 109, 117, 15, 33, 63, 4, 99, 10, 18, 6, 100, 24, 43, 7, 113, 124, 70, 89, 95, + 11, 1, 112, 60, 53, 61, 101, 99, 123, 20, 55, 86, 117, 11, 4, 38, 55, 11, 46, 94, 107, 34, 32, + 72, 61, 46, 97, 79, 52, 5, 52, 41, 79, 19, 35, 108, 45, 4, 82, 62, 17, 67, 55, 11, 98, 64, + 88, 45, 48, 86, 12, 125, 62, 39, 65, 40, 98, 63, 37, 107, 14, 71, 49, 62, 87, 123, 84, 39, 105, + 108, 24, 78, 120, 57, 30, 91, 31, 39, 13, 17, 123, 104, 34, 74, 54, 10, 36, 79, 40, 77, 75, 18, + 4, 63, 51, 100, 21, 120, 64, 125, 14, 14, 15, 99, 0, 107, 123, 88, 68, 13, 81, 30, 115, 100, 77, + 91, 64, 14, 123, 33, 40, 91, 26, 38, 81, 61, 88, 46, 1, 73, 56, 16, 97, 23, 93, 64, 126, 91, + 8, 64, 55, 39, 117, 44, 108, 111, 94, 58, 55, 10, 1, 110, 75, 23, 29, 86, 5, 54, 80, 63, 119, + 64, 49, 45, 55, 66, 39, 85, 30, 123, 75, 107, 45, 38, 86, 1, 22, 57, 91, 83, 100, 85, 74, 33, + 117, 34, 30, 38, 107, 27, 3, 94, 121, 54, 2, 80, 113, 30, 37, 9, 70, 53, 40, 119, 125, 71, 101, + 85, 36, 36, 19, 122, 45, 93, 76, 69, 3, 93, 123, 24, 30, 108, 33, 33, 112, 27, 2, 40, 109, 15, + 98, 71, 19, 78, 110, 53, 56, 67, 8, 10, 72, 40, 114, 76, 56, 98, 87, 53, 109, 110, 90, 12, 119, + 31, 15, 102, 50, 20, 76, 0, 18, 33, 84, 15, 103, 52, 86, 38, 110, 84, 25, 115, 17, 57, 69, 87, + 18, 72, 56, 35, 122, 70, 107, 71, 119, 46, 101, 84, 30, 56, 109, 67, 93, 127, 79, 18, 16, 23, 115, + 89, 18, 127, 25, 94, 65, 104, 104, 92, 34, 75, 4, 75, 77, 109, 13, 14, 127, 100, 66, 5, 81, 78, + 35, 10, 5, 43, 107, 4, 23, 60, 50, 10, 123, 67, 9, 59, 106, 21, 41, 45, 63, 109, 103, 34, 110, + 51, 10, 19, 114, 49, 115, 30, 103, 62, 121, 77, 67, 61, 58, 83, 118, 100, 96, 68, 33, 126, 101, 61, + 101, 33, 102, 125, 81, 48, 73, 43, 54, 83, 66, 96, 25, 77, 44, 114, 107, 18, 57, 93, 20, 61, 105, + 78, 66, 107, 61, 57, 23, 40, 53, 60, 19, 121, 115, 76, 45, 112, 2, 125, 33, 57, 75, 114, 51, 62, + 72, 25, 53, 11, 108, 54, 16, 28, 34, 104, 19, 16, 92, 55, 100, 89, 19, 100, 118, 20, 3, 85, 10, + 52, 36, 126, 88, 118, 59, 6, 5, 84, 82, 64, 77, 25, 52, 120, 25, 122, 13, 71, 94, 121, 38, 89, + 96, 70, 78, 41, 35, 96, 22, 33, 23, 119, 49, 7, 49, 27, 37, 83, 79, 23, 65, 108, 74, 105, 70, + 66, 84, 44, 35, 126, 83, 16, 13, 92, 78, 56, 54, 63, 20, 108, 87, 7, 41, 25, 75, 24, 80, 88, + 27, 45, 67, 80, 86, 89, 38, 76, 116, 55, 75, 121, 59, 61, 32, 3, 76, 73, 71, 19, 7, 68, 127, + 44, 109, 5, 101, 28, 79, 100, 111, 40, 52, 46, 68, 52, 19, 88, 74, 10, 97, 108, 90, 30, 73, 45, + 40, 28, 65, 80, 8, 21, 86, 21, 5, 112, 42, 31, 54, 23, 97, 58, 18, 32, 74, 16, 16, 124, 101, + 69, 45, 16, 27, 81, 110, 98, 8, 83, 57, 40, 96, 12, 123, 96, 26, 58, 21, 49, 7, 60, 102, 111, + 9, 43, 62, 22, 4, 58, 8, 44, 9, 29, 88, 100, 4, 39, 68, 72, 24, 115, 97, 62, 77, 109, 22, + 121, 108, 81, 101, 45, 90, 94, 32, 32, 80, 74, 72, 97, 46, 12, 23, 86, 47, 36, 35, 23, 120, 77, + 18}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/weights_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/weights_data.h deleted file mode 100644 index 4aee9323..00000000 --- a/Tests/UnitTest/TestCases/TestData/int16xint8_spill2/weights_data.h +++ /dev/null @@ -1,176 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.14.0 (Keras version 2.14.0). -// Interpreter from tensorflow version 2.14.0 and revision v2.14.0-rc1-21-g4dacf3f368e. -#pragma once -#include - -const int8_t int16xint8_spill2_weights[3888] = { - 41, 91, 43, 84, 71, 88, 125, 36, 81, 15, 18, 116, 85, 94, 126, 54, 95, 93, 126, 68, 45, 123, 116, - 107, 119, 74, 90, 36, 77, 114, 21, 70, 67, 112, 103, 34, 32, 85, 37, 115, 67, 55, 97, 113, 86, 103, - 0, 82, 21, 101, 37, 67, 124, 6, 50, 83, 119, 75, 66, 83, 114, 75, 56, 105, 119, 33, 31, 75, 124, - 40, 40, 12, 28, 115, 37, 11, 121, 87, 95, 68, 18, 67, 88, 42, 53, 38, 127, 14, 5, 93, 17, 25, - 29, 22, 78, 106, 19, 106, 7, 50, 28, 120, 73, 5, 76, 17, 19, 102, 126, 36, 99, 95, 40, 79, 34, - 98, 0, 107, 123, 41, 122, 88, 53, 94, 38, 40, 41, 42, 117, 75, 8, 115, 107, 104, 35, 46, 1, 105, - 88, 15, 30, 124, 121, 41, 60, 6, 48, 1, 93, 111, 34, 125, 113, 121, 47, 11, 10, 78, 55, 60, 114, - 66, 69, 72, 80, 47, 68, 13, 81, 75, 41, 53, 119, 50, 103, 123, 55, 125, 10, 91, 113, 5, 125, 6, - 24, 11, 37, 5, 124, 2, 89, 89, 43, 53, 13, 2, 54, 40, 125, 70, 117, 74, 60, 69, 22, 99, 96, - 103, 126, 98, 39, 99, 10, 86, 31, 36, 30, 2, 34, 71, 91, 105, 10, 39, 126, 15, 103, 91, 83, 13, - 46, 60, 54, 9, 124, 40, 19, 65, 50, 100, 117, 116, 46, 103, 118, 24, 104, 109, 57, 28, 93, 49, 96, - 85, 127, 104, 8, 105, 127, 118, 58, 8, 13, 92, 104, 60, 71, 113, 20, 55, 76, 82, 30, 59, 48, 48, - 19, 105, 80, 117, 100, 58, 64, 121, 72, 10, 56, 88, 26, 49, 60, 5, 90, 99, 51, 108, 77, 35, 121, - 24, 126, 80, 123, 89, 56, 49, 3, 13, 26, 104, 55, 19, 105, 95, 24, 102, 111, 24, 84, 33, 55, 68, - 106, 88, 3, 76, 98, 57, 67, 22, 49, 40, 42, 108, 115, 7, 123, 54, 125, 5, 5, 27, 74, 111, 108, - 22, 109, 88, 69, 36, 26, 8, 17, 39, 81, 63, 91, 78, 70, 123, 110, 122, 88, 63, 7, 111, 32, 26, - 111, 109, 92, 76, 63, 13, 35, 37, 119, 91, 31, 59, 99, 115, 44, 5, 127, 98, 10, 51, 5, 97, 89, - 126, 73, 10, 24, 65, 15, 21, 28, 93, 46, 87, 5, 66, 57, 5, 79, 43, 64, 101, 44, 91, 118, 39, - 94, 59, 55, 87, 42, 99, 58, 11, 38, 10, 17, 43, 85, 61, 45, 37, 89, 106, 85, 80, 70, 124, 13, - 29, 85, 3, 104, 13, 106, 117, 123, 17, 76, 5, 14, 37, 58, 44, 88, 74, 63, 62, 73, 115, 23, 47, - 126, 62, 4, 9, 34, 41, 74, 40, 97, 3, 35, 91, 26, 102, 86, 29, 32, 78, 122, 59, 13, 5, 43, - 89, 84, 19, 72, 5, 104, 53, 71, 47, 3, 67, 20, 4, 33, 46, 17, 52, 56, 28, 124, 13, 22, 107, - 127, 70, 38, 20, 65, 98, 2, 4, 17, 41, 12, 54, 108, 71, 3, 7, 54, 89, 122, 3, 58, 88, 100, - 0, 37, 54, 41, 17, 2, 83, 89, 74, 103, 78, 54, 93, 10, 71, 2, 73, 113, 89, 112, 44, 1, 14, - 42, 40, 27, 12, 13, 85, 126, 61, 106, 27, 92, 43, 77, 88, 36, 124, 102, 28, 106, 127, 50, 26, 81, - 59, 78, 70, 84, 39, 105, 90, 66, 56, 97, 119, 86, 65, 40, 12, 62, 116, 70, 108, 118, 82, 1, 111, - 124, 90, 0, 72, 91, 117, 111, 19, 71, 80, 42, 36, 115, 46, 44, 83, 40, 32, 59, 85, 84, 19, 3, - 53, 125, 65, 17, 63, 31, 14, 111, 48, 102, 73, 17, 11, 80, 73, 126, 105, 16, 95, 98, 41, 122, 15, - 37, 50, 15, 121, 67, 36, 37, 52, 23, 3, 114, 109, 76, 25, 37, 101, 76, 87, 25, 88, 105, 42, 91, - 104, 101, 89, 111, 39, 118, 19, 126, 5, 32, 68, 45, 33, 12, 6, 76, 69, 50, 10, 124, 114, 25, 1, - 40, 10, 105, 105, 103, 33, 119, 103, 89, 122, 86, 126, 18, 64, 3, 82, 104, 32, 26, 30, 82, 57, 47, - 57, 105, 119, 125, 101, 58, 27, 110, 46, 19, 109, 111, 117, 2, 3, 64, 73, 83, 21, 71, 29, 61, 123, - 94, 4, 15, 59, 60, 39, 100, 101, 80, 21, 69, 97, 84, 76, 114, 113, 36, 107, 84, 22, 26, 18, 87, - 107, 24, 73, 59, 121, 117, 78, 27, 56, 73, 57, 74, 47, 11, 37, 124, 53, 78, 11, 2, 61, 75, 107, - 43, 22, 14, 15, 113, 120, 126, 104, 35, 87, 119, 78, 19, 79, 1, 96, 100, 48, 36, 93, 54, 76, 96, - 12, 29, 127, 80, 126, 41, 86, 117, 40, 20, 81, 93, 0, 53, 13, 124, 113, 55, 107, 118, 21, 9, 12, - 28, 2, 92, 17, 10, 41, 60, 121, 59, 43, 92, 116, 30, 110, 11, 98, 51, 71, 61, 116, 32, 29, 119, - 107, 106, 58, 114, 117, 88, 55, 120, 42, 90, 32, 87, 104, 109, 79, 103, 122, 56, 67, 46, 107, 42, 25, - 122, 80, 23, 1, 121, 76, 82, 102, 92, 84, 6, 126, 125, 45, 83, 85, 3, 125, 124, 14, 89, 71, 56, - 115, 64, 69, 83, 55, 124, 118, 11, 38, 94, 73, 97, 3, 112, 45, 5, 51, 77, 56, 1, 101, 46, 10, - 53, 77, 46, 28, 26, 104, 105, 45, 86, 81, 3, 7, 104, 95, 5, 15, 51, 11, 95, 9, 87, 30, 100, - 90, 20, 66, 85, 57, 100, 0, 110, 24, 76, 53, 24, 107, 98, 101, 112, 57, 99, 20, 62, 49, 125, 43, - 12, 123, 102, 14, 64, 68, 83, 94, 127, 84, 124, 64, 36, 46, 13, 39, 67, 71, 9, 44, 122, 36, 125, - 16, 45, 90, 98, 35, 125, 20, 25, 81, 21, 8, 76, 45, 76, 26, 115, 52, 66, 53, 120, 107, 54, 115, - 63, 9, 2, 2, 27, 38, 43, 90, 67, 91, 56, 82, 109, 17, 30, 46, 21, 49, 60, 19, 6, 10, 122, - 33, 68, 86, 23, 87, 92, 62, 105, 110, 7, 8, 77, 120, 67, 90, 18, 57, 44, 3, 61, 68, 92, 42, - 116, 106, 92, 71, 5, 22, 105, 69, 6, 112, 32, 44, 91, 66, 111, 53, 67, 66, 110, 25, 123, 71, 125, - 113, 35, 75, 96, 32, 1, 88, 43, 115, 93, 59, 78, 116, 39, 16, 46, 29, 75, 58, 99, 69, 106, 31, - 102, 104, 94, 29, 81, 113, 59, 91, 43, 100, 74, 83, 85, 3, 26, 6, 56, 66, 69, 87, 83, 18, 88, - 107, 15, 117, 35, 97, 69, 52, 40, 69, 86, 82, 114, 84, 97, 76, 11, 49, 18, 62, 53, 114, 88, 71, - 112, 46, 40, 91, 17, 5, 34, 5, 5, 102, 4, 15, 109, 57, 16, 38, 26, 61, 43, 13, 111, 112, 55, - 15, 35, 9, 67, 62, 26, 35, 105, 103, 13, 55, 84, 48, 60, 70, 102, 123, 121, 28, 105, 73, 5, 89, - 44, 3, 64, 106, 95, 68, 41, 40, 117, 4, 51, 25, 100, 4, 9, 115, 21, 51, 36, 81, 21, 90, 75, - 20, 25, 125, 122, 88, 16, 52, 107, 3, 54, 7, 7, 39, 102, 91, 76, 104, 118, 64, 127, 72, 35, 54, - 33, 50, 121, 29, 85, 0, 43, 14, 11, 53, 76, 49, 49, 127, 116, 77, 117, 107, 42, 89, 81, 14, 117, - 59, 98, 115, 46, 57, 126, 80, 76, 75, 80, 121, 102, 64, 29, 126, 97, 46, 13, 46, 110, 102, 82, 4, - 102, 8, 51, 61, 76, 69, 69, 60, 13, 22, 95, 16, 89, 20, 24, 119, 12, 33, 72, 57, 58, 17, 44, - 76, 126, 106, 74, 5, 90, 95, 51, 95, 126, 76, 103, 126, 6, 19, 49, 10, 43, 11, 26, 53, 108, 71, - 38, 57, 122, 12, 75, 67, 55, 34, 88, 94, 51, 96, 5, 120, 1, 9, 6, 110, 60, 122, 83, 127, 95, - 125, 87, 90, 4, 105, 66, 45, 3, 7, 73, 29, 97, 112, 66, 100, 92, 113, 21, 6, 116, 53, 46, 74, - 39, 90, 30, 114, 100, 75, 66, 89, 35, 51, 28, 89, 76, 5, 116, 96, 49, 118, 43, 14, 89, 63, 5, - 0, 106, 96, 82, 83, 58, 103, 69, 48, 31, 64, 108, 78, 122, 86, 82, 113, 10, 51, 21, 59, 21, 122, - 49, 71, 62, 8, 4, 3, 125, 105, 61, 8, 78, 33, 36, 7, 66, 89, 109, 45, 92, 6, 102, 94, 32, - 79, 9, 68, 28, 85, 57, 126, 84, 38, 87, 40, 46, 76, 103, 39, 86, 117, 83, 36, 87, 6, 0, 108, - 122, 12, 14, 2, 99, 42, 45, 99, 21, 106, 32, 127, 91, 13, 38, 61, 57, 93, 85, 3, 10, 24, 34, - 25, 10, 85, 116, 61, 68, 67, 11, 124, 20, 44, 21, 71, 60, 49, 114, 62, 91, 115, 51, 44, 72, 29, - 57, 71, 3, 22, 22, 74, 20, 38, 66, 105, 62, 76, 50, 126, 49, 73, 107, 23, 121, 58, 103, 6, 41, - 56, 11, 45, 36, 4, 76, 62, 60, 52, 95, 72, 60, 52, 46, 30, 10, 109, 57, 91, 28, 110, 59, 60, - 114, 29, 28, 115, 61, 29, 51, 48, 92, 3, 119, 64, 81, 78, 106, 36, 69, 15, 80, 96, 32, 11, 19, - 71, 84, 82, 36, 100, 13, 107, 98, 99, 1, 20, 23, 83, 30, 73, 105, 23, 113, 31, 78, 83, 17, 29, - 85, 24, 64, 77, 7, 28, 92, 73, 121, 108, 118, 26, 106, 103, 32, 125, 125, 61, 64, 34, 22, 29, 16, - 68, 29, 37, 59, 54, 64, 122, 23, 58, 121, 84, 74, 96, 28, 126, 77, 51, 13, 35, 93, 57, 105, 27, - 3, 103, 19, 66, 82, 26, 40, 87, 49, 48, 117, 73, 56, 91, 79, 113, 91, 40, 77, 17, 68, 66, 117, - 45, 88, 0, 123, 19, 82, 36, 8, 78, 94, 39, 28, 126, 39, 35, 10, 22, 79, 43, 45, 63, 50, 97, - 30, 71, 44, 37, 106, 67, 13, 65, 111, 114, 60, 27, 109, 97, 27, 22, 114, 94, 103, 77, 88, 95, 13, - 118, 81, 25, 35, 126, 72, 6, 40, 85, 32, 64, 107, 85, 83, 71, 20, 91, 87, 5, 26, 107, 16, 64, - 42, 127, 7, 90, 81, 79, 86, 29, 96, 91, 71, 30, 42, 106, 9, 42, 111, 12, 30, 116, 106, 126, 69, - 99, 9, 11, 27, 69, 17, 106, 77, 114, 69, 74, 94, 72, 8, 116, 4, 127, 15, 64, 47, 120, 116, 71, - 52, 89, 123, 105, 43, 37, 79, 18, 59, 107, 88, 88, 76, 50, 38, 63, 6, 110, 75, 63, 68, 51, 124, - 99, 76, 77, 55, 23, 110, 51, 34, 94, 102, 14, 70, 83, 70, 75, 78, 67, 82, 35, 70, 84, 64, 29, - 1, 47, 110, 123, 10, 61, 28, 108, 64, 81, 120, 99, 85, 75, 36, 123, 107, 35, 62, 83, 46, 101, 26, - 15, 15, 107, 17, 57, 99, 19, 74, 64, 113, 70, 21, 79, 87, 87, 7, 107, 36, 93, 127, 25, 118, 88, - 9, 34, 124, 51, 87, 17, 83, 8, 66, 5, 4, 49, 120, 64, 58, 115, 62, 126, 46, 29, 10, 114, 42, - 18, 26, 61, 78, 39, 69, 38, 57, 47, 48, 35, 36, 17, 70, 36, 71, 52, 117, 33, 85, 52, 40, 117, - 41, 42, 9, 88, 111, 74, 123, 95, 1, 69, 23, 84, 54, 44, 15, 20, 32, 20, 43, 33, 71, 41, 105, - 91, 88, 23, 13, 67, 45, 62, 116, 54, 30, 93, 71, 91, 92, 10, 77, 7, 54, 11, 104, 94, 45, 82, - 33, 78, 55, 40, 103, 32, 61, 98, 108, 38, 111, 79, 11, 13, 58, 26, 93, 14, 14, 99, 33, 30, 101, - 67, 117, 121, 97, 52, 95, 87, 105, 23, 24, 3, 64, 114, 50, 39, 61, 55, 86, 52, 68, 72, 100, 104, - 84, 102, 97, 19, 83, 35, 57, 89, 32, 6, 98, 80, 118, 26, 110, 96, 107, 41, 91, 9, 78, 62, 102, - 66, 103, 80, 60, 14, 75, 127, 26, 66, 14, 14, 65, 105, 100, 28, 13, 74, 102, 98, 125, 85, 6, 10, - 81, 39, 23, 58, 65, 106, 15, 37, 85, 89, 47, 14, 80, 74, 75, 13, 67, 55, 93, 93, 83, 28, 78, - 108, 6, 105, 76, 59, 3, 99, 127, 54, 99, 112, 55, 18, 125, 13, 115, 119, 70, 39, 30, 69, 72, 66, - 119, 80, 39, 114, 111, 90, 84, 118, 64, 9, 91, 105, 21, 106, 121, 76, 65, 63, 53, 9, 93, 57, 32, - 31, 35, 38, 7, 12, 102, 13, 40, 5, 7, 23, 49, 2, 32, 9, 18, 13, 4, 63, 21, 118, 120, 14, - 121, 73, 41, 8, 83, 54, 57, 76, 9, 126, 90, 109, 41, 98, 45, 50, 92, 27, 18, 20, 76, 5, 119, - 53, 120, 32, 39, 77, 108, 109, 79, 67, 80, 2, 11, 5, 25, 40, 13, 62, 96, 31, 100, 62, 112, 52, - 95, 18, 99, 8, 91, 84, 78, 53, 10, 10, 68, 26, 107, 11, 66, 69, 83, 6, 41, 17, 8, 46, 1, - 114, 25, 99, 53, 120, 44, 83, 32, 94, 75, 96, 55, 52, 110, 57, 12, 3, 121, 57, 74, 105, 39, 55, - 108, 4, 30, 71, 61, 112, 52, 121, 126, 104, 81, 124, 58, 70, 63, 3, 12, 109, 42, 79, 8, 113, 28, - 65, 84, 81, 61, 74, 43, 100, 0, 22, 80, 30, 46, 117, 3, 122, 60, 13, 69, 13, 23, 99, 33, 80, - 43, 127, 8, 32, 98, 9, 10, 2, 97, 21, 19, 92, 32, 88, 103, 13, 116, 98, 120, 83, 81, 4, 63, - 3, 1, 64, 79, 98, 38, 52, 101, 65, 105, 113, 102, 41, 45, 28, 101, 114, 116, 70, 50, 65, 22, 38, - 53, 91, 1, 100, 92, 75, 10, 105, 116, 64, 52, 126, 74, 119, 1, 103, 120, 89, 88, 72, 12, 20, 76, - 81, 84, 65, 49, 68, 15, 56, 114, 28, 43, 94, 65, 69, 119, 87, 0, 115, 26, 74, 95, 92, 99, 52, - 56, 122, 22, 92, 73, 4, 112, 102, 105, 97, 80, 14, 84, 74, 36, 1, 105, 27, 42, 92, 95, 15, 72, - 80, 28, 57, 42, 72, 111, 81, 121, 98, 49, 105, 88, 28, 30, 77, 119, 115, 1, 126, 38, 22, 41, 87, - 96, 117, 93, 28, 30, 36, 91, 92, 79, 3, 88, 66, 36, 75, 15, 98, 25, 88, 104, 23, 36, 5, 4, - 26, 35, 47, 77, 16, 17, 105, 110, 106, 70, 25, 50, 1, 33, 77, 96, 8, 24, 104, 80, 40, 9, 97, - 99, 17, 82, 88, 41, 10, 107, 50, 11, 48, 80, 4, 27, 123, 14, 42, 99, 84, 75, 65, 7, 80, 115, - 114, 90, 99, 46, 11, 34, 95, 12, 85, 25, 58, 29, 22, 88, 45, 36, 101, 67, 1, 10, 112, 39, 101, - 43, 9, 112, 23, 39, 87, 113, 57, 29, 91, 35, 90, 53, 113, 27, 52, 50, 44, 75, 78, 108, 102, 89, - 127, 97, 94, 27, 89, 121, 46, 35, 23, 87, 100, 83, 39, 65, 68, 67, 91, 126, 120, 29, 115, 16, 20, - 105, 36, 85, 46, 9, 13, 28, 81, 7, 37, 120, 88, 72, 27, 78, 116, 31, 66, 73, 21, 13, 101, 37, - 59, 15, 28, 50, 61, 90, 11, 102, 99, 98, 68, 42, 107, 98, 88, 80, 98, 113, 23, 4, 63, 36, 115, - 61, 91, 96, 46, 18, 102, 83, 11, 106, 49, 50, 108, 120, 110, 74, 95, 7, 6, 114, 99, 74, 4, 60, - 42, 66, 9, 90, 19, 118, 19, 23, 127, 116, 10, 48, 106, 18, 49, 19, 81, 62, 32, 98, 26, 39, 41, - 5, 113, 112, 32, 57, 46, 76, 57, 106, 15, 32, 48, 84, 28, 60, 28, 32, 38, 23, 29, 81, 13, 97, - 51, 69, 59, 8, 73, 13, 41, 71, 54, 6, 55, 64, 74, 74, 126, 93, 80, 56, 33, 43, 76, 18, 93, - 31, 77, 38, 118, 68, 122, 13, 80, 63, 60, 105, 2, 122, 60, 37, 76, 32, 77, 95, 107, 41, 108, 42, - 70, 77, 124, 33, 33, 119, 19, 102, 103, 63, 44, 83, 85, 118, 37, 118, 6, 0, 103, 39, 4, 109, 93, - 43, 24, 83, 62, 86, 69, 124, 6, 91, 114, 95, 90, 5, 124, 10, 96, 45, 71, 28, 120, 96, 77, 84, - 46, 26, 108, 111, 105, 63, 35, 36, 18, 3, 85, 63, 119, 49, 118, 37, 42, 80, 107, 6, 52, 19, 39, - 37, 125, 35, 101, 30, 66, 71, 98, 76, 98, 28, 107, 58, 109, 65, 104, 94, 9, 41, 47, 52, 101, 62, - 29, 66, 81, 102, 26, 77, 83, 123, 91, 65, 77, 54, 45, 80, 33, 112, 57, 79, 98, 85, 88, 60, 5, - 49, 63, 78, 53, 36, 95, 119, 42, 49, 89, 65, 13, 85, 50, 31, 1, 112, 109, 77, 73, 62, 87, 62, - 107, 112, 56, 47, 56, 76, 119, 70, 94, 0, 76, 82, 19, 120, 97, 2, 10, 121, 86, 70, 41, 86, 106, - 7, 68, 19, 39, 108, 109, 18, 11, 5, 77, 100, 117, 64, 9, 77, 61, 48, 0, 80, 120, 64, 121, 21, - 80, 105, 30, 19, 114, 39, 1, 90, 98, 19, 114, 120, 54, 57, 52, 112, 54, 46, 7, 15, 2, 50, 116, - 44, 11, 20, 31, 118, 114, 57, 69, 124, 15, 87, 11, 90, 73, 1, 45, 20, 2, 4, 118, 60, 24, 88, - 30, 95, 125, 127, 112, 111, 42, 39, 113, 25, 22, 59, 4, 85, 86, 69, 113, 5, 76, 86, 23, 95, 105, - 113, 104, 25, 18, 50, 108, 20, 56, 14, 117, 24, 20, 77, 5, 13, 72, 109, 10, 69, 103, 117, 82, 98, - 81, 93, 7, 5, 11, 44, 22, 45, 120, 59, 126, 112, 77, 100, 38, 86, 3, 121, 50, 75, 77, 3, 118, - 3, 87, 19, 12, 23, 1, 71, 83, 41, 63, 91, 38, 110, 8, 113, 58, 48, 46, 94, 47, 127, 110, 114, - 77, 5, 18, 84, 68, 53, 34, 27, 57, 17, 44, 21, 49, 43, 127, 65, 74, 9, 70, 59, 86, 37, 49, - 98, 38, 49, 116, 81, 56, 116, 25, 32, 57, 44, 14, 31, 7, 103, 90, 92, 98, 120, 55, 70, 16, 84, - 38, 66, 24, 120, 83, 35, 78, 6, 91, 20, 100, 81, 68, 49, 84, 102, 16, 116, 75, 111, 20, 94, 115, - 103, 9, 106, 102, 97, 29, 117, 7, 63, 127, 75, 124, 32, 75, 89, 76, 25, 105, 29, 59, 33, 118, 97, - 125, 58, 108, 18, 10, 84, 112, 33, 91, 111, 16, 2, 94, 122, 23, 22, 121, 80, 90, 2, 42, 77, 119, - 79, 113, 22, 86, 36, 101, 73, 79, 67, 43, 58, 5, 53, 69, 61, 119, 114, 102, 29, 5, 52, 101, 46, - 27, 91, 74, 123, 58, 59, 116, 121, 3, 88, 112, 41, 114, 61, 32, 63, 12, 109, 49, 124, 97, 42, 61, - 42, 39, 32, 22, 118, 126, 60, 104, 97, 78, 106, 23, 82, 97, 94, 126, 60, 21, 37, 115, 56, 48, 126, - 101, 48, 91, 66, 20, 111, 31, 51, 21, 53, 55, 68, 104, 85, 27, 18, 35, 30, 23, 22, 44, 73, 33, - 30, 45, 26, 92, 27, 116, 126, 51, 44, 101, 23, 33, 38, 50, 53, 79, 36, 71, 0, 42, 112, 23, 124, - 48, 49, 29, 6, 58, 95, 29, 45, 100, 112, 100, 54, 57, 125, 105, 92, 117, 14, 34, 121, 36, 121, 85, - 39, 24, 108, 52, 19, 41, 116, 40, 15, 13, 116, 52, 19, 126, 111, 33, 19, 73, 60, 100, 25, 35, 127, - 27, 45, 49, 12, 98, 32, 43, 52, 71, 29, 48, 70, 88, 39, 39, 16, 27, 16, 8, 44, 23, 77, 116, - 78, 24, 72, 69, 122, 94, 82, 122, 28, 114, 96, 58, 95, 42, 99, 104, 97, 31, 45, 15, 50, 86, 53, - 84, 63, 40, 55, 34, 11, 93, 61, 3, 125, 70, 32, 108, 93, 7, 122, 7, 16, 29, 51, 98, 28, 42, - 64, 69, 22, 64, 80, 53, 116, 75, 33, 36, 14, 41, 2, 113, 57, 53, 105, 109, 83, 122, 119, 81, 109, - 3, 38, 45, 110, 71, 49, 9, 1, 105, 95, 71, 45, 116, 14, 51, 63, 63, 30, 97, 35, 23, 109, 8, - 27, 92, 10, 49, 66, 84, 32, 106, 73, 24, 100, 90, 77, 6, 118, 99, 20, 96, 41, 19, 35, 45, 66, - 78, 36, 60, 29, 67, 25, 0, 57, 104, 11, 116, 89, 73, 66, 88, 61, 59, 40, 104, 14, 4, 43, 125, - 34, 80, 122, 11, 109, 49, 52, 37, 25, 53, 71, 55, 96, 24, 55, 84, 118, 2, 56, 46, 33, 75, 20, - 37, 20, 49, 109, 115, 65, 26, 83, 45, 118, 5, 7, 51, 53, 22, 96, 80, 89, 72, 80, 107, 75, 127, - 33, 74, 106, 74, 49, 95, 94, 32, 35, 70, 41, 111, 46, 116, 67, 98, 98, 116, 88, 39, 41, 115, 17, - 90, 103, 20, 44, 40, 41, 103, 68, 30, 16, 8, 60, 74, 10, 118, 72, 17, 117, 110, 102, 67, 85, 98, - 31, 13, 105, 105, 60, 11, 106, 42, 79, 1, 27, 53, 123, 18, 94, 40, 79, 65, 57, 66, 91, 121, 29, - 61, 26, 43, 93, 99, 7, 78, 58, 53, 125, 24, 10, 116, 67, 72, 27, 20, 124, 105, 101, 79, 62, 51, - 58, 114, 32, 2, 6, 80, 34, 125, 88, 93, 48, 57, 1, 3, 41, 47, 70, 72, 73, 6, 114, 76, 93, - 18, 95, 61, 29, 53, 88, 27, 64, 15, 87, 36, 87, 60, 54, 49, 125, 106, 87, 95, 30, 38, 114, 83, - 51, 11, 82, 83, 46, 2, 91, 125, 26, 83, 112, 15, 32, 33, 17, 0, 121, 27, 87, 85, 29, 19, 30, - 41, 16, 88, 115, 2, 100, 85, 108, 89, 73, 53, 30, 70, 88, 20, 52, 102, 44, 30, 2, 107, 66, 120, - 7, 72, 79, 93, 36, 73, 46, 120, 118, 4, 73, 24, 124, 66, 110, 21, 46, 92, 111, 17, 96, 66, 29, - 44, 21, 41, 54, 71, 33, 34, 77, 17, 54, 23, 13, 97, 2, 0, 106, 31, 27, 126, 70, 82, 38, 14, - 107, 8, 127, 0, 100, 31, 52, 103, 26, 10, 106, 88, 51, 119, 28, 42, 0, 28, 68, 14, 55, 41, 80, - 104, 1, 6, 18, 63, 24, 107, 122, 24, 21, 119, 27, 60, 119, 74, 102, 10, 29, 5, 13, 5, 64, 1, - 12, 28, 115, 113, 96, 39, 84, 99, 73, 18, 25, 25, 79, 75, 115, 39, 94, 24, 6, 15, 87, 28, 40, - 106, 114, 92, 2, 53, 21, 52, 71, 25, 43, 118, 69, 86, 6, 88, 95, 10, 93, 105, 93, 127, 125, 61, - 36, 117, 104, 76, 47, 22, 84, 103, 23, 95, 95, 109, 39, 60, 1, 68, 31, 4, 72, 54, 74, 21, 118, - 40}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/bias.h new file mode 100644 index 00000000..29844dce --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t *const int16xint8xint32_1_bias = NULL; + +const int32_t *const int16xint8xint32_1_biases = int16xint8xint32_1_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/config_data.h new file mode 100644 index 00000000..24a20f56 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/config_data.h @@ -0,0 +1,25 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#define INT16XINT8XINT32_1_IN_CH 55 +#define INT16XINT8XINT32_1_OUT_CH 4 +#define INT16XINT8XINT32_1_INPUT_W 10 +#define INT16XINT8XINT32_1_INPUT_H 8 +#define INT16XINT8XINT32_1_FILTER_X 9 +#define INT16XINT8XINT32_1_FILTER_Y 4 +#define INT16XINT8XINT32_1_PADDING VALID +#define INT16XINT8XINT32_1_STRIDE_X 1 +#define INT16XINT8XINT32_1_STRIDE_Y 1 +#define INT16XINT8XINT32_1_DILATION_X 1 +#define INT16XINT8XINT32_1_DILATION_Y 1 +#define INT16XINT8XINT32_1_BATCH_SIZE 1 +#define INT16XINT8XINT32_1_OUT_ACTIVATION_MIN -32768 +#define INT16XINT8XINT32_1_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8XINT32_1_INPUT_BATCHES 1 +#define INT16XINT8XINT32_1_PAD_X 0 +#define INT16XINT8XINT32_1_PAD_Y 0 +#define INT16XINT8XINT32_1_OUTPUT_H 5 +#define INT16XINT8XINT32_1_OUTPUT_W 2 +#define INT16XINT8XINT32_1_DST_SIZE 40 +#define INT16XINT8XINT32_1_INPUT_OFFSET 0 +#define INT16XINT8XINT32_1_OUTPUT_OFFSET 0 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/input.h new file mode 100644 index 00000000..79891e52 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/input.h @@ -0,0 +1,321 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_1_input[4400] = { + 4031, -11343, 2963, -2384, 27820, -6570, -28090, -10952, -1557, -24402, -13444, -12646, 28866, 399, + 20645, -27577, 1232, 16138, -1232, -26388, 7280, 8456, 5760, -6187, 6889, -24142, -15715, 16621, + 14240, 9084, 5664, -23472, -7263, 29501, -3500, -11105, 24810, 3403, -8254, -6264, 30306, 29560, + -4821, -1312, -11334, -26419, 15044, -7615, 8047, 26491, 12417, -32270, -5771, -15034, 25223, 16281, + -26044, -18390, -2855, 1949, 6780, 25116, 22980, -23927, 8554, -18988, -309, 23125, -13275, -19431, + -17414, -27606, 13230, -4601, 9770, 4306, -7313, 15267, -6962, -1734, 27556, -9542, -14066, 15531, + 3924, -27731, 32487, -5968, 16897, 29661, 21663, -26540, 21128, 24058, 22227, -23003, -22293, 25805, + -10420, 18461, -25166, 1330, -5679, -11716, 29044, 1988, 23566, 16757, -330, 18468, -32525, -19217, + 4604, 28679, -24585, 21683, 11593, 5982, -13373, 11465, -15752, 12557, 6231, -32731, 8130, 1679, + 1426, 12219, -3641, 31507, 15032, 26521, 5633, -11448, 8880, -30566, -28864, -22336, 7649, -14557, + -4766, -28855, 10441, 4853, 2344, 21250, -30002, -12352, 10156, 4624, 10123, 7075, 6419, 22527, + 15285, 19635, 15123, 6221, -28113, -29943, 6080, 7290, -7700, 18579, -31427, 16161, 26872, 18858, + 1517, -24335, -994, -16666, 17637, -24340, -30725, -17534, 16097, 1235, 12941, -18774, 5202, 3548, + 29629, 8911, -20945, 18188, 24497, -11367, -15851, 28038, -25369, -10244, -32598, 30124, -30906, -15515, + -30067, -361, -22873, 12281, 4253, 10996, -24196, -19957, -26337, 29591, 7585, -6419, 17117, 6636, + -29163, 13987, 20905, 13096, 6315, 5326, 23569, 1653, 12374, -17167, -16072, 30978, -2819, 29162, + -27871, -21792, 8542, -21488, 29377, -22319, 6520, 25433, 14390, -2542, -2023, -23890, -11880, 21628, + 26665, 16633, 5069, -20972, -28454, 2791, -8206, 26239, -1428, 16394, -16614, 15352, 13097, -28082, + -1590, -7852, -16522, -31367, 17886, 26971, -8719, -17039, 30111, -5235, -25108, -26524, 31881, -23961, + 11268, 3703, 19864, -17773, -21992, -1671, -13778, 24180, 23858, -838, 23400, 31757, -24835, 28661, + 19387, 14619, 21749, 23862, 10080, 26567, 12370, -14804, -14120, -8551, -1337, 20355, 26041, -8576, + 30808, -4163, 28295, -5354, -27845, 16772, 17579, -26860, -11874, 303, -16772, -9467, -25084, 13128, + 11074, 17256, 20198, 5417, 20536, 15060, -5124, -11799, -23739, -11423, -4100, 27217, 19419, -27392, + -30419, -25209, 14935, -19449, 16064, -17110, -7272, 7302, 19979, -26185, -19208, -16363, 18125, -16633, + -17204, -14633, 23708, 31038, -13241, -23337, -25725, 15890, 24227, -20799, -8843, 28504, 28777, 1358, + -5140, -13720, -1840, 32391, 5890, -11692, -21002, -15476, -14591, -23974, 6794, 31480, -5167, 6599, + -23118, 12064, -24054, 7615, 3877, 14722, -29689, 27119, -30052, -4865, 13056, -23769, 17911, -17694, + -30119, -9958, 5788, 18482, 18225, 27822, 30244, 28478, -23635, -30974, 18241, -31174, -25304, -26728, + -18358, -21158, -25762, -11477, -20562, -28083, -6271, -29882, 15330, -30947, 25941, -27853, -22230, -30800, + -30633, 1359, -18205, 25991, 24339, 6582, -16834, -23334, -963, 21693, -14950, -28956, 6565, 6329, + 7929, -11374, 24359, -10429, 13725, -7924, -12923, 7350, -26579, 22401, 27767, -5622, -4826, 23216, + 3515, -29664, -10419, 14306, -7808, -3254, 12660, 1139, 14484, 3120, 6734, -12399, 11343, 17764, + 25166, -7737, -25766, -27758, 29295, -2446, -6577, -11963, -31502, 4389, -5191, 21700, 9068, -15718, + 21485, 22538, 31722, -14959, 9885, 6997, 25645, -12101, -7166, 9644, -14465, -23601, 12699, 27299, + 12717, -31401, 21471, 9469, 15271, 28259, -5004, 18379, -3876, 8286, -22128, -22797, -25124, -29874, + 25767, 23060, -12175, -14125, 24934, 3461, 21612, 26379, -22736, -4863, -22935, 28240, -17453, 415, + -18620, 31279, -13925, 17190, -7459, 21485, -30752, 27399, 20, -6608, 15139, 31047, 14239, -2124, + -12548, -23630, 2870, 28384, 29496, -2848, -10715, 13917, -32756, 2828, 8992, 22265, 1306, -32143, + -8029, -25576, -26535, -26729, 4532, 31206, 27381, 15030, 24257, 20434, -7171, 28924, 28396, -23859, + -18336, 19677, 16405, 7160, -26808, 32516, -30036, -32276, -16940, -23324, -23528, 2338, 3815, 22707, + -2886, -24862, 428, -30626, -22353, 7826, 31864, -18098, -24753, 22272, 25740, 21429, 3981, -15806, + 21998, 8655, 13575, -9811, -7676, -13353, -15113, -5535, -9030, -1834, 885, -22767, -3266, -15040, + 4392, -26212, -30527, -28582, -20113, -27436, -2131, -25239, 15449, -30407, 19871, -21395, -28706, 5753, + -16814, -19160, 29451, -5781, 2361, 22984, 6047, -1618, 5273, -29965, -17098, 10498, 24490, -5648, + -20440, 22665, 19951, -32087, -23604, 12041, -12042, 12006, -25996, 11604, 22402, -14962, 3263, -978, + 4008, 9134, -28893, 18191, 16283, 11290, -31068, 13707, -1186, 8238, -491, 4528, 20762, -17717, + 1070, -5055, -15682, -23486, -27295, 19719, 23548, 17380, -6039, 13851, -2224, 11708, 31497, -22238, + -16009, -27121, 20648, -12121, -22085, -28304, -26035, 25914, -24786, -3562, 21789, 21556, -28493, 10731, + 13687, 30545, 11096, 10529, -23674, 15013, 29792, 20213, 7771, -23400, 28058, -20670, -2406, -15921, + -16887, 15085, 10321, 17266, 8076, -3233, -16064, -1287, -24026, 7407, 28275, 18831, 26868, -3293, + 22797, 12966, -6119, -22365, -12542, -25757, 11162, 15689, -22730, 12694, -24668, -23941, 6491, -13543, + -26589, 29569, -30885, -11929, -1885, -12221, 26689, 28087, -2991, 28603, 24498, 3050, 23050, -22627, + -31090, -2837, 22452, 15232, 17983, 6056, 4338, -27587, -30818, -9590, 8957, 31543, 19648, 26006, + 15538, -7052, 9732, 6576, 17041, -22961, 12603, -21439, 27208, -13017, -4679, -19753, 15092, -16999, + -20107, -193, -30824, 13378, 8310, -8028, 25174, 5922, 18604, -10700, -15642, 30138, 13098, -1753, + -24851, -12813, 2621, 3254, 5991, 505, 30906, 14445, -2797, -31345, 13952, -1358, 28749, 16332, + 17014, -17027, 28184, -4178, 29321, -19207, 14747, 2144, 3789, 30798, -18156, 6179, -7344, -4109, + -19897, -24772, 14906, -30824, -2218, -16644, 16363, 14981, -29951, 3920, -2863, -1734, 16371, 31405, + 8329, -31048, -20168, -8841, -8139, -26046, -26820, 21867, 17089, -24195, 11965, 14972, -29013, 13179, + 29891, -26866, 13857, 23899, -1174, -28210, -1248, 27869, 26185, -19594, -18178, -9585, -9026, -12019, + 17016, 7386, 10075, -9800, 20405, 16723, 16071, 31096, -21805, -12677, -25516, -10171, 27118, 25643, + 19881, -18446, -1294, 22864, -20365, -30204, -13990, -7082, 25517, 24084, -28609, -3287, -28052, 13225, + -12746, 12245, 3622, 10925, -329, 3224, -1994, -32200, 22933, -5299, -23291, -6320, 3858, 17753, + -31216, -28835, 25028, 3055, 4103, 21051, 23144, 8337, 2606, 28882, -22019, 29600, 4751, 3757, + -18789, -16885, -645, -22267, 31127, 15161, 16577, -3070, 7417, 11669, -23356, -30393, 3825, 7714, + 17501, -14004, -10612, 13990, -7440, -2790, 5243, 12840, -9449, 21776, 601, -28508, -3498, -23639, + -16303, -30125, -30341, 19764, 7196, 28806, -31702, 17477, -4145, -22404, -1824, 28255, 13569, -7734, + -15720, -13237, -10023, 2590, -25267, -887, 5636, 9149, 15867, 6739, 2667, -32593, 13143, 22535, + -17373, 22493, -666, 28699, 6365, 23297, -29002, 12549, -27829, -6153, 12152, -10339, 13601, -15847, + -5341, 31524, -3008, 25062, 11226, -25595, 1799, 300, 15601, 5635, 9921, -14229, 8630, 12202, + 29104, -5838, -18885, 9439, -29852, 11027, 15545, 16188, -18139, 28964, 15646, 31815, -5989, 907, + -23447, -15289, 17508, 1732, -32514, 13669, -26491, 10515, -5725, 3225, -25497, 22574, 27432, -21591, + 6406, 18331, 23458, 18198, -24185, 23223, 6104, 23116, 16518, -31990, 24235, 28940, -17460, -6542, + 12634, 17506, 13902, 7207, -14081, 22043, 24513, -24831, 28507, 9120, 31953, 2053, -27033, 26639, + -15500, 26757, 863, -3931, -4541, 21430, -1544, 14109, -18009, 25722, 10837, -695, -15100, -26472, + 19737, 30165, 8597, -31009, 20731, 4574, 22610, 18531, -8752, 11979, 25051, -22483, 17931, -7234, + 3498, 8106, 30560, 9426, -26378, 1698, 24155, -22292, -26062, 30172, -27639, 8248, 4473, 9051, + 29687, -8980, -650, 18712, -21139, 11304, -17445, 22098, 27296, -3074, 25022, 24728, 16183, 4649, + 6929, -22948, -26332, 13639, 22563, -24710, -16432, -2311, 30190, -8391, -13220, 17495, -27036, -32397, + -5875, 9808, 17385, 1704, -6443, -13040, -2952, -17684, 30488, 29333, 9438, 18898, 31172, 14865, + -21437, -4479, -20933, 29703, 11352, 18978, -32365, 24292, 23275, 18150, 28084, -4124, 5283, 25483, + 32316, 22910, 32022, -29442, 11865, 2920, -4478, -1778, -18686, 17559, 19021, -8798, -12815, 13620, + -23883, 7439, -17636, -27860, 19486, 1634, 28501, -21568, 2385, 27218, -9380, 25148, -5530, 19279, + -2805, 16254, 10294, -21931, -14897, -20957, -440, -20146, -25305, -19798, 21207, 30736, 22720, 14103, + 17609, 20158, 21439, -514, 30620, 7374, 30756, 8592, -29082, 31100, -6845, 6857, -15428, 19180, + 3481, 25866, 24354, 20877, -19950, -1807, -30783, 27378, -6588, -25686, -15511, -12016, -18930, -21200, + -10845, -24292, 24712, 30430, 32206, -11031, 1658, 754, -24843, -17636, 5737, -6842, 30373, 16926, + -30456, 7777, 18030, 14675, -28527, -15104, -2527, 28306, 766, 22242, 22817, 4881, 17774, 16633, + -23005, 3779, -4182, 5831, -7285, -3876, 29122, -30728, -17345, 29999, -15371, 28831, -24356, 4731, + 3682, -6276, 15578, 26168, -5164, 25924, -24807, -27093, -30406, -16014, -23370, 19790, -22735, 23676, + -12302, -9183, -12002, 32313, -10371, 5331, 10344, -13119, 26063, -3835, -36, 8470, -1081, 26189, + -21809, 27618, -7021, -3112, 26369, -19096, 14612, -25177, -13855, 31065, 20420, 12433, -16989, -6177, + -12652, 27316, 16557, -20832, -17401, 2490, 10616, -7202, 14978, 2012, 7828, 27623, -9642, -22424, + -11501, 15173, -21231, -13446, -1475, 32453, 17409, 10089, 24777, -25120, 8664, -1530, -17925, 16661, + 2740, 24557, -11254, -21590, -5984, -15802, 27403, -14888, 20172, -18883, 554, -13322, 2523, 26762, + -18717, -5118, -18937, 12527, -26222, -5351, 31639, -21599, -5720, 31300, -19565, 23481, 15364, 27825, + 3756, -26744, 4697, 24795, 16402, -10483, -13816, -5382, 15967, 27528, 13005, 15071, -5872, -20687, + -19590, -16450, -11194, 25300, -28066, -20929, 19905, 14860, 23770, 3223, 11654, -31635, -6622, -2580, + -940, 32614, 6760, 14158, 5448, -1841, -31949, 17885, 10273, 17794, 21152, -1268, 2336, 23085, + -2443, -3211, 11707, -17442, 6478, 29882, 22487, 12177, -15719, -9055, -4454, 9591, 7669, -1739, + 18423, -30371, 20430, 4631, -8243, 1214, 7887, -28112, -19646, 4139, -18811, -129, 12008, 15625, + -32299, -24606, -28218, -27073, -27122, -940, -30430, 12387, 15669, -7147, 32591, -5652, 15768, 3842, + -23418, 21414, -16551, 670, -19225, 25657, 26605, 17323, 32442, 28808, 7272, 15115, -15123, -27263, + -29963, 31768, -16521, 17515, -26806, -24498, 8575, -4588, 30017, -4181, 11544, 5677, -21674, -11195, + -24344, 285, 239, 10798, -17463, -3009, -9388, -16177, -14104, -12414, 12570, -26343, 4984, -22378, + 680, -28434, -20384, 30766, 31904, -20960, -30933, -10211, 27940, -24797, 26540, -22790, -8657, -31210, + 8559, 2942, 21670, 31386, -31799, 26192, -11937, -20788, -6417, -18885, 5578, 32174, 29863, -28760, + -11105, 13214, 20132, 21357, -24383, 12827, 6757, -9731, 29160, -12107, 3499, 22067, 19837, -4079, + 1959, 27661, 22910, 23532, 23010, 1387, -25853, -8995, -14272, 25398, -10998, 20546, -30811, -5065, + -23163, 9473, -103, 941, 13211, -18116, -24019, 16738, 26321, 1322, -5430, 25749, 23376, 8626, + 19806, 27504, 29145, 13891, -15905, 7884, 680, -7728, 32670, 6990, -18296, 4475, -30092, -1573, + 26563, 29171, -20248, 4819, -15546, 1694, -29102, 5838, -29102, -10615, 16076, 1119, -28561, -20787, + 350, 25124, -29807, 978, 20872, 8865, 27914, -15894, -30254, -4516, 7651, 28905, -16567, -24082, + 30346, -23924, 26134, 19832, 9186, -2604, -14414, 10080, 19043, -20548, 23996, -21213, 24221, 32202, + 7351, -19979, 23065, -27080, 1053, 29640, -8033, -25691, 22776, -8157, 838, 2851, 8574, 3210, + 6879, 3225, -23935, 16027, 5483, -7047, -28740, 25191, 977, 12503, -11187, 30233, 11291, 24641, + -15422, 26617, -5839, 12977, 13253, -31798, -7, -22924, 13655, 7401, -11883, -11406, 19093, -7933, + 28187, -7075, 17524, -16691, 2334, 20758, -26024, -17402, -23600, 14642, -3228, 26895, 18197, 26409, + 5117, -31812, 15125, -13691, -16993, 7837, 387, 9711, 4866, -12811, 19362, 29615, -28273, -24283, + 17132, -8441, 6976, 28758, 28984, -22282, 16310, 28770, 2861, 20961, -26970, -22144, -3399, 32663, + -742, -32415, -21277, -13782, 26250, -3058, 10931, -2988, 23177, -13688, 5628, -30785, 16400, -21626, + 26697, -16098, -5785, -12746, -28619, 9780, -3667, 31536, 15180, 26390, -14453, 16214, -12211, -19911, + 19556, 1667, 24244, 3917, -20175, -17629, 29152, -25127, 21605, 27556, -905, -13070, -24326, 28174, + -6870, -15182, -7145, 9787, 2761, -16474, 749, 1813, 13764, 121, 17128, -28200, -2181, -32183, + 30022, -30366, -2932, 21369, 30071, -30419, 3325, -28805, -32400, 18458, 12529, -23185, -18857, 2525, + -20350, -31292, 28214, -12562, -16765, -2880, 11532, -23286, 2387, -22988, 14751, 429, -31379, -14999, + -21161, -7909, 21106, -3323, -14814, -23912, -1439, 22550, -4078, -16035, -30431, -29321, -18887, 19642, + -25061, 18059, 7488, -13348, -19776, 13176, -25728, 9968, 31379, 20880, -16785, -18905, -28232, 5450, + 11673, 7829, 19671, 32710, -959, -21569, -20406, 27707, 2449, 23657, -11624, -16984, 22280, 24776, + 2765, 27849, 3779, -14010, 22832, 29295, -6749, -20436, -30939, 32655, -13798, 19383, 12139, 21927, + 6229, -6762, 4632, -2170, -24424, 26698, -15505, -2799, -28861, -13158, 18495, 20660, 20710, -11665, + 24386, -4409, 9773, -27036, -16447, 9364, -19228, 29796, -29821, 18452, -3681, -18721, -18854, -21117, + -20686, 29859, 5633, -2528, -4796, -14833, -23210, -3114, -23584, -25336, -27503, -26473, 18653, -11200, + -13792, 24953, 7168, -23057, -7103, -18242, -30324, 19673, 16215, -25308, 1190, -16631, -27365, 23188, + -22148, 20889, 18616, 13991, -28193, 16141, 32706, -2683, -28809, 17858, -13816, 1893, 26279, -16209, + -3560, -2307, -15785, -88, -3196, -28714, 8231, 2202, -3908, -12471, -3332, -14675, 30815, 6181, + 11097, 14629, 21815, 4302, -16850, 31537, -8740, 20469, 25854, 25582, 24443, -10457, -1049, -16710, + 962, -29794, 31330, 11848, 32593, 16944, 20225, 12636, 27133, -17269, -17355, 15188, 16379, -19546, + 14037, -10342, -7881, -16287, 10602, -27399, -2982, -26140, -576, 10641, 15659, -14824, -25920, -24359, + -17313, -7343, 32447, 31069, -21273, 13085, 11864, 2771, -29677, -7942, -25280, 10546, 18680, 25816, + 14672, -25130, -17878, -27430, -32583, -416, 3034, -22919, 25713, -16621, 12072, 22957, -24183, 11298, + -31215, -30247, 29141, -27400, 25818, -15873, -22217, -13391, -21745, -19013, -23504, -10496, -22381, -10304, + -28830, -16432, 14703, 15407, -823, 20494, -10824, -2629, -4906, -27205, 8035, -20041, 23313, 2528, + -15829, -14813, 5185, -13900, 26138, -7851, -18587, 251, -6618, 12906, 6126, 12366, -22577, 16816, + 15566, -11914, -17422, 1791, 28000, 19037, -32339, -22915, -19160, -30878, -23932, -30126, -18420, 5270, + 22015, -12636, 10835, 9127, -32414, -22305, -29800, -22782, 1747, -18546, -27604, 516, -20338, -27862, + -5081, -1167, 30199, 24449, -10457, 8487, -19703, -3391, 5618, 2189, 8890, -15769, -3433, 28418, + -5565, 20235, 13300, 22600, -30993, -11132, 16768, 6540, 28775, -9243, -26382, 16068, 12533, -26288, + 14836, -29442, -4237, 16197, -20526, 15691, 2616, -9228, 8591, 27919, -16622, 8625, 19509, 7751, + 1408, 7697, 32380, -32275, -6405, 15266, -3753, 26381, 7925, 14144, 16606, 26514, -7890, 15289, + -18569, -15959, -29326, -13176, -20093, 22556, -26740, -27835, 22070, -19201, -4078, -3000, -13178, -659, + 19743, 27631, -5786, 3777, 9161, -17705, 21947, -1872, -26491, -28540, -14779, -21251, 30378, -9624, + -19316, -13390, 13360, 29420, -21841, 17617, -19046, -9018, -601, 31697, 32407, -2255, -4780, -21985, + 31956, 18476, -18436, 13903, -9826, -26266, -1680, 10170, 6911, 4326, -9721, 25, -12681, 13110, + -4204, -11873, 17039, 27131, -28900, 19176, 15530, -12240, -30537, 7227, 7634, -27370, 15644, 3042, + -17475, 30060, -7661, 29685, -19439, 31639, 2433, -5827, -6260, 12538, 2993, -31155, 3276, 29613, + 10127, -1161, 374, 29907, -17706, -16203, 15422, 23526, 19092, -29570, 26104, 16817, -6667, -31216, + 21214, -18254, 26317, -9969, -30323, -14554, -11313, -13452, 17570, 22078, 14385, -28971, -29730, 12791, + 26134, 26246, 5362, -8003, 30723, 3962, -4144, -26239, -2048, -32623, 19908, 900, 21231, 18242, + 13204, 17159, -1989, -32437, -13709, -14727, 3507, 5651, 9968, -1406, 11800, 3094, 29296, -10521, + 25821, 30345, -17261, -19073, 2236, -8944, 25639, 18073, 9054, 734, 28445, 28320, -32177, -10234, + -13561, 14, -20561, 14787, 8508, -6238, -25687, 788, 25329, 18961, 31265, -25408, -25867, 15065, + -402, -21875, -20596, -27776, 17046, -26816, -26711, -9576, 8801, -12064, 4619, -2426, 19171, 26455, + 12662, -32481, -6306, 4068, 10293, -3916, 5440, 3581, -31964, 1291, -3666, -29682, 11961, 5759, + 26935, -9150, 24566, -8485, -27750, -10672, -29007, -14176, -11528, -21304, 1829, 19916, -9826, 3907, + -11995, -25866, -1947, -7584, 17418, 11477, 8916, 6776, -5816, 11508, -31510, -10618, 3754, 29510, + -30572, -15152, -7778, 10857, -5683, 4166, -11837, -24446, 29710, 9734, 8801, -27320, 19858, 13634, + 26836, -20204, 8847, -29290, 12166, -10648, 8155, -7021, -16655, -16964, -19694, 25203, 13374, -17131, + -28337, -888, -9496, -25194, -26478, -2650, 30542, -8115, -22229, -10708, -6692, -30780, -9511, 16804, + -9598, 2648, -29571, -31724, 16837, -16897, 4052, 26487, 13041, -8852, -11340, 6923, 10688, 12366, + 2877, 742, 12609, 9533, -6075, 31157, -30869, 23523, -23997, -24512, 17956, 6644, -2540, 19170, + 6378, 24036, 19467, -11606, 27292, -25348, 24394, -25593, 1414, 20004, -28656, 31137, 8940, 8328, + 4917, -1804, 26541, 17170, -20457, -9568, 14922, -12349, 4784, 25129, -12256, 6281, 15332, 28837, + 15039, -32738, -19772, -409, -28143, -22967, 1988, -24003, 19138, 3408, 30505, 25632, 32703, -19, + -18110, 30564, 25631, 25395, 15957, 26350, 13977, 28328, 4887, -5357, 4742, -8844, -3097, -18303, + -25749, -23025, 23897, 6379, 29448, -20740, 28407, -16149, 17414, -28852, -18977, -8150, 7510, -1914, + 21204, 12071, -12681, 4056, -440, 11906, -7923, 23180, -8739, -17701, -5542, -14995, -10669, -19014, + -5225, 25295, -22009, -18465, 16715, 954, 32133, -23786, 18690, -23083, 13991, 21444, 5460, -2572, + -25623, 3559, -7797, -8069, 31166, 1241, 20647, 6165, -32458, -9801, -28753, -15705, -15446, -27396, + -2979, 2855, 32260, 29586, -32481, -15097, -15497, 27726, -2489, 15742, -19084, 28450, -3479, 28557, + 12400, -28325, 15950, 411, -10035, 4538, -31612, 22056, -31284, -14180, 28426, 76, 14249, -19794, + -10470, -16758, 17004, -16587, 31989, -22551, 2699, -20841, 23963, 16813, -3240, 5640, 21506, 19216, + -19911, 28469, 21944, 27045, 4844, 1157, -13864, -24845, 10188, 19398, 16379, 6658, 7697, 6538, + -21904, -10381, 3104, -8799, 12660, -17383, 23394, -25895, -7458, -26951, 8487, 14697, 19621, -23038, + 6595, 31245, -16014, 492, 27119, -11495, 4434, -27117, 23189, 15206, -12222, 32447, 5780, -13116, + 8729, 23272, 14034, -11825, -457, -29650, -7965, 21440, -1957, 20226, 6566, 24686, -16353, -18646, + 25493, 29166, 25947, 6830, 32463, -29211, -32423, -6695, 7946, -18633, 27448, 14077, 4755, 29006, + -6854, 557, -12044, 2473, 19228, 6692, -18876, -24752, 14710, 16142, -17496, 27560, -264, 27587, + 10305, 6279, 27661, -30546, 31693, 4664, -22693, 8362, -11854, 3838, -20534, -28093, 25155, 31544, + -11154, 110, 6121, 7048, 26611, -12822, -4893, 11340, 28605, -24894, -20316, -21941, 28692, 2398, + -30785, 5486, 12740, -6305, -32701, -9626, -21821, 11876, -14992, 17380, 19427, 24547, -15969, 17172, + 13457, 1833, 27182, 6331, -8293, -8109, -32440, -25687, -19096, -17911, -5249, -24190, -5085, 10304, + 3121, 22238, 29118, 23075, -5955, 20396, -28846, 23350, 16599, -32388, 29702, -12634, 17425, -15965, + 18244, 8301, -27480, -30454, -25697, 19468, -9042, -13699, 16625, 8521, -213, -19511, -25025, -17396, + -1462, -1011, 4973, 4639, -31028, -10800, 12966, -7211, -26514, 15856, -11993, 14059, 15516, 944, + 9835, -31513, 10815, -21861, -21799, 27363, 19414, 6407, -25466, -10939, -9367, 25494, -13012, -13790, + 11346, 27024, 16978, 21726, 8641, -32384, 16790, -8833, 12141, -28986, 18788, -11338, 13738, -16776, + 22927, -20659, 6068, -9259, -29230, -9462, 24234, -15361, 19999, 22407, 23364, -19098, -1420, 8429, + 25721, -2676, -22875, -6626, 5708, -22693, 32380, -20690, 3775, -28122, 14071, 742, -18259, 32486, + 27462, 15290, 26924, 30401, 9977, 15775, -11969, -3356, 2350, 27224, 16598, 15102, -1453, -28741, + 29440, 11487, 5363, 9625, 8663, 5648, 1852, -18694, 2649, -13719, 14049, -28655, 17273, -13875, + 23203, 10567, -11694, -19187, 8829, -3961, 25159, 13538, -25698, 1911, -16307, -8871, 17777, -29243, + -29227, 28456, -22091, 21537, 7903, 8985, -16746, 17592, 25318, -9815, 8080, -6839, -19719, 17940, + -470, 15759, 18282, 9690, 28961, 8221, -25495, -15401, -24141, -16365, 25065, 23993, -4186, -29013, + 10192, -26289, 20147, 3037, -3364, -2301, -7248, -30405, 13518, -5219, 32223, 18533, 27549, -5283, + 19547, -22353, 2071, -19560, -24952, -27101, 17498, 1755, 2890, 19544, -20839, -3312, 9382, 3387, + 25327, -28933, 7890, 10679, 20083, -24342, 4228, 9137, 2876, -12424, -31751, -10788, 14878, -7233, + -18385, -6614, 21596, 9269, -31491, -19564, -16110, 9306, -17150, 12098, -30544, -8734, -24874, 2836, + 6652, -3245, -16072, 7109, -11215, 9960, -721, 22294, -16231, -5008, -6168, -4952, 28924, 9056, + -20329, -4414, 7721, -3445, 8182, 29157, 5010, -32061, -16734, 12782, -30080, 27968, 23851, 20907, + -17735, -30260, -3903, -1943, -15018, -22705, -10221, 28188, 27531, 26455, -17381, 1443, 2204, 6080, + -3169, -27654, 8085, 9886, 14148, 18480, 32453, 9716, -5667, -10437, -5909, -1129, 11791, 1213, + -5998, 13798, -3831, -17429, 32742, 3314, -3703, -4432, 22482, 30399, -2585, 31588, -27153, 30220, + 31375, 25336, -7223, -19692, 31171, 27238, 6457, -31060, 7433, 28488, 21781, 26217, 22260, 25437, + 6405, -6445, -31099, -24452, -12293, -5433, -15128, -3635, -17148, 3791, -7413, -13240, 25328, 10375, + -29036, 14367, 3673, 2036, 8971, 13003, 10683, -20760, -26967, -10957, -22588, -27900, 21000, -1982, + 19514, 17024, -16215, -23185, 23437, 16287, -18705, -12412, 31707, -2429, -15372, -24483, -832, -13338, + 18756, 23403, -21284, -24926, 9469, -8801, 22697, 5230, -4134, -15587, 31406, 27103, 17889, 20832, + 18692, -3521, 5104, 12605, 15318, 13660, -20505, 27151, -9794, -12986, 102, 31777, -717, 1074, + -7337, 23086, 10482, 22259, -11167, 19075, 14997, 18805, -20769, 15496, -6286, 11103, -28638, 5048, + -21186, -1820, -30072, 21197, 22282, 11792, 2155, -1719, 13055, -22359, -18309, 12368, -17937, 13063, + -30798, 19092, -21304, -1716, 12752, 15599, -17616, -14833, 8215, 24969, 5066, 28526, -13967, -23374, + 23090, -13479, -11885, 6738, -1930, 2325, 31976, -3423, 7636, 15010, 2650, -17972, -3767, 7748, + -5753, 24509, -2532, 20098, -7673, -283, 1780, -29033, 14755, 12547, 24153, 5107, -26702, 28288, + 23449, 93, 15944, -21653, 5229, -5130, 27408, 11028, -24943, 32595, 23427, 29626, 673, -20241, + -15425, -27824, 8198, -30024, 12657, 5007, -20041, 22145, 23663, 24101, 30356, 1283, -10372, -21168, + 24536, 21073, 17953, -3529, 11784, -388, -7053, -3224, 19819, -31609, -14234, 30717, -2823, -19453, + 24404, 7819, -3923, 20086, 18787, -11099, -11051, 5534, 13518, -5307, 28235, -18229, -31444, 6223, + 24113, -4637, -16568, 17682, 6880, -14249, -30658, 20032, -13883, -5706, 4168, 13862, 1309, 26940, + 9563, 11163, 23617, 31536, -265, -21707, 15776, -25761, 30127, 5171, 1865, -5153, 7172, 31608, + 28672, -169, 5298, 8533, 30664, -21488, 31250, 26590, 15281, 19913, 27005, -2324, 10497, 31519, + 30993, 4306, -25317, -18539, 6442, -21898, -29001, -11622, -6844, -9765, -26945, 11548, 32303, -14469, + 26053, -2278, -32660, -32035, -30617, 6191, -29433, -3349, 20082, 28521, 11523, -26820, 13547, 18909, + -14216, 28515, -30462, 2526, 1873, -19755, -25260, -9781, -2073, -19813, 3923, 30831, 23565, 25988, + -18948, -6795, 17830, -22901, -6399, -9359, -15495, 15445, -24039, 22153, 3730, 14461, 12952, -4950, + 12049, 11839, -30303, -15560, -31466, 15701, -20324, -9529, -28653, -19914, 1320, 13994, -19127, -2986, + -7551, -30585, -24707, -4537, -3358, 2173, -913, -28408, -26185, 24581, -16329, 24934, -22140, 5134, + 19818, -30236, -22809, -23608, 17807, 19657, -6187, 9595, 29307, -9511, -26541, 13592, 31764, 30560, + -9587, 11613, 15026, -31752, -22656, 32388, -213, 22043, 2091, 2690, 31293, -21062, 26755, 23534, + -8196, 32665, -6841, 30175, -5950, -19059, -18258, 31878, -3180, 30347, -2854, -12119, -3977, 21318, + 6528, 6350, 21753, 7546, 12649, -12985, -23311, 30425, 4069, -3732, 15188, -30859, 19324, 23910, + 21431, -8893, 25228, -9233, 3243, -28421, -18112, -17526, 32364, -31776, 11001, 11686, -16072, 14946, + 18524, 26161, 19241, -22152, 32537, -29629, 25538, 18647, 16478, 8868, 6767, -13052, 12257, -24147, + -31967, -23746, -5257, -13426, -22637, -23749, 2058, -18846, -10508, 23281, -23228, 1331, 2622, 2095, + -25932, 1391, 11862, -3839, 9984, 13089, 17050, 14186, 8372, -7096, 32315, 6650, 30314, 16621, + -4253, -22485, 28683, -1090, -16752, -8757, -15898, 5864, -11851, -23916, 15297, 29280, -130, -19373, + 17012, -31053, 6744, 13897, 13696, -7886, 12374, -22029, -1664, -21875, -63, -10399, -14579, 18959, + 7220, -12329, 18513, -8803, 263, -19113, 19327, 19062, 29526, -30871, -7168, 25712, 16759, 2731, + -5963, 27223, -13523, -26009, 26881, 13873, 11009, 19855, 27180, 22760, 20381, 32195, -31071, 16994, + 14861, -20640, -3564, -21113, 3714, 2330, -6144, -7588, 2644, 15031, -6879, -3996, -15687, -21834, + -32229, 29237, -26804, 6864, -2197, -3629, 9221, -25975, 12551, -28136, 16262, -12040, -10369, 27166, + -25906, 28128, 7373, 20524, -19095, -32241, 10683, 3004, -4822, -597, -26470, 11527, 7956, 21964, + 30544, -17976, 21516, -13575, -22016, 13633, -21752, 30272, 25628, -4605, 6681, -21067, -15565, -19543, + 16968, 7341, 27872, -28445, -7700, -19939, -18464, -24981, -5091, 31715, 7312, 10892, -10445, -15068, + 31140, -26756, 12572, 16851, -29779, -19378, -24207, 17673, 7372, -7506, -7091, -18233, 26026, -31154, + -13946, -1925, -30595, -12384, 6556, 29186, -19236, -581, 23029, -23276, -28182, 1509, -31582, -18964, + 61, 15422, 10751, -6324, -8676, -18374, -21454, 2831, 26272, 6062, 28744, -14280, 7863, -13873, + -25186, -9188, -24368, 11728, -31195, 11416, -6578, -6962, -20114, -2801, -1801, -4463, -6121, -29092, + -11689, 25470, -11857, -21895, 15390, 29714, 8573, 21219, -234, -25602, -14265, 10162, -28393, -8165, + -8302, -131, 17925, 19176, -9779, -15233, -18411, 5652, -21648, 20067, 25384, 15412, -10076, 695, + 836, 19191, 2120, -16441, 1289, 2142, -1015, 19537, 2911, 25663, -24331, 23722, 26329, 21503, + -27127, -28946, 2528, -20889, 16776, 29552, 16650, -14113, 14671, 24689, 22707, 15568, -19849, 27496, + -15839, 23271, 12139, 3705, -24931, 1197, 28083, -22050, 12462, 1878, 9437, 20404, 3474, -11669, + -12075, 934, -7567, -22581, 16293, -11656, 27891, -5973, 1685, 21219, -29901, 29333, 21230, -12603, + -15567, 10940, -7166, 982, -2044, -2383, -5616, 18525, 24349, -1244, 676, -30520, 27870, -26305, + 8576, -13594, 11559, -14319, 20584, -19583, 11704, 13241, -5446, -23386, 16453, -27949, 1119, -12065, + -27968, -24771, -23778, 1627, 1670, -3604, 32514, 29900, -3431, 28151, -14593, 6598, 21206, -842, + 32186, -25082, -21526, 23397, -2899, -19507, 23603, -1374, 14680, -31844, 2459, -13421, 31984, 2871, + -21393, -22855, 2152, -12926, -8633, -2030, -27009, -11788, 7419, -27008, -15853, -29714, 5930, 22429, + 4696, -4894, -9369, 14308, -6061, -18894, -21212, 10178, 15974, 17378, -19939, 30548, -3183, 16980, + 32546, -16448, 15478, -21901, 31076, -1595, 8230, 8854, 2781, 18535, -13368, 26341, 24950, 9332, + -11454, -8235, -30532, 18504, 11521, 19204, -966, 9510, -17034, 23602, 32094, 12427, -1214, -17870, + 22675, 4632, -16102, -2271, 3181, 11352, 15248, -21513, -13362, -17823, -17851, -12577, -7159, -4388, + -9327, 16338, 16179, -9412, 1023, 6680, 14823, 21361, 48, 32759, -9502, -1437, 21496, -14694, + -22120, 17079, 18016, -16270, -12556, -32753, -11977, -16607, -866, -6433, -6065, -25202, -2217, -12709, + 14363, -4086, 5522, -19653, 22133, 26820, -16910, 12620, -19525, 31123, 7454, -226, 13420, 29516, + 8459, -30018, 31810, -16809, -23403, -32660, 3171, 25141, 9112, 25910, 26969, 17669, 25783, 14173, + 13326, -31747, 28241, -12919, 32010, -24338, -27233, -32576, -20191, 13444, 19615, 5208, 31603, -28564, + 8711, 1063, 10395, -5104, -22499, -31342, 22163, -5756, -29782, -27322, 7428, 32622, 16500, -4250, + 11465, -10467, -31033, 16945, 27948, -28059, -12071, 4911, -27351, 27955, -32431, -5148, 4920, -22983, + -23179, -12909, 30112, -29721, -15952, -21339, -8709, 30995, 894, -7238, 5913, -12408, -23215, -29471, + -12752, -8994, -27368, -28812, -31600, 18939, -24220, 18081, 22223, -32459, -8814, -28150, 3931, -6958, + -18837, -2745, -20986, 13516, 16595, 13071, 24565, -26777, 11785, 30531, -163, 28376, 25499, 19281, + -21695, -28483, 22643, 21630, -5130, 650, -26464, -76, -5974, -23336, -22180, 26227, 32539, -6339, + -26073, 9207, -9630, 6517, 5979, 4431, -10231, 32038, -20089, -23022, 698, 24394, 13288, 18081, + -13647, 28246, 7322, 6029, 6945, -4860, -16250, 30403, -2371, 14683, 9384, -7692, -26216, 18676, + -24406, 14459, -7118, 31967, -16750, 29263, 22630, -32495, 2641, -15193, 3734, -17117, -26355, -13452, + 6200, 21524, -4836, 24685, 65, 5661, -9444, -249, -23735, -21689, 14023, 12109, -32260, 14511, + 22067, 17270, 2230, -26101, -20037, 30924, -15413, 2242, -8230, 10201, 10726, 1958, -22507, -6413, + 26461, -25466, -311, 11911, -22865, 26546, -12117, 2194, -27339, -3388, 24685, 9678, -28935, -2248, + -1076, -15306, -14743, -1212, -13293, 16332, -17441, -27511, 21062, 6658, -7039, 4045, 31193, 21951, + -26971, -27955, 21148, -11888, -1673, 30676, 14604, -17044, -24548, 23325, -18115, -11718, -1049, 14710, + -10679, -2825, 12095, 23523, -30555, -12195, -31002, -10804, 8984, 14630, -24657, -19127, 14522, -28850, + -14461, -20244, 29916, 18873, 225, 15870, 16607, -27251, 5721, 17997, -6891, -10064, 22748, -6035, + -5387, 2460, -12631, 20496, -20328, -29858, 1295, 28900, 10261, 10688, -11586, -24215, 19789, 1607, + -18955, -11454, 9595, 32506, -24012, -15516, -31282, 25617, -30545, -11948, 18452, 22297, -30308, 22410, + -534, -22415, -769, -25905, -6409, -11039, 12474, 10609, 11253, 28188, -16904, -23612, 15504, -18997, + 28539, 25028, -8580, 20989, 11618, -11915, -18528, 6641, -28122, -20601, -32667, 31914, 3155, 32296, + -7351, 29947, -12252, -20126, -23235, -30613, -22438, 6330, 21221, -1142, 19922, 29210, 11043, 6730, + 6750, 24688, 18607, 9953, -19904, 32259, 26430, 30248, -27624, -1587, 3732, -12602, -23767, -27464, + -17123, 22544, 19228, -17788, 2308, 13822, -10688, 3053, -20232, -7896, 22379, -1104, -8429, -16751, + -31394, 2574, -32026, 17301, 17130, 12619, 19539, 7247, -27044, -6187, -20331, -3757, 10535, 10003, + -19254, 32132, -1051, 28129, 32387, -4581, -3285, 24211, 27144, 697, 14616, 10194, -31270, 4219, + -31052, -23667, 3098, -29025, 3505, -15901, -1246, 2806, -25062, -11903, 9494, 6230, -21622, 346, + 3911, -13889, -25221, -4677, 25165, 652, -3045, -19528, 25841, -26255, -5740, -11639, 19371, 20113, + -1345, 4421, 24706, -5700, -8761, 30632, 26491, 25867, 19077, -20741, -5789, 4658, -22666, -16429, + 12902, 1365, 31966, -20730, 23353, -20459, 29103, -21194, 23111, -16666, 14146, -3633, -20098, -19139, + 5505, 5788, 22942, 18502, 16422, -13715, -14237, 20081, 7566, -14750, -28049, 7126, 19153, 31360, + -26507, 1497, 12183, -7965, -6094, 11706, 3624, -2500, 3060, 14339, -27633, 27448, -29764, -973, + 7571, 10182, -29550, -7250, 31068, 30377, 11442, -12640, -14646, -5648, 29775, 31396, -27561, -2390, + 27392, 797, 30092, 4239, -14590, 28787, -5824, -23758, -6781, -4172, 27454, -21769, -27743, -24027, + 31175, -12451, 30715, 2563, 31888, 25820, -30884, -25832, 26113, -3877, -24071, 20838, -10454, -7575, + -2740, -24632, -8833, -14629, 1991, 14039, -14207, 22678, -27399, -17209, -9666, -29953, -30886, 16583, + 455, -23003, 5615, 3606, -16874, 15709, 24238, 9647, 13197, -18167, -9458, 30494, 31028, -18980, + -3227, 20399, -20421, -24129}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output.h new file mode 100644 index 00000000..1bcffb9f --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output.h @@ -0,0 +1,11 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_1_output[40] = {-2914, 4439, -4370, 5670, -6986, 8687, 5408, 3672, 9277, 3833, + -10558, -5418, -1141, 8234, -7433, 12796, -1718, -15387, -1487, -9116, + -494, 7745, -3466, -17023, -113, -1152, 9923, 10728, 2564, -20906, + 12966, 516, -1007, 11569, 2120, 19879, 2796, 3592, 14052, 5585}; + +const int16_t *const int16xint8xint32_1_output_ref = int16xint8xint32_1_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output_multiplier.h new file mode 100644 index 00000000..50afddda --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output_multiplier.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_1_output_multiplier[4] = {1440275384, 1440290207, 1440316274, 1440134994}; + +const int32_t *const int16xint8xint32_1_output_mult = int16xint8xint32_1_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output_shift.h new file mode 100644 index 00000000..cbf0181e --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_1_output_shift[4] = {-12, -12, -12, -12}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/test_data.h new file mode 100644 index 00000000..33835748 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/test_data.h @@ -0,0 +1,7 @@ +#include "bias.h" +#include "config_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/weights.h new file mode 100644 index 00000000..a437d75f --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_1/weights.h @@ -0,0 +1,423 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8xint32_1_weights[7920] = { + -36, -72, 104, -26, 58, -26, -33, -50, -62, 88, -13, 65, -60, 16, -83, -37, -33, 116, -82, + -62, 25, -49, 88, -92, -106, -112, 50, -59, 46, 73, -109, 52, -7, 110, 67, -16, 4, 55, + 96, -56, 125, -87, -17, 109, -45, 93, 63, -100, -102, -27, -63, -21, 9, 126, 54, 62, -111, + -107, -21, -40, 35, -2, -111, -71, 68, 120, 88, 91, -114, -109, 123, -33, -51, -17, -93, 19, + -25, -121, 98, 98, 103, -53, 63, 21, 108, 122, -56, 12, 43, -78, 44, -3, 25, -77, 13, + -16, -50, -58, -26, -104, 48, 101, -21, 83, 30, -20, 8, -124, -75, -59, 84, 41, -54, 82, + 34, -102, -99, 88, 101, 109, 39, -28, -85, -103, -7, 10, 69, -103, 87, -117, -65, 57, 49, + -33, -81, 25, 124, -118, 57, 90, 52, -83, 34, -86, 44, 122, 64, -90, 113, -18, -2, -112, + 120, -75, -109, 107, -91, 62, 1, 7, -102, 84, -94, 89, 10, 13, -91, 67, -48, -15, 92, + -50, 111, -94, 75, -48, -8, 8, 6, 16, -34, -17, 102, 97, 111, -47, -124, -89, 66, -14, + -41, 82, 6, 89, 106, -22, 85, -90, 61, -120, -54, 125, 39, 76, 8, -3, -51, 104, -124, + -28, 55, -85, 90, 96, 40, -6, 62, -109, 30, 34, 60, -118, -34, -30, 26, -126, -121, -53, + 35, 27, 56, -15, -84, 24, 82, 38, -95, -121, -1, -87, 14, -66, 106, 17, 15, 98, 96, + 74, -8, -75, 119, 37, -114, 26, -123, 19, 67, -48, -65, -120, 37, -121, 22, 64, 37, -58, + 61, -30, -114, -57, 4, 64, 46, 84, 22, -81, -55, 107, 67, 43, 99, -25, 3, 3, 97, + 69, 41, 29, -7, -26, -98, 99, -119, 15, 42, -85, -54, -96, 42, -124, 21, 104, -18, 84, + -88, -118, -73, -41, -71, -117, 37, -121, -85, -75, -56, 101, -96, 53, -100, 87, 87, -6, 23, + 83, 86, 44, 1, -118, 12, -84, -51, -113, 99, 95, 51, -70, 3, -80, 1, -47, -54, 126, + 102, -20, -22, -110, -42, -118, 13, 1, -65, 19, -18, 98, 19, 119, -45, 45, -120, -90, -112, + -24, -61, 13, -76, 28, 22, -30, -85, -20, -99, -60, 16, 77, -127, 24, -72, -1, 65, 74, + 126, 62, -61, -116, -13, 46, -20, -84, 103, 40, -28, 9, 71, -81, 7, 3, 65, 86, -51, + -2, -18, 60, -30, 76, -109, 108, 27, 4, -61, 27, -118, -90, -2, -107, -7, -61, 41, -122, + 28, 14, 10, -8, 124, 94, -76, -59, 91, -11, 111, -126, -116, 23, 83, 107, -60, 51, 71, + -25, 111, -89, 73, 61, 13, -93, 44, -79, 73, 11, 47, 84, -40, 67, -57, -96, 63, 88, + 47, -126, -88, 9, 6, 42, -124, -22, -82, -84, -65, 56, -114, 75, -116, 39, -94, 81, 82, + -80, 50, 4, -96, -39, 15, 85, 23, 81, -109, -36, -115, -122, -47, 115, 36, 89, -71, -109, + -77, 27, 17, -85, 24, 73, 14, 111, -23, 11, -41, -23, -118, 120, -78, -107, -27, 78, -30, + 15, 89, 85, 104, -119, -8, 64, 73, -2, -82, 82, 95, -89, 81, 28, 68, 40, 47, 57, + 114, -104, 40, 18, 91, -39, 35, -30, 29, 114, -87, -10, -40, -101, 40, 11, -70, 110, 44, + 47, -119, -27, 18, -101, 104, -12, 87, -124, 105, 76, 36, 93, 27, 16, -68, 57, 107, 84, + -51, -95, -58, 124, -61, -69, -78, 18, -72, 40, 80, -38, 87, -8, -100, 70, 99, 19, 118, + -63, -58, 52, -123, -109, 33, -107, -92, -122, -30, 67, 54, -113, 79, 30, -123, 114, 93, 70, + -97, 66, -108, -16, -26, 70, -28, -14, 117, 107, 40, 80, 100, 91, 23, 103, -33, -21, 126, + 6, 5, 97, 88, -49, -121, 121, -108, 23, 14, -78, 17, -100, -70, -24, 15, 52, -74, 24, + -48, -39, 45, -75, 8, 72, 57, 18, -6, -41, 113, 74, -61, 112, 111, -71, 115, 107, 116, + 102, -13, -78, -72, 47, -38, -42, -3, -126, -60, 98, 90, 112, 84, -58, -112, -74, -127, 43, + -31, 0, -33, -57, 83, -33, 22, 100, -98, 55, 92, 62, 101, 121, 27, 27, 127, -53, -52, + 87, -73, -34, -31, 61, -9, -22, 51, 55, -4, -109, -60, 11, -12, -122, -48, -77, 124, -58, + 114, -41, 31, -29, 16, 20, -78, -108, -109, 3, -24, 75, -74, 102, 70, -121, 105, 20, -28, + -11, -37, -61, -57, 104, 11, 78, -39, -65, -32, 24, 56, -103, -81, 78, -102, -22, -1, -48, + 114, 85, -57, 73, -96, 116, 61, 93, -115, 123, 47, 14, -94, -45, 124, 87, -81, -110, -86, + 126, -91, -55, -5, 33, 66, -19, 66, 85, -78, 74, -98, 37, -108, 54, 38, -107, -106, 12, + 47, -90, -19, 53, 16, 76, 21, -93, 19, 116, 103, -15, 113, 121, -115, 94, 55, -107, -113, + -121, 67, -30, -23, -116, -65, 88, -123, 12, -101, -55, -40, 122, 76, 94, -119, 115, 50, -82, + 53, -24, 41, -111, -34, 66, 34, -73, -74, 58, 17, -18, -87, -1, 46, -122, -91, 77, 78, + 33, 72, -84, -27, -31, -48, 30, -35, -13, 121, 103, -8, 4, 17, -55, -89, 8, -64, -4, + 31, 36, 26, 34, 33, 113, 41, -44, -29, -5, -90, 86, -70, 53, 7, -25, -90, -124, 66, + 80, -1, 91, -96, -106, 54, -37, -104, 4, 38, -87, 115, -47, 115, 59, 114, 32, -2, 105, + -104, -83, -109, -115, 23, -71, 46, -38, -68, 27, 62, -25, 25, -4, -109, -90, 39, -74, -83, + -1, -12, -63, -43, -41, 13, -47, 123, -88, -23, 61, -84, -54, 121, -9, 90, 114, -98, -109, + 63, -122, 25, 18, 0, 73, -9, 28, -89, -26, 124, 57, 95, 14, 90, -56, 127, -114, 70, + -6, 114, -101, -73, 39, -27, 80, -84, 99, 97, -21, -82, -38, -15, 18, -42, -109, 76, -45, + -36, 20, -38, 69, 37, -112, 11, -106, -60, 75, 35, 12, -115, -117, -61, 105, -55, 24, -122, + -93, 59, 43, 124, -125, 17, -125, -38, 17, 114, 62, 106, -125, -123, -28, -81, -37, 102, -1, + -29, -76, -99, -46, -100, 108, 34, -122, -54, -67, -59, 102, -75, 126, 86, -83, -36, 104, 45, + 48, -4, -111, -122, 67, -127, -2, 118, 109, 57, 56, 48, -21, -53, 110, -110, -35, -37, -97, + 116, -54, 125, 1, -13, 77, -77, 20, 87, -121, 20, -112, 65, 11, 69, -100, -7, -48, -5, + -67, -97, 28, 88, -122, -49, 61, -59, 114, 83, -122, 78, -92, 19, 30, -86, -8, 59, 11, + -69, -46, -60, 19, -58, -56, -94, 119, 88, -123, 124, -107, 26, -75, 93, -108, 42, 74, -1, + -23, -13, 44, 50, -101, 53, 95, -84, -104, -23, 18, -54, -94, -3, 74, 17, 116, -27, 89, + -73, 96, -80, 45, 41, 13, -124, -26, -102, -53, -38, 104, -59, 110, -17, 18, -73, -12, -26, + -43, -1, -67, -15, -73, 34, -90, -88, 94, -41, -56, 27, 16, -23, -106, 72, -12, 30, -6, + -39, 44, -105, -14, -126, 53, -76, 111, -81, -98, 102, -12, -17, 59, 38, -112, 86, 44, -107, + 102, -6, -41, 122, -124, -85, -31, 87, -79, -92, -60, 17, -36, -28, -12, -49, -28, -56, 109, + 79, -96, -32, -30, 34, -104, -76, -109, -2, 117, -50, 121, -85, 79, 96, -26, -4, -81, -76, + 72, 74, 81, -74, 90, -25, 12, 110, -96, -90, 59, 57, 112, 67, -64, 44, 19, 60, -88, + -8, 69, -76, 104, -6, 3, 53, 68, -87, -92, -33, -30, 8, -69, -20, 83, -109, -17, 18, + -48, 49, 98, -122, 5, -92, -101, 65, 68, 100, 56, 78, 22, 20, 37, -70, -40, 16, 91, + -63, -66, -72, 77, 79, -39, -121, 97, -49, -30, 57, 42, 25, -81, -30, 39, -90, 86, 63, + 110, -5, 78, 76, -15, -28, -31, 12, -10, 58, 87, 67, 112, 54, 20, -99, -31, -103, -96, + 18, -1, 62, 15, 93, 90, -8, 84, -97, 49, 75, -25, 76, -80, 23, 14, 4, 59, -83, + 15, 116, 47, -27, 60, 1, -3, 104, -15, 108, 125, -35, 75, -118, 44, -7, 87, -72, -53, + 29, -52, -86, 17, 19, 50, 110, -31, 58, 117, 124, -89, 48, -86, -50, -19, 40, 126, 104, + -40, -69, -122, -94, 72, 125, -122, -108, -35, -34, -43, 5, 56, -112, -103, 91, -37, -48, -126, + 90, -81, 86, 123, -40, -6, 21, 68, -34, 55, 75, 86, 104, 95, 4, -4, -19, 63, 42, + -75, -24, -111, -95, 57, 42, -5, 85, -78, 30, -17, 37, 115, -111, -64, 68, -77, -106, -114, + -82, 96, 53, -19, 42, 87, 107, 27, -77, -41, 61, 34, 88, 87, -119, -54, 45, -88, -116, + 107, -100, 3, 70, 4, -75, 120, -112, 116, -84, -105, 108, 74, 104, -52, 19, -49, -18, 123, + -22, 98, -47, -8, -65, -109, 125, -86, 24, 16, 106, 85, -70, -79, 60, -30, -108, 10, 93, + -120, 40, -44, -109, -29, 1, -39, 81, -68, 68, 76, 13, 94, 73, 38, -71, 104, 9, 122, + -60, -41, 61, 13, 82, -13, 32, -63, -86, 58, 70, -6, -84, -104, -32, 125, -68, -53, -120, + -13, 92, -88, -83, 108, -12, -66, -109, -41, 72, -120, -22, -17, 122, 108, -89, 57, -41, -96, + -50, -70, 24, 96, 111, 90, 118, -94, 50, 125, 109, 121, -118, 54, 41, -8, -101, 33, 16, + -106, 55, 119, -57, 26, -79, 78, 5, 112, -27, 30, -79, -103, 34, 126, -54, 85, 5, -110, + 111, 109, -120, -101, 72, 36, 25, -123, 87, -24, -63, -19, -42, 13, 67, 126, 91, 97, 82, + -109, 44, -99, -124, -72, -48, 79, 27, 33, 63, -73, 95, 78, 73, 17, 73, -91, 22, 108, + -81, -97, 48, -1, 43, 9, 85, -16, 43, -32, -63, 112, -38, 21, 89, 13, -49, 50, -96, + -19, 33, -29, -78, 63, -98, -27, -73, 62, -50, 30, 56, -62, -25, -76, -4, -80, -101, 89, + -64, 114, 73, 37, 118, 123, 9, -2, -14, -121, 85, -118, -55, 59, -61, 55, 51, -108, 9, + -94, -44, -3, -95, 22, -66, -82, -75, 14, -41, 6, 4, -67, 82, -122, -82, 56, 105, 50, + 44, -1, 70, 123, 81, -121, -105, -97, 92, -77, 109, -77, -57, 73, -119, 127, 111, -57, -23, + 40, 93, -103, 74, 118, -23, -48, 53, -11, -18, 98, 30, -19, 10, 122, 78, -47, -36, 57, + 36, 34, 34, -13, 28, 92, -96, -58, 41, -58, -104, 84, -47, -127, -88, -17, 116, -38, -17, + -15, 120, -41, 17, 106, 1, -116, 111, 67, 91, -7, -100, -59, -59, -115, 44, -104, 55, 34, + 13, -25, 124, -31, 63, 79, 4, 74, -62, 51, -87, -50, -63, 30, 18, -104, -56, -66, -48, + -14, -38, 104, -112, 102, -58, -31, -114, -8, -2, 55, 10, 62, 109, -121, 6, -19, -35, 22, + 58, 4, 51, 57, 18, 33, -41, -117, -39, -92, 42, -21, 40, -39, -37, -61, -105, -42, -16, + -70, 100, 126, 39, 39, -17, -66, -63, -78, 75, -102, -49, 46, 83, -117, 41, 71, 1, -96, + 118, -116, -60, 76, 18, 101, -127, 45, 96, -70, 110, 9, 36, -123, 27, 15, -80, 90, -89, + 77, 93, -44, -53, -120, -13, 104, 30, 100, -78, 13, -123, 42, 122, -31, -42, -55, -99, -16, + -44, 43, 101, -116, 57, 71, 42, -58, 5, 16, 32, 92, 10, 69, -28, -123, -116, -111, 57, + 50, 59, 29, 79, 73, 13, -63, -46, -55, -35, -121, 60, -123, -84, 40, -38, -93, -112, -108, + 68, 69, 118, -29, -16, -71, 55, -7, -37, 34, 45, -112, 7, -116, -23, -20, 92, 61, -79, + -126, -64, 46, -43, 56, -115, 55, 19, -100, 5, -15, -108, 9, 93, -50, -54, -23, 16, -64, + 57, 114, -110, -61, 89, 60, 104, -85, 107, -90, -110, 76, -98, 119, 124, 107, -99, 115, 18, + 102, -57, -35, -6, -87, -16, 26, -44, -27, -102, 101, -37, -53, 1, 69, 106, 17, -89, -104, + -59, -48, -113, 85, 80, -25, 79, 92, -38, 4, 42, 87, -40, 66, 70, -64, -53, 70, 107, + -117, -126, 106, 97, -126, 126, 34, 96, -106, -7, -9, 5, 123, -92, -93, 89, -47, -47, 77, + -12, -85, 85, 126, 97, -108, 86, 74, 102, -64, -98, -26, -44, -92, 15, 55, 46, 20, -92, + 72, -42, 83, 81, 33, 43, 109, -66, 76, -41, 116, -78, -45, 9, -56, -68, -55, 79, 53, + -96, 70, 66, -60, -62, 55, 81, 51, -110, -22, -122, 49, 55, 123, 19, -116, 93, -89, 120, + 114, -23, -63, 7, 72, -92, 21, 45, 69, -29, -2, 52, 66, 115, 64, 56, 123, -25, 79, + -34, -124, 49, 30, 17, -8, -92, -37, 50, 108, -123, -50, 82, -37, 125, -5, -25, 27, -32, + -53, -89, 94, -79, 85, 2, 108, 60, -91, 25, 127, -62, 55, 96, 113, 48, -48, 9, -11, + 87, 118, -18, -12, 116, -39, -35, 64, 78, 35, -26, -76, -2, -75, 95, 44, 63, -27, -89, + 69, -105, 70, -90, -33, 21, 22, 34, -37, 85, -14, 68, 34, -109, 48, -50, -76, -97, -18, + 13, 82, -88, 111, 28, -51, -8, 121, 98, -3, -14, 91, -107, 100, 57, 61, -114, 75, 7, + 42, -8, 102, -20, 127, 30, -3, -60, 94, 79, -120, 58, 94, -19, 44, -112, 111, -92, -44, + -54, -89, 45, 23, -77, 2, 27, 116, -73, 59, -69, 63, 119, -48, -35, -123, -60, 123, -62, + -34, 13, 90, -22, -37, 97, 36, 112, 36, 44, -44, 23, 90, -66, 47, 110, 69, 93, -28, + 21, -100, -20, -59, 105, 23, -117, 63, -78, 105, -7, -95, 102, -14, -59, -58, 4, -66, -11, + -24, 7, 42, 64, -56, 45, 72, -11, 13, -113, -5, 11, -74, 1, 50, 126, -46, 97, -85, + -46, -4, -108, -41, -122, 101, 58, -37, -46, -111, 44, 14, 90, -39, 85, -40, 109, -77, 81, + -55, 10, 2, 13, 24, 63, 75, 86, -1, 73, -98, 106, -15, 99, 36, 9, -48, -73, 35, + -29, -57, 5, -48, -1, 76, 15, 22, -38, -109, 37, 5, -12, -16, -92, -53, -50, -19, 32, + 92, -106, -22, 45, -39, -121, 74, 92, -13, 46, -16, -88, 57, 99, -22, 83, -113, -52, 72, + -109, -94, -101, -1, -82, -40, -47, -102, 10, 78, 88, -100, 42, 57, 73, -87, 90, -96, -105, + 25, -82, -105, -12, 45, -42, 55, 111, 37, 116, -81, 56, -36, -18, 71, 20, 89, 113, -30, + -70, -81, 93, 90, 72, -126, -41, 70, -25, 125, 25, -56, 37, -32, 18, -34, -15, -77, 23, + 47, -4, -27, -53, -1, -7, -111, -62, 68, -81, 109, 117, 102, 31, 85, 32, -48, 64, -37, + 2, 104, 62, -29, 91, 34, -25, -92, -39, 47, -77, 49, 38, -24, -118, 94, 16, 10, 60, + -75, -113, -93, -71, 34, 14, 70, 95, -74, 88, 62, 45, -23, -107, -87, 28, -88, -48, 83, + 124, 8, 6, 17, -33, 51, -63, -49, 36, 24, 123, -61, 88, 29, 35, 60, 68, -69, 79, + 110, -1, 62, -73, -31, -87, -77, -50, -120, -36, -34, -54, 99, -49, -44, 84, 11, 59, -84, + -20, 112, 5, -117, 43, -26, 8, -46, 9, -79, 86, 53, 43, 29, 28, -76, -34, -58, 64, + 7, 19, 57, -20, 124, -21, -25, -98, 113, -82, -2, -32, -72, 21, 11, 32, -78, 62, -90, + 76, -29, -14, -120, 75, -6, 20, 114, -15, 98, 83, 62, -105, -48, 74, 83, -93, 123, -37, + -101, -66, -80, -73, -6, 120, 69, 52, 55, 46, -5, -68, 106, 123, -32, -58, 64, -1, 48, + -40, -99, 105, -89, 37, -83, 25, 106, -63, 88, -49, 12, 80, -23, -50, 113, 41, 75, -98, + 36, -74, -26, 123, 72, 92, -19, -42, -89, -71, -47, 97, -23, 40, -119, -58, -18, 12, 120, + 126, 25, -122, -14, 85, 82, -119, -41, -64, -55, -54, 127, 20, -96, -6, 122, 84, 49, 70, + 105, 82, 97, -38, 83, 86, -95, 19, -59, 103, -41, 83, -21, 11, -47, -110, -36, 116, -118, + 73, 87, 56, -97, -40, -84, 91, -99, -125, 117, 23, 28, -17, -74, 126, -20, -119, 1, 34, + 40, -50, 1, -121, -24, -27, -60, 77, 39, -54, 69, -117, 65, 72, -72, 71, -109, 88, 3, + 36, -114, -54, 55, 3, -30, -15, -97, 32, -90, -17, 101, -63, -17, -52, 67, -92, 122, -47, + -9, -77, 86, -107, 106, -39, 124, -2, -71, -90, 26, -56, 14, -65, -33, -107, 125, 112, 63, + 122, 88, -92, 97, 118, -91, -119, -56, 68, -26, -1, -61, -47, 106, -124, 73, -98, 106, 47, + -64, -75, 86, 48, -10, 47, 66, 47, 59, -47, 90, 46, -27, -94, -75, 60, 83, 71, 104, + 21, 44, -39, -108, -85, -73, 76, -37, -41, 34, 2, -106, 103, -83, -51, 81, 24, 78, -6, + 10, -40, 106, -127, -1, 22, -13, -56, 63, 97, 82, -77, -62, -92, -7, 25, -35, 113, 71, + -22, 96, 72, 38, -88, 25, 89, -100, 123, -67, 5, -117, 99, 88, -82, -86, 125, -38, -4, + -87, -9, 15, 19, -76, 72, -19, 123, 121, 92, 13, 42, 4, -25, -86, -91, 100, -100, 101, + 77, 40, 104, 90, -16, 113, 16, 59, 125, 16, -48, -10, 10, -22, -8, 56, 74, 31, -43, + 73, -118, 115, 50, 38, 77, 52, 45, 78, -6, -18, 125, -86, -108, -75, 98, -73, -80, -119, + 36, 115, 120, -92, 73, 111, -91, 46, -66, 107, 31, -113, 77, 67, -67, 23, 106, 114, 69, + -24, -46, 10, -125, 11, -118, 98, -27, 93, -70, -108, 25, 70, 3, 30, -122, 108, -13, 66, + 69, 51, 110, -76, -29, 61, 81, 70, -62, -84, -111, -107, -14, 119, 76, 59, 99, 91, -78, + 25, 57, 82, -26, -5, -62, 124, 34, 68, 85, -17, 44, -34, 106, 92, -69, -77, -79, 47, + 6, 125, 36, -14, 68, 67, -32, 109, -62, 70, 104, -124, 29, 53, -123, -4, -22, 16, 27, + 51, 105, 54, 110, -111, 10, -15, -72, 83, -115, 14, -11, -53, 124, 16, 66, 99, 100, 48, + 84, -94, 114, 54, -23, 90, -79, -118, -22, -21, -107, 62, 51, -104, -127, -12, -96, -44, 112, + -98, 38, -104, -61, 67, -92, -9, -35, 32, -91, -15, -4, -112, 80, 105, 100, 108, 47, 53, + 8, -34, 68, 105, 113, -3, -62, 20, 75, 29, 86, -86, -32, 66, 15, 120, 34, 122, -90, + -18, 76, 14, -4, -52, -115, -89, -88, 92, -6, 52, -123, 106, -24, -14, -90, -28, 27, 80, + -122, -33, 45, 122, -84, -84, 2, -46, 7, -43, 0, -127, 35, 125, -93, 74, -29, 42, -37, + -91, -70, 33, -44, 30, -83, -15, -124, -24, -52, 75, 34, 6, 95, 44, 30, -116, -74, -54, + 11, -73, 124, 2, 33, 0, 27, -111, 17, 13, 103, 42, 45, 15, -15, 101, -36, 12, -38, + 120, 7, -18, 98, 22, 126, -17, 118, 45, 71, -24, -122, 32, -37, 88, 77, 88, -47, -76, + 8, -43, -35, -10, 3, -87, -81, 63, 32, -99, -87, 106, 31, 7, 125, -47, -60, -60, -51, + 45, -85, -9, 90, -109, -33, 95, -87, 30, -43, -58, -58, 93, -11, -20, -118, -54, -93, -17, + -53, -50, -60, -97, 58, -52, 7, -35, 45, -2, 90, 42, -67, -84, 80, 103, -41, -110, 89, + 52, -110, -74, -55, -35, -111, 84, 28, -3, -37, 68, -52, -81, -27, 19, -56, 75, -27, -3, + 19, -39, 119, -29, -42, -4, 116, 8, -88, -58, 93, 15, 111, 29, -5, -49, 0, -69, 42, + -98, -45, 69, 68, 4, -95, -96, 48, -81, 59, 23, -29, 13, -73, 58, 55, 61, 18, 95, + 78, 56, -18, 106, -102, -68, 6, 114, 111, -116, -20, -74, 124, 38, -119, -123, -65, 71, 48, + -15, -114, -39, -30, 98, 86, 21, 61, 15, 50, -108, -72, -124, -65, -29, -77, -40, -51, -61, + -73, -126, 69, 0, 7, -74, -41, 101, -63, -97, 90, -88, 70, 55, 3, -83, -117, -89, -126, + -34, 32, 81, -110, -70, -87, -61, 16, -119, 101, -62, -34, -62, -28, 16, -4, -72, -68, 100, + -14, -99, -16, 46, 46, -26, -91, 70, 109, -123, 102, -91, 73, -76, -23, 30, -106, -107, 96, + -44, -85, -63, -81, -88, -50, -101, -32, 20, -62, 43, -15, 18, -80, 40, -26, 61, 16, 33, + 71, -87, 13, -43, 103, 58, -60, 125, -113, 46, 52, 109, 64, -106, -64, 13, -32, -100, 30, + -63, 57, -114, -59, 52, 17, 92, 13, -27, 66, 44, 49, -83, -53, 5, -51, -38, 3, -66, + -63, 41, 80, -15, -107, -24, -50, -32, 30, 38, 54, 69, 112, -35, 121, -33, -82, -113, 11, + 99, 87, -111, -16, -116, -113, 40, -35, 20, 106, 40, -9, -9, 3, 119, 67, 5, -108, -82, + 107, -57, 67, -38, 58, 8, 121, -49, 65, -10, -70, -47, 113, 52, -18, 28, 126, -76, -107, + -15, -93, -114, 120, -70, 47, 61, 57, -103, 57, -30, -86, -36, 53, 54, -75, -62, 53, -99, + -4, -89, 16, 53, -112, 110, -84, 2, -99, -108, 29, -21, 67, 78, 82, 76, -87, 118, 91, + 126, -109, -93, 23, 54, -45, 102, -72, -51, 89, 26, 121, 10, 24, -106, 68, 17, 36, 73, + 35, 65, 100, 85, -18, 18, -79, -119, 82, -45, 79, -60, 12, -94, 98, 38, 23, -47, -5, + -123, 99, -45, -8, -120, 4, 12, -73, -46, -29, 108, 98, -19, 90, 84, -34, -24, -4, -32, + -5, 9, 0, 79, 17, 117, 27, 50, 8, -12, 107, -67, 71, -39, 6, 72, 119, -82, 15, + -76, -14, -71, 85, -83, 95, -37, -94, -37, 96, 118, 17, 35, -81, -95, 99, -105, -40, -75, + 106, 24, 83, 81, 21, -22, -112, -38, 91, 94, -106, 11, -60, 1, 63, -93, 113, -15, -62, + -22, 56, -11, -28, -110, 88, -78, 12, -111, -21, 110, 4, 48, 9, -73, -127, 95, 60, -35, + 98, -92, 89, 15, -35, -41, -118, -48, 90, -78, 121, -110, 86, 44, 37, -56, 101, -12, -34, + 77, 21, 60, 59, 81, 92, 92, 61, -87, 43, 117, -50, 103, -108, 3, -126, -110, 117, 19, + -9, 74, -122, -2, 104, 28, -47, -20, -119, 89, 61, -80, -57, 9, -60, 52, 120, 49, 19, + -23, -68, 112, 93, -71, 20, 52, 15, 27, -29, 96, 125, -41, -113, -105, 20, 2, 91, -116, + -124, 24, -40, 91, 61, -92, 120, 48, 12, -85, -47, 68, -50, 88, 115, 86, -100, 67, 107, + 124, 68, -77, 82, 123, -113, 89, 35, -42, -74, 1, 122, 20, 50, 120, -32, 77, -39, 117, + -15, 36, -73, -52, 86, -14, -89, -35, 55, 107, 66, -48, 13, -96, -53, -80, 123, 74, -35, + -76, -31, -74, 111, -57, -18, -77, -61, 126, 69, 112, -30, 33, -65, 67, -119, 36, 95, -9, + -57, 22, -22, -28, -70, -117, 118, -93, -89, -82, -98, 108, 127, -75, -58, -106, -28, 29, 24, + 56, -67, 114, 113, -21, 76, 90, 33, 65, -30, -34, 28, -5, -44, 22, 105, 57, 116, -100, + 6, -120, -116, 9, -87, -89, -95, -99, 120, 65, 54, 119, 100, 27, 98, -39, 127, -98, 59, + -94, 85, 53, -7, 40, -1, 45, -69, -106, -80, -67, 94, 88, 85, -74, 17, 54, 72, 13, + -4, -30, 32, -14, -17, -73, 98, 23, -46, -101, -97, -54, 82, -80, -81, -126, 38, -124, -112, + -77, -73, -89, -70, 22, 81, -18, -15, -21, -41, 71, -101, -72, 116, 72, -59, 33, -27, 84, + -87, 107, 101, 108, -21, 107, 89, 14, 57, -54, 116, -8, 104, -111, 26, -72, -123, -121, 119, + -123, 12, -69, 37, 72, -82, 62, 77, -38, 63, -114, 111, -5, -69, -52, 46, -54, -116, 56, + 106, 48, 120, 11, -100, 0, -76, 123, -103, -61, 126, 77, 59, 116, -111, -92, 73, 84, 34, + 18, -38, 116, 34, 87, -103, -22, 74, -55, -97, -66, -110, -121, 47, -54, -89, -46, 11, -76, + 44, -11, -105, -99, -90, 100, 29, 97, 105, -43, -19, -35, -59, -25, 107, -50, 59, -20, 50, + 1, 106, -16, 59, 98, -55, 117, -38, 16, 64, 4, -71, 84, -20, -85, 102, -22, 95, 75, + -111, 57, 118, -70, -50, 120, 113, -7, -21, -93, -55, -23, 4, -52, -12, 25, 3, 84, -66, + -85, -50, 87, 113, -37, -87, -105, 21, 51, 59, 91, -23, 84, -118, -5, -51, -79, -114, 29, + -14, -94, -79, -44, 98, 112, -40, -47, -4, 123, -116, 18, -19, -70, 52, -105, 42, -73, -106, + 46, 29, -111, -119, -19, 19, 63, 120, -84, -49, 70, 110, 53, -7, -19, 61, 53, 71, -26, + -57, 103, 82, -42, 99, 125, -90, -118, -122, 106, -79, -123, 2, -68, 93, 88, -122, -83, 46, + -114, 63, -19, -20, 61, -4, 62, -11, -112, -111, -3, -72, 86, -65, -1, -90, -127, 120, -92, + -116, -88, -82, -102, -17, 44, 61, 61, 68, 74, -71, 7, -75, 112, 9, -8, -125, 56, -99, + -6, -107, 97, -55, -11, 71, -17, 26, -32, 7, -64, 77, 85, -68, 115, -121, -70, 62, 17, + -62, 112, -60, -58, 93, -84, -37, 27, -46, 56, -121, -65, -2, -106, 54, -95, 23, -34, -123, + 67, -113, 51, -53, -6, -46, -97, 86, 41, -26, -59, -118, 95, -101, 43, 13, 27, -56, -83, + 61, 88, 115, 23, 75, 94, -16, -63, 22, 31, 58, -117, 115, 92, 15, -123, -32, -99, -19, + 1, -120, 109, 64, -45, -53, 82, -26, 105, 121, -81, -22, 117, 126, 35, 97, -87, 56, 46, + -21, -1, 70, 103, -50, -22, 77, 123, 35, 124, -83, -119, -98, 94, -40, 12, 77, -47, 81, + -45, -77, -117, 101, -96, 73, -37, 58, -108, -92, -84, 75, 110, 71, 72, 125, 0, 7, -62, + -19, 125, -126, -23, -110, -49, 22, -12, 66, 89, 1, 41, -68, 49, 69, 41, -88, -25, 90, + 118, -24, -41, -92, 116, 13, 36, 93, 98, -59, 62, -73, -103, -110, -46, 65, 76, -111, -41, + 113, -57, 106, -62, -15, -124, 119, -98, -66, 19, -43, 22, 55, 54, -30, 63, -86, -70, 127, + 43, 118, -65, -113, 36, -25, 78, 100, 20, 69, -39, -21, 42, 112, 90, 24, 57, 59, 85, + 95, -72, 108, -125, 54, 46, -2, 41, -79, -125, -12, -25, -15, 64, 111, -106, 14, 112, 51, + -41, 93, 17, 111, 3, 52, -60, -77, -33, 82, -4, -59, -80, -127, 99, -76, 54, -80, -47, + 103, 53, 2, -29, 38, 37, 12, -114, -67, -118, 1, -126, 115, 58, 15, 53, 25, 18, 72, + 121, -17, -88, -82, -3, -55, 24, 87, 1, -87, -22, -37, -31, -49, 4, -77, -121, 14, 74, + 72, -105, 14, 32, 69, 53, -85, -40, -98, 113, -98, -99, -44, 98, -51, -13, 1, 59, -39, + -14, -71, -83, 27, 93, 58, -47, -73, 13, -119, -78, -117, 60, -120, -46, 100, 100, 44, 83, + 94, -102, 33, -110, -66, -7, 99, -18, -41, -50, -45, 28, 14, -120, 21, 81, 31, -9, 5, + -75, -57, -73, -25, -100, -13, -87, 69, 91, 5, -62, -124, 48, 63, -46, -40, -52, 6, 103, + 119, -125, 43, 72, -119, 102, -42, 69, 85, 50, 52, -124, -51, 45, 6, 41, 33, 104, 91, + 60, -73, -42, 95, -13, 84, -124, -83, -61, 0, -23, -82, -76, -35, 14, -97, 26, 71, 4, + -14, -7, 60, 17, 43, 51, 38, -22, 102, 25, 117, 7, 82, 104, -88, 105, 69, 102, 103, + -39, -120, 32, 14, 78, -32, -37, 27, 26, -13, -97, -105, 10, 82, -94, -98, 126, -88, -115, + 54, 49, -55, -98, 95, 69, 1, 23, -23, -24, 62, -85, -24, -65, -34, 37, 4, 111, 93, + 29, -38, 114, 102, -22, -114, 70, 3, 86, 115, -100, 118, -76, 90, 91, -5, 37, -48, -42, + 8, -118, -45, -97, 56, -26, -62, 84, -26, 64, -106, 10, -50, -117, -31, -67, 120, 58, -18, + -106, -44, 65, -11, 101, -29, -28, -55, 41, 5, -18, -93, -94, 71, 94, -87, 49, -73, 15, + -120, 95, 79, 32, -95, 112, 48, 110, 107, -122, 97, 73, 50, -117, 12, -24, 58, -18, -48, + -37, -118, -1, -117, 24, 34, -17, 79, 81, 103, -103, -28, 84, -44, -24, 1, 75, -85, 25, + -68, 24, 11, 95, -106, 98, -98, 49, 63, 70, -57, -73, -7, 86, -13, -1, 31, 62, -54, + 89, -1, -57, 88, -59, -108, 62, 0, -56, 88, 7, 10, 33, -25, -55, -78, 76, -13, -127, + 54, 61, -33, -83, 74, -40, 74, -55, -69, 99, -27, 18, 91, -91, 69, -36, 24, 108, -14, + -89, 34, 13, 59, -90, 85, 60, 11, -64, -74, -111, 70, 84, -126, -29, -62, 47, 12, -16, + -52, -66, -22, -73, 89, -114, -112, -34, 89, 81, 45, 117, -27, 71, -9, -95, -113, -122, -121, + -100, 1, 112, 100, 120, -9, -70, 96, 28, 34, -94, -9, -44, 65, 7, -98, 0, 100, -108, + -91, 126, -101, 116, -37, -19, 107, 58, 80, -92, 70, 112, 82, -5, 18, -57, -58, 69, -48, + 122, 47, -53, 54, -86, 34, -73, 55, -104, -67, 94, -78, -96, 94, -102, 122, -62, 38, 120, + -114, 105, -65, 29, -93, 101, 62, -39, 71, 57, 57, -21, -125, -50, -26, -69, -26, 108, -28, + -118, 21, -64, -88, 42, 97, 3, 38, 94, -37, 122, -47, -123, -13, -16, 117, 31, 59, -16, + 89, 82, -37, 52, -122, 30, -24, -53, 94, -95, 126, 119, 100, 88, -109, 13, -29, -93, 107, + 115, -40, 87, 56, 104, 10, 3, -22, 98, -102, 60, -64, 36, -34, 36, 105, 76, 32, -48, + -98, -4, 112, 76, -71, -127, 50, 6, 68, -73, 18, -89, 18, -98, -17, -68, 114, 35, 75, + -1, 85, -109, -1, -40, 59, -121, -117, -89, 36, 36, 50, -11, -9, -87, -39, 43, -19, -69, + 25, 99, 91, -92, -127, -63, 81, 96, 7, -2, 28, -121, -91, 126, 1, -46, -117, 68, -90, + 95, -67, -77, 23, -68, -10, 60, 72, -49, -101, -20, -19, 100, -2, 122, -103, 36, -82, -90, + 67, -112, 77, 89, -113, -21, -41, 49, -98, 76, 72, 10, -35, -54, -90, -15, -80, -72, -110, + -82, -100, 40, -15, 70, -99, 76, -107, -40, 82, 30, 30, 42, -58, -15, 33, -19, -86, -72, + 78, 41, 102, 71, 60, 5, -73, 39, 95, -115, -53, 63, 42, -91, 78, 91, 83, -27, 73, + -78, 81, 58, -127, 43, 70, -11, 100, 4, -96, -71, -43, -124, 62, -19, 75, 10, 53, -14, + -40, -81, -38, -124, -127, 116, 57, 86, 36, -47, -10, -85, -80, -61, -97, -65, 54, 113, 53, + 2, 33, -102, 42, -107, 108, 107, 61, -117, -12, 16, 87, -44, -85, -8, 83, -99, -13, -80, + -64, -111, -9, -93, 32, 96, 54, 103, 100, 8, 50, -24, 15, -117, 43, 7, -13, -56, 30, + -125, 13, -45, -106, 91, 126, 40, -20, -110, 113, -24, 61, 40, -13, -60, 66, 20, -105, -104, + 125, 82, -93, 25, -6, 101, 3, 58, 118, -62, 48, 114, -26, -82, -100, -119, -41, 110, 95, + 68, -120, 84, 7, -102, 73, 25, 29, 85, 91, -9, 97, -84, 59, 63, 112, 79, -119, -118, + 70, -35, 2, 56, 67, 78, 54, 77, -91, 102, 121, -72, 96, -78, 73, 94, 104, 97, -61, + -40, -113, -74, -72, -81, 89, 126, -47, 118, -2, -47, -51, 126, -99, -3, 84, 123, -112, 104, + 97, -76, -46, -66, 25, 35, 107, 32, 60, -21, -107, -2, -78, 92, -19, -48, 48, 110, -92, + -122, 87, -64, -28, 64, 96, -98, 108, -15, 38, 126, 79, -89, -59, -106, -88, 53, -55, -24, + 94, -121, 109, 44, 57, -59, 27, 9, -11, 91, 107, 94, 34, -103, -127, 13, -16, -113, 48, + 69, -18, 87, 10, 121, 109, -66, 62, 69, -95, 51, 104, 59, -11, -93, 26, -67, -29, -42, + -120, -44, 101, -10, 104, 52, 18, -58, -120, -69, 31, 72, -87, -84, -109, 60, 65, 94, -49, + 118, -88, 75, -125, 33, -82, 67, -37, 11, 83, 39, 22, 109, 12, -72, 18, -127, -91, -119, + -107, -124, 67, -37, 37, -83, -17, -104, -34, 78, -119, -11, -85, -41, -55, 47, -39, -87, 18, + 87, 105, -29, 48, 80, -35, 14, -1, 119, 123, -76, 71, 66, 84, -99, 98, 43, 118, 16, + -30, -13, 52, -127, 85, -5, -121, -123, 95, -123, -91, -76, 42, 108, 37, 37, 12, 24, 85, + 72, -52, 41, 86, -95, -113, -67, 82, -91, -113, 45, -92, -28, -44, 99, -79, 19, 12, -6, + 102, 12, -60, 86, 95, -49, -42, -46, 80, -124, -72, -107, -92, 109, 52, 78, 88, -123, 32, + 121, 119, -40, 55, 46, -95, -1, -84, 3, -44, 100, 81, 65, -77, 82, 92, 16, -50, -11, + 28, 47, 16, -41, -96, 83, 84, -99, -54, -3, 111, -106, 1, 9, -75, -75, 84, 93, 124, + 124, -30, 12, -72, -29, 35, -39, -82, 27, 67, 2, -52, 93, 69, 26, 27, -35, -123, 78, + -58, 110, 7, 29, -3, -120, 123, -54, 53, -95, -62, 61, -90, -36, -103, 44, 0, -100, -21, + 23, 126, -46, -21, 17, 112, -85, -118, -65, 79, -2, 77, 36, -84, 19, 110, -96, 57, 29, + 118, -6, -64, 73, -41, -110, 69, -113, 41, -33, -82, 26, -3, 97, 6, 95, -39, 110, -115, + 85, 22, -107, -121, 23, 112, -69, 101, -25, 105, -105, 7, 15, 113, -81, 94, 78, -56, 96, + 89, -61, -31, 28, -4, -70, 101, -80, -77, -59, 29, 115, 39, -105, 29, 90, -4, -79, -29, + -38, -33, -25, 122, 44, 20, 87, -52, -62, -90, 117, 101, 98, 113, 89, -50, -4, 121, -56, + 92, 118, -44, -107, -26, -64, 22, -60, -69, 70, -5, -44, -70, -61, 36, 68, -12, -36, 82, + 35, -75, -88, 5, -89, 116, -69, -47, -11, 23, -68, -62, 97, -35, -11, -22, 43, 31, -57, + 44, 107, 1, -33, -108, -57, -31, 11, -123, 24, -20, 13, 51, 24, -88, 12, 80, -58, -31, + -86, 16, 28, -73, 35, -125, 99, -113, -73, -117, -75, -14, 84, 83, 89, 74, -48, -55, 26, + 64, -48, -28, 43, -115, 14, -69, -3, -8, -28, -90, -66, -25, 67, -42, -24, 75, -52, 15, + -62, 54, 80, -29, -44, 85, -8, -72, -26, 66, -67, 96, 85, 82, 120, 125, 1, 46, -39, + -89, 42, 80, -87, 21, 92, 33, 115, -44, 87, 36, 41, -68, -115, 78, -121, -16, -45, 16, + -58, 110, -8, 78, 109, -61, 124, 123, -25, -111, -27, -85, 55, -125, 35, 84, 91, -79, -12, + -102, -5, 111, 68, -88, -122, 32, -4, -5, -44, -1, -97, 60, 80, 84, -40, 107, -24, 69, + 122, 121, 69, 40, -72, -87, -4, -62, 109, 104, -65, -17, 95, -49, -41, 61, -20, 0, -65, + 79, -55, -78, -86, 113, -45, -78, 96, 20, 116, -18, 54, -6, 103, 42, -108, -30, -58, 87, + 19, 68, 60, 113, 92, 18, 54, 25, 27, 72, -21, 125, 10, 71, -14, -93, -70, -3, 123, + 56, 123, 44, 126, -108, 126, 55, -9, 22, -58, -8, -34, 123, -98, 58, -116, 53, -112, 74, + -72, 17, -74, -7, -10, 80, 126, -43, -56, 97, -55, -99, -123, 90, -71, -115, -122, 58, -125, + -68, -112, 54, 53, -18, 23, -69, 14, 64, 27, 14, 78, 42, 12, -83, 97, 91, 108, -14, + -54, 56, -58, 63, 37, 69, -105, 99, -13, -75, 0, 2, -83, -33, 98, -76, 32, 117, 123, + -106, -104, 67, 44, -75, -61, -7, 40, 54, -15, -10, 101, -89, 21, 115, 108, 45, -73, 79, + -65, 18, 20, 57, 120, -127, 108, 50, -61, -28, -61, -82, 55, -114, 63, -75, 127, -16, -42, + -41, -103, -45, 77, 88, -102, 82, -70, 22, 62, 6, 60, -28, -38, -83, 76, -12, 65, -44, + -67, -2, -2, 68, 66, 3, -5, -93, -18, -11, 113, -16, 47, 54, -105, 0, 5, -27, 1, + -40, 46, -36, 65, -68, 44, 7, -19, 80, -120, 14, -60, 64, 89, 20, -89, -4, 26, -106, + 21, 42, 23, 48, 53, -94, 2, 90, 65, -19, 9, -67, -31, 103, -39, 63, -4, 113, -41, + 24, 113, -125, 6, -1, 102, -26, 42, -40, -46, -93, -88, -89, -49, -107, -51, 73, -122, 17, + -20, -77, 110, 15, -76, 9, 109, -96, -41, -49, -116, -65, -50, 60, -79, -39, 101, 52, -92, + -122, -18, -24, 28, -26, 97, -44, 50, 59, -39, -124, -23, 22, 34, 54, -103, 89, -104, 110, + -62, 20, 43, -57, -77, -49, 37, -52, 18, -118, 71, 75, -122, -27, 107, -39, -119, -122, 33, + -87, -81, -93, -63, -61, 64, -22, -103, -98, 83, 19, -84, 80, 44, 69, -42, 126, 55, 10, + -73, -84, -93, -62, 90, -108, -106, -55, -122, -116, 83, 66, 33, -9, 44, -89, -58, -8, 29, + 44, -112, 58, 122, 111, 98, 75, 87, 122, -18, 111, -76, -75, 99, 12, 127, -107, -32, 122, + -111, 54, 57, -41, 104, -113, 120, 18, -4, -11, -56, -14, 85, 99, -73, 14, 1, 28, -10, + -122, 63, -28, -7, 48, 51, 65, -39, -121, -88, -77, -19, -103, 21, -80, 120, -18, -40, -27, + -71, 99, -38, 111, 85, -17, 86, -63, -95, -44, 94, 125, -57, 109, 41, -121, -4, -58, 112, + 42, 70, 45, 108, -63, 73, 96, -45, 83, -111, 22, 124, -40, 93, 41, -35, -89, 29, -24, + -96, 14, -55, -95, 107, -26, 119, -47, -31, 69, -56, -18, 72, -87, -1, -10, 102, -101, 94, + -125, 86, 66, -105, -91, 50, -47, 73, 99, -32, 69, -8, 50, 118, 90, -11, -73, -57, -10, + -73, 88, -82, 117, 69, -125, 92, 2, -102, 97, 100, 22, 48, 26, 74, -116, 116, -111, 2, + -115, 100, 81, -28, -69, -69, -88, -125, -77, 50, 19, 73, 45, 14, -41, 1, 67, 46, 44, + -86, -114, -78, 84, 85, -39, -33, 83, 64, 68, 96, -21, 81, -78, -78, -15, 107, -21, 123, + -116, 71, 8, -72, 113, -33, 119, 82, 47, -126, 94, 44, 114, -74, -12, 6, 84, 88, -113, + -74, -107, -96, -96, 68, 49, 96, 72, 113, 84, -3, 125, 18, -121, -115, 58, -89, -12, 88, + 65, 111, -26, 61, -9, -119, 109, -15, -12, 65, -2, 116, -123, -104, -54, -112, -33, -42, 51, + 41, -37, -68, -104, 54, -16, 1, -5, 110, 126, 97, 118, 123, -16, -13, -58, -123, 93, 76, + -76, 74, 12, 69, -96, -122, 47, -47, 23, -19, -27, -96, -24, -61, -2, -96, 125, -3, 74, + -23, 44, -86, 68, 37, 114, -97, -16, 101, 80, 41, 47, 74, 50, -22, 22, -127, 21, -54, + 112, 62, 89, 23, 109, -127, -3, 4, -50, -114, -44, 49, 15, 31, 42, 9, 73, 93, 61, + 76, 121, 23, -116, -60, -66, -75, 89, -23, 86, -64, 7, 31, 114, -42, -69, -21, -38, -85, + -104, -30, 89, 80, -20, -43, -125, 98, 124, -37, -80, -33, -96, 82, -105, -66, 16, 117, -47, + 103, 76, 18, -14, 7, 88, 70, -74, -105, 69, 13, -41, -7, 91, -4, 33, 35, -17, 25, + 80, -3, 5, -25, 36, 48, 47, 123, 18, 1, 61, -42, -78, 94, -41, -37, -92, 104, 120, + 112, 19, 123, -11, -74, 78, 52, -121, -78, 58, -74, -125, 37, -124, -25, 51, 87, 41, 42, + -39, -32, 115, -32, 62, 126, -101, 48, 79, -51, 86, -21, -49, -123, 92, 38, -2, 99, -119, + -57, -85, -13, -82, -49, -127, -11, -44, 72, -19, -118, -50, -2, -117, -8, -94, 69, 12, 96, + 68, -59, 52, 108, -8, 64, -31, -53, 41, 50, -75, 24, -61, 57, -102, -29, -126, 82, 95, + 83, -64, -88, 22, 80, 4, 71, 96, 13, 28, -2, 22, 78, 102, 25, -22, -47, 87, 13, + -8, 36, -40, -84, 104, 109, 100, -123, -51, -7, -76, 99, 51, 41, -36, 52, -57, 49, -101, + 100, -48, -2, 126, -13, -77, 12, 79, 48, 91, 32, -23, -19, -15, -126, -56, -5, -100, 85, + -125, 101, 18, -105, -72, -109, -43, 117, 119, -98, 98, -24, 88, 110, -98, 71, 81, -80, 77, + -8, 97, -61, -48, -91, -9, 48, -10, 56, 71, -76, 121, -89, 56, -69, 67, -108, 93, 106, + 90, -76, 18, 34, -51, -65, 15, -97, -43, 125, 75, 93, -87, 113, -56, -23, 93, 103, -101, + -42, 104, 68, -53, -64, -53, -70, -52, -34, -116, 105, -105, -11, -65, 106, -86, 71, -88, 42, + 84, 52, -96, -87, 90, 117, -75, -91, -19, -60, 84, -45, -60, 1, 54, 83, -22, 109, -36, + 59, 70, -16, -11, -32, 88, -114, 121, -118, 25, -75, -16, -78, -117, 91, -36, 45, 83, 6, + -12, -115, -34, 38, -19, 40, 113, -57, -7, -63, -95, -22, 1, -39, 7, 74, -21, 34, -60, + -47, -81, -7, -56, -19, -94, 54, -22, 121, -2, -119, 31, 26, -54, -120, 32, -42, -27, -18, + 72, 57, 38, -111, 66, 122, 39, 100, 97, 32, -106, 1, -49, 20, -16, -119, 122, 52, 105, + -49, 67, 89, -62, 82, 79, 62, 105, -75, 58, -127, 40, 42, -54, -21, -27, 111, 97, -106, + 81, 20, -86, 23, 70, -90, 83, 33, 59, 32, 112, -97, -60, 74, -33, -97, 46, -63, 94, + 124, -14, 33, -59, -111, 37, -66, -81, 115, 54, -44, 17, -77, -116, -44, -43, -91, -52, 47, + -55, -20, -15, -59, -98, 64, -44, 85, 16, 109, 78, 46, 124, -118, -116, 25, -92, -118, -126, + -81, -24, -126, 35, 16, 47, -65, -94, -77, -38, 37, 30, 8, -52, 122, -28, 33, 124, 12, + 76, -79, -51, 53, 5, 59, 77, 105, 96, -70, -54, 71, -7, 86, 109, 87, -124, -73, -6, + 101, -97, -20, -110, -123, 20, -19, 53, 58, -70, -104, -14, -4, -45, -84, 71, -115, 80, -111, + 31, 92, -127, 123, 53, 13, 37, -127, -67, -120, -26, 19, 50, 37, 79, -75, -26, -122, 26, + 66, 7, 117, 53, 73, -13, 65, -5, 104, -44, 121, -62, -33, 82, -24, -113, -15, -15, -122, + 87, -101, -111, 84, -37, 92, 56, 80, -70, 87, -28, -95, -117, -19, -10, 51, -60, -41, -50, + 77, -87, -39, 57, -6, 48, 5, 59, 75, 21, -120, -107, 51, -63, -32, -8, -109, 26, 70, + 24, 68, 87, 63, -113, 62, -12, -27, 11, 20, 86, -1, 109, 98, 116, 19, 95, -102, 108, + -117, -70, -101, -126, -76, -26, -35, 13, 90, 105, 46, 81, -101, -1, -79, -74, -57, -4, 1, + -121, 78, -56, -124, 33, 51, 31, 19, -39, 32, -28, -7, 56, 109, -87, -15, 99, 14, -96, + -99, 24, -75, -29, 96, 47, -68, -3, 61, 116, -27, -56, -44, 116, 53, -47, 61, 86, -13, + -43, 49, 15, -87, 108, -112, 37, 68, -116, -46, 82, 44, 87, 112, 44, -90, -20, -86, 98, + 93, -62, 57, 97, 30, -121, 8, 9, -89, 31, 2, -123, -80, 20, -66, 79, 78, 93, 29, + 39, -7, -12, 16, -77, 104, 53, -90, 103, -54, 48, -43, 54, 29, 23, 34, -92, -95, 23, + 34, 59, 33, -23, -38, -72, 50, -53, 23, -50, 88, -25, 8, -7, -59, 26, 71, -115, 30, + -54, -60, 106, 17, 44, 44, 31, 24, 107, 68, 74, -103, -71, 97, -108, 108, 46, -52, -30, + -122, 122, 83, -64, -46, 48, -4, -4, -76, -35, 16, 80, 54, -100, -113, -46, 64, 115, 75, + 43, -96, 34, 97, 59, -103, 48, -14, 73, -35, -53, 80, 92, -89, 24, -62, 13, 105, -91, + -5, -32, 95, -11, -101, 78, -123, -3, -56, -47, -38, -66, -5, -30, 39, 80, -6, -5, -53, + -78, 62, 72, -12, 31, -81, -16, -48, -97, 12, 13, 65, 75, 74, -94, 65, -57, 49, 81, + -101, -103, -16, -115, -10, 62, -25, -36, 115, -38, -28, -111, -51, -104, -63, -76, 0, 63, -47, + 39, 107, 61, 96, -69, -11, 113, 102, 7, -82, 62, 59, -52, 50, 113, -36, 67, 24, 14, + -13, 18, 41, -11, -22, 4, 45, -101, -100, 29, -58, -84, -90, 59, -6, -105, 3, 49, 114, + 103, 31, -80, 111, -60, 2, 36, 89, -108, -83, -80, -110, 26, 7, 107, 62, 121, 43, 52, + -58, 24, -84, 23, 119, -109, 82, 26, 61, 117, 107, -111, 1, -39, -53, 54, -25, 39, 126, + -42, -18, 99, 112, 61, -93, 122, 93, 59, -40, -92, -112, -52, -78, -23, -65, -88, -1, -26, + 112, -34, -62, 36, -33, 39, 63, 56, 24, 2, 103, -21, 57, 58, 68, 85, -117, 40, -15, + -50, 86, -23, 108, 51, -5, 35, 117, 118, 122, 57, -65, -113, 112, 17, -84, -55, -15, -66, + -24, 85, -11, -27, -55, 4, -88, 47, 50, -62, 108, -42, 85, -12, 92, 118, 85, -15, 14, + -72, -110, -110, -117, 78, 54, -98, 76, -82, 90, 90, -3, -16, -37, 12, -80, 66, -78, -29, + 13, -33, -49, 97, 103, -84, -53, -20, 84, 26, -117, 35, 54, -45, -84, 118, 43, 111, 92, + 3, -23, 43, 49, 70, -4, 3, -51, 29, -81, 85, -6, -57, -45, 83, -64, 87, 118, -104, + 27, -21, 88, 4, -17, -68, 3, 57, 116, 12, 123, 49, -74, -78, -72, 126, 18, -92, -40, + 106, 38, -67, 31, -124, -70, -78, 3, 37, 4, -62, -102, 34, -69, -101, -18, -72, -117, -73, + 18, 34, -68, -14, -40, -19, -26, 118, 15, 48, -40, 55, 127, -20, -7, 51, -95, 52, 75, + -54, -93, 39, -18, -116, 30, 117, 109, 70, -17, -29, 102, 95, -101, 28, 65, 5, 26, -74, + -110, 17, 23, 18, -10, -53, -91, -119, 49, -97, 105, 12, -13, -79, -4, -26, -24, -32, -1, + -114, 27, -120, -52, 87, 109, 6, 104, 11, 82, 57, -113, 100, -72, -94, 52, -123, 0, -51, + -73, -80, 29, 8, -64, 116, 7, 76, 25, 77, -40, -119, -18, -109, 91, 13, -6, 3, 63, + 109, 66, -63, 99, -7, 5, 3, -36, -126, 48, 54, -49, 37, 116, -29, 71, -123, 10, 120, + 23, 98, -77, -12, -41, 15, -62, -86, 21, 12, -120, 45, -35, -106, 53, -47, -6, -46, -59, + 32, 42, 5, -77, 79, -19, 86, -62, 15, -25, 67, -71, 21, 39, 64, -1, 122, 117, 100, + -71, -92, -32, 118, -79, 69, -60, 91, -43, 60, 97, -45, -86, 69, 38, -108, -20, 25, -76, + 39, 97, -23, 53, -54, -68, -116, 104, -70, -6, 21, 101, -105, -33, -7, -105, -26, 57, -95, + -114, -1, 55, -101, 123, -61, 21, 75, -46, -32, 21, 97, -57, 25, 95, 115, -7, 13, -57, + 41, -101, 23, 77, -63, -91, 12, -75, 41, 43, 33, 48, 20, -92, -95, 85, -15, 82, 75, + -33, 81, -73, -56, -121, -105, 116, -110, 62, -91, -51, 41, 109, 12, 87, 114, 64, 102, -69, + 16, -13, 86, -106, -91, 103, -95, -55, -96, -97, 112, -63, 66, 37, -12, -126, -5, -110, 0, + 68, -54, -74, -98, -121, 120, -114, -57, 114, 75, -26, 25, 19, 20, 10, -106, 56, -38, -127, + 8, -75, 12, 35, 27, -109, 16, 39, 113, -64, 63, -28, 37, 32, -54, -51}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/bias.h new file mode 100644 index 00000000..433b1696 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t *const int16xint8xint32_2_bias = NULL; + +const int32_t *const int16xint8xint32_2_biases = int16xint8xint32_2_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/config_data.h new file mode 100644 index 00000000..4001567d --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/config_data.h @@ -0,0 +1,25 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#define INT16XINT8XINT32_2_IN_CH 55 +#define INT16XINT8XINT32_2_OUT_CH 9 +#define INT16XINT8XINT32_2_INPUT_W 10 +#define INT16XINT8XINT32_2_INPUT_H 8 +#define INT16XINT8XINT32_2_FILTER_X 9 +#define INT16XINT8XINT32_2_FILTER_Y 4 +#define INT16XINT8XINT32_2_PADDING VALID +#define INT16XINT8XINT32_2_STRIDE_X 1 +#define INT16XINT8XINT32_2_STRIDE_Y 1 +#define INT16XINT8XINT32_2_DILATION_X 1 +#define INT16XINT8XINT32_2_DILATION_Y 1 +#define INT16XINT8XINT32_2_BATCH_SIZE 1 +#define INT16XINT8XINT32_2_OUT_ACTIVATION_MIN -32768 +#define INT16XINT8XINT32_2_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8XINT32_2_INPUT_BATCHES 1 +#define INT16XINT8XINT32_2_PAD_X 0 +#define INT16XINT8XINT32_2_PAD_Y 0 +#define INT16XINT8XINT32_2_OUTPUT_H 5 +#define INT16XINT8XINT32_2_OUTPUT_W 2 +#define INT16XINT8XINT32_2_DST_SIZE 90 +#define INT16XINT8XINT32_2_INPUT_OFFSET 0 +#define INT16XINT8XINT32_2_OUTPUT_OFFSET 0 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/input.h new file mode 100644 index 00000000..438aec92 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/input.h @@ -0,0 +1,321 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_2_input[4400] = { + -10081, -19457, 14902, 1551, 6086, -4362, 18312, -31060, 26654, -6742, -13690, 16760, 6829, -29272, + -4851, 18399, -16870, 20596, 6063, -13501, 6644, 3264, -30232, 1120, -26611, -853, -4458, -4490, + -13015, 14399, 7443, -14521, -31823, 7584, -4233, -11812, -28395, -13778, -6804, -9581, -4635, -13770, + -17184, 21966, -29991, -13272, -4939, 246, -6772, 1308, -24853, 8598, -28459, 20685, 19730, 28549, + -5068, -11456, -23318, -31779, -19903, -7146, -16452, 16739, -30923, 28703, 20471, -18915, 24245, 14177, + -14761, 27806, -11324, 11622, 9986, -22483, 32243, 30006, -2002, -12627, -24148, 31302, -27805, 6946, + -29640, 27370, -32657, 7484, -3311, 25075, -14770, -25524, -28556, 24911, 3840, 8240, -31810, 6640, + 31851, 25999, 6247, -12820, 8330, -12278, 21626, 10598, 6704, -30301, -7262, 12361, 23835, -16813, + -25145, 8658, -21111, 8767, 10852, -10676, 28185, 5051, 23210, 3662, -4362, 27439, -19859, 30499, + 16928, 2639, -18662, -14970, 59, 7416, 16143, -2474, 29799, -3070, -27300, -16184, 26152, -3238, + 8155, -8019, 9627, 19514, -11231, -6631, 6712, -20081, 18060, 32381, -11614, -16259, 32437, -26985, + -23732, -3042, -1843, -30768, 16894, 22539, -9044, 25795, -30023, -23124, -15619, -717, 32322, -6898, + -25664, -26551, -24800, -2227, 16474, 31402, 13019, -3596, -21887, 19268, 22158, 14795, -8468, -5887, + 28713, -289, -17579, 234, -25913, 3057, 26018, -10451, -11124, 18905, -17811, 13931, -391, 23924, + -7405, 4873, 15066, 14227, 16017, -8660, -32632, 24355, 28410, 26489, -26298, 31993, -1202, 15262, + -10226, -21511, 24339, -22099, -28027, 21751, 29448, -1427, -10969, -19498, -5552, -4311, 13429, 26951, + -29137, -5131, -15237, -12951, 19153, -16085, -3624, 1223, 13727, -18117, 3137, -17740, 27001, -28818, + 31489, -9755, 6945, -9132, 20378, -21509, -12226, 713, 32200, 2977, 29127, 25465, 11939, -15393, + 30485, 32396, -25664, 26017, -8110, 22373, -1306, 4941, -23399, -17891, 31634, 12363, -21282, -26467, + -20751, -6239, 22519, 1380, -2533, -25669, 20394, -2329, -2829, -30644, 21124, -16993, -20408, -13243, + 5706, 15419, 26682, 1142, 26640, -17478, 32214, 21794, 15504, 18454, -29967, -4105, 28432, -13448, + 13199, -16217, -14454, 24922, -31028, 26419, -18248, -26654, -16000, -19208, 29706, 19213, -27462, 1622, + 23443, -7695, 7413, -28642, -18986, -28587, 15824, 14073, 2024, -20733, 1636, 31367, 31048, 22169, + 21710, 1475, -32488, -21990, 25569, -25737, 16945, 7314, -9822, 13437, -10150, 13184, 3593, 20823, + 28790, -7422, -3368, -6056, -27973, 4463, 20770, 15383, 21074, 20487, -32434, 4747, 27708, 18352, + -1385, 23043, -26562, 199, -20295, -30973, -10758, 26295, 24119, -18767, -18050, -2647, -26485, -25518, + -31384, -10355, -17630, -10097, -10898, 23439, 8316, -18775, -3963, -4664, -7550, -21910, 22581, -2096, + 17449, 1822, 30473, -21696, -7146, -22072, 17737, 18363, 29309, -7071, 17826, 7610, -15809, -23126, + -20936, -6720, -23468, 21691, -23084, 18021, 32067, 30371, -27321, 7741, 8393, 13298, -31650, -30647, + -31126, 28640, 5339, 12593, -19016, 19051, -25481, 18407, -28074, 22123, 19285, 22937, -7819, -6961, + 14868, -6295, -7303, 10225, 387, 5852, 3214, -8049, -9363, -3524, 24796, 4429, -3768, -20659, + 32662, 4734, -21636, 15715, 20840, -15565, -26136, -15823, -30710, -22340, 5583, 9754, -8679, 3740, + -21210, -6218, -15286, -14098, -18393, -12341, 10450, -26982, -21051, -1328, 12702, 23466, -30694, 28274, + -30812, -32237, -22588, 289, 28507, -4774, -25134, 20727, -2330, -11240, 7208, -32686, 22922, 14570, + 17149, -2786, -5434, 3663, -19524, 17774, 1705, 1306, -3002, -23379, -4580, -32193, -15611, 6836, + -30249, 23274, 4158, -9435, 18309, -15003, 644, -22186, -9631, 11880, 5996, -26454, 20411, 2070, + 21227, -1769, -11193, 21370, 17702, -32377, 9010, 10243, -29060, -8473, 24863, 14149, 28890, 9305, + 19250, -13793, -2981, -26112, 27717, -17770, 7468, -6275, -5412, -6462, -24987, -28557, -15794, -14118, + 32753, -22097, -23508, -14399, 8533, 1074, 4587, 30388, -16505, -27700, -629, 16439, 15203, 28671, + -5808, 3989, 28185, -8712, 5228, 12794, -4038, -14826, -22559, -16158, -22397, -2450, 1374, -21335, + 2390, 10203, 17077, 19437, -24195, 28069, 12829, 30191, -28293, -13002, -10637, -25618, 29626, 29226, + -18336, -1945, -3042, -9854, -32497, 7716, 23375, 21853, -18185, -11255, -1049, -24594, 22291, 27694, + -3496, 3844, 24279, -32467, 25689, -9304, 13047, -32551, 25789, -4898, -29929, -12415, 10117, -17128, + -16522, -24656, 20226, 2127, 31573, 9473, -26987, -26913, -25159, 1841, -29131, -25924, 21957, 13057, + -26476, -26932, -23695, -20077, 30681, 2084, -15882, -5849, -16321, 1472, 2899, 32028, 11588, 28441, + -27277, 24444, 7867, 8847, -7203, -24766, 3085, 29860, 15597, 17918, 16647, -12563, -31415, -4581, + 19102, -30454, 13545, 711, -8667, -5644, -16177, -22160, 4835, -1297, 6020, 22692, 17467, 14363, + -13674, 32754, 2117, -28360, -3696, -9723, 1041, -11813, 18163, -9470, 12343, -24774, -2461, 11744, + 15205, 4969, -32172, -17177, -31114, 11064, 3355, 28832, -20142, 17941, 32366, 16514, 6755, 28876, + -32524, -16742, 24000, -12964, -21640, 28218, 27052, 25761, 22730, 18674, -1574, 25683, -21248, -31315, + -4304, 29391, 24985, 32187, 24309, -28172, -28193, 2150, 14298, -18024, -27587, 22624, 6794, -9071, + -24418, -8877, -7557, -17899, -10088, 32673, 20507, -2628, 30, -31925, -32529, -27825, -30884, 27350, + -27386, 26370, -8836, 8734, -920, -5256, 20478, -19100, -1299, -12181, -31985, 8756, -5309, 29742, + 21634, 24079, 27236, -18129, -17658, -2140, 6483, 9630, -25510, 29196, 3785, -14840, 6738, -25664, + -28179, 19716, -18506, -30382, -15657, 2754, -10344, -5918, 22878, -1014, 12631, 1368, -22702, 30704, + 15699, -23909, -7501, 17441, 17966, 24785, 5983, 23308, 6744, -31312, -9650, -29989, -31894, -9654, + 18883, -5274, 9702, -31513, 844, 13582, -23485, 1563, -22541, 21432, -30686, 31874, 7435, -16971, + -18896, 30594, -21419, -18563, 3897, -22665, -6299, -5747, -29413, 26636, 27211, 21928, -7153, 7638, + 23657, -19402, -28792, -25645, 14125, 20540, -1539, -5422, -10046, -20148, -26808, 25005, -14214, -22442, + 24128, 28547, -27169, -26497, 7227, 6900, -26772, -29927, 2540, -24064, 4904, -9091, -14402, 2659, + 2826, 4024, -17840, 22919, 1274, 32057, 31356, 30064, 5647, -23429, -6604, -4011, 5549, 2179, + -15510, 3228, 22819, -13435, 25300, 7878, -31231, -25003, 31009, 17335, -19891, 23754, 30898, -5636, + 4188, -5400, -25701, -22521, 25768, 17016, 32310, -10745, 21111, 10800, -30981, -32265, 3812, 21361, + 10225, -16586, -21273, 28725, -15177, -19675, 11846, 21102, 18547, 19172, -11309, -21676, 30679, 22761, + -30708, 10956, 25595, 7751, -7905, -29837, -2505, -4727, 2792, -2863, 14973, -4495, -25994, -9356, + 11899, -6621, 32468, 17906, 4188, -2652, 32023, 27748, 5858, -6658, -22078, -23555, -30394, -11079, + -29368, 15513, -25649, 17689, 10179, 1014, -11058, -10547, 19292, 157, -30164, 5605, -22277, -29190, + 22869, 4474, -6441, 32748, 21722, 5702, -14359, -28634, 3916, 32101, 10182, -20184, -19638, 10714, + 30639, 17747, -10688, -6847, 4508, -12494, -21298, -23412, 26014, 6916, 12196, -10575, -23772, 1287, + -5962, 15526, 15312, -11962, 7040, 7961, -13401, -10023, 22189, 23610, 15238, -27174, 20994, 16227, + -2916, 12714, 28102, -30819, -770, 379, -12906, -16732, 4511, -11249, -18957, 10902, 10597, 9195, + -29062, -3027, 21345, -20992, 25004, 17680, 28354, -22125, -31394, -22132, 21794, -31971, 7622, -31332, + -14463, 15269, -29933, -7725, 30976, -22211, 8432, 13299, -2468, 13113, 13716, 14486, 24227, -12217, + -6323, 22979, 29167, -21695, -8142, -8487, 29532, 32697, -19579, 32690, 15152, 4220, -19180, 24881, + -19450, -7249, -26501, -3043, 17756, 23516, -26460, 28421, 24285, 12342, -5210, -31136, -24707, 26213, + 30685, 9059, -28066, -9706, -1718, 9988, -17876, 31021, 19901, -25404, -24704, 1045, 19790, -27381, + 9226, 5689, -24310, -26452, -7938, 32485, 5681, 30151, 26448, -5283, 14443, -25785, 26514, -6321, + -28141, 4541, 21732, 19366, -10258, -8218, 6555, -31012, 9108, -20426, 20349, -2098, -10553, 737, + 11332, -29462, -21897, 26633, 11142, -11442, 4461, 3896, 2268, -24010, -27704, 3902, 11226, 23528, + 7565, -9348, -28019, -20808, -32145, 759, -24890, 25232, 26342, -16542, -31516, 3154, 786, -25946, + 17912, 20004, -16587, -21440, 13624, -8574, -4640, -15215, 6692, -19, -2275, 4599, 12265, 21338, + -21585, -8711, -25607, 634, -24856, -31490, -14452, -21141, 26438, -23532, -31948, 23338, 20465, 30556, + 2428, 6456, 25002, 12857, 14188, 29680, 20889, -21432, 30843, -18479, 20156, -25880, -26228, -26693, + 26861, -7534, 7129, 7878, -14161, -6581, -11612, 7762, 11158, 24986, -8898, -8214, -8387, -3752, + -2558, -11588, -10611, -24767, -15961, -20294, 17437, -22198, 12885, 25752, -32344, -13223, -7223, 4132, + -27040, 10154, -26740, 10933, 22354, 4882, -21363, 139, -13942, 30157, 10876, 21198, 24930, 11784, + -17040, -27148, -1207, 28051, 3294, -7176, -28059, -31271, 30426, -5294, -19267, 12088, 195, 6300, + 167, -23326, 18851, 19124, -2558, -32257, -22219, -26949, -14541, -23720, 17542, 7615, 28510, 23667, + 8799, 27204, 23720, -11103, 19235, 7894, -7005, -8829, 13411, 4806, -28543, -8121, -8501, -15878, + 12574, -12640, 8836, 10933, -1163, 6693, 10146, -23982, -18591, 31375, -32555, -11306, -23291, 8399, + 19863, 16615, -17493, -14365, 392, 23121, 10178, -18728, 2271, -4867, 18069, -23290, -5357, 26927, + -22582, -5353, -1664, 12855, -6902, -14563, -24555, 26581, 2591, 27617, 21852, -14196, 1078, 14015, + 3495, 3370, 32573, 12472, -26513, 19778, -28995, -7317, -26481, -3402, 15630, 734, -13213, 13524, + -24838, -6684, 1953, 12152, 2369, -12241, -29549, -3546, -10191, 8029, 12566, 27004, -9838, -9719, + 32004, 6942, -11927, -5956, -11026, -8797, 14444, -23953, -17876, 26457, 10374, -31103, -16919, -7358, + -30805, -8276, -27061, -22912, 15760, -22373, -24445, 22958, -2722, -22870, 3829, 12284, 21794, -24618, + -31752, -8791, 6797, 5300, -3914, -30815, -24964, 19881, 15894, -1852, 18641, -7584, -1989, -27811, + 2027, 8616, -12066, 6501, -22640, -6823, -13772, -5016, -31216, 16333, -10776, 27206, -8095, -28699, + 16513, -11030, -7676, -11227, 5069, -24971, -11021, -4973, 8010, -29928, 13272, 29569, -4662, -11099, + -13126, -27138, 8158, 10520, -9207, 11746, 8675, 29484, 24234, -27171, 1614, 7993, -32125, -9578, + 15360, -27217, -24945, -24473, 5459, -20155, 18079, 21035, -11703, 11515, -10668, -2824, 32221, -18732, + 32241, 24257, -19547, -23835, 27145, -4304, -6946, 26831, -30016, 32442, 20693, -22198, -349, 5083, + 11970, 29198, 13166, 10396, -10411, -13925, 23134, -1259, -18960, -20582, 28725, 12970, 31351, -20684, + -30991, -21193, 3528, -9988, 20912, 4218, -6216, -2513, -3450, 16614, -17755, -64, 24888, 30997, + -12368, 3441, -15591, 12371, -11655, -19084, 26339, -21376, -16682, 22396, 14404, -14835, 25311, 9107, + -7938, 4221, 25038, -20973, 11101, 15279, -10290, -22931, -25878, 31829, -2181, 17913, 14160, 12066, + -25402, 18665, 22242, 18421, -6707, 6481, 1209, -2931, 17104, 30114, 26406, 23940, -2962, 17066, + 4026, 32763, -12773, -5889, -32665, 16607, 26590, -17238, 21637, -7071, 26378, -12313, -19158, -27090, + -31873, -1526, 12076, 13330, 5039, 27588, 27433, 25692, -22028, 30417, -300, 1798, -24425, 14367, + -29455, -15047, 12020, -13403, -21559, 24931, 12558, -7834, -32002, 4313, -32122, 25165, 26857, -6610, + -9297, -14910, 18284, -14083, -8603, 2291, 31582, -18017, -15422, 32717, 25895, -24479, -14788, -23621, + 19963, -13599, 25927, 28845, -23625, -26799, -31908, -25962, -1602, 13968, 29582, 12206, 28634, 13249, + 12708, -6299, -4046, 28628, 10646, -31834, 11420, 20482, -5351, -7616, -6778, -19552, -8131, -26560, + 10693, 4447, 26785, 19078, -27253, -9986, -92, 6684, 4322, -16293, -17276, -6155, -24174, 2768, + 12234, 5100, -8794, -20267, -11798, 13248, -15077, -13405, 2007, -19221, -428, 19613, 15035, -11393, + 24224, 21277, 10655, 27039, 1545, 29328, 29820, -26829, 6526, -17961, -27750, 11727, -16444, -1622, + 9402, -19604, 20727, 10101, -7324, -23624, 2164, -25180, -14267, 20431, -26558, -16359, -21047, -14805, + -27409, -10476, 27131, 3886, -23862, -15921, -10332, 25026, 18253, -1994, 3078, -23617, 1163, 16582, + 579, -6430, 27448, 18750, 4736, -28796, -15851, -12160, -25074, -6352, -24665, -24502, -11760, 12894, + -5269, 15440, 6950, -12967, -20122, 477, -30297, 31574, 14428, -1088, 5922, 27553, -27940, 28313, + 1226, 4216, -18154, 4330, -15165, 32450, -10196, -15867, 14073, -18980, -24199, 23879, 28737, -3053, + 1654, -4708, 8901, 16274, 14857, -25534, 26066, 32733, 2103, -4815, 6452, 6628, -32594, 28557, + 14368, 16336, 6457, 4041, 14248, -32283, -24195, 6309, -1699, 29446, -19140, 4111, -14125, 1765, + 10756, 30738, 30706, 21925, -6088, -32366, -31160, -8518, -5406, 32224, 7833, -24500, -31831, -14609, + -8095, 29040, 5853, 7816, -23087, 7534, 3335, -16996, -22486, -12716, 24843, -22668, 5020, -1649, + 26867, 30894, -10923, 4253, 24491, -25694, -6478, 32729, -5934, 24250, -16185, -15753, 14917, 3450, + 24923, 29711, -20894, -17469, 26215, -25701, 11907, 16234, 27925, -28987, -1756, -13629, 3731, -7285, + -31435, 12491, -28714, 24464, 15841, 25768, 14155, 27383, 18219, -178, 2679, -24020, -18375, 17959, + -5917, 5655, -11429, -9131, 21768, 1311, 13779, 16699, -28160, -19857, -2332, -10874, 15684, 24874, + 11306, 25131, -28775, -16690, 3042, 4333, -22331, -14906, 12442, -29, -1215, 4741, 19341, -21187, + -9141, -26689, 29020, 2354, -29584, 29281, 10960, -5976, 19935, 28771, -17668, -13495, -4251, -19163, + 1933, 28430, 3570, -27068, 6838, -24815, 7040, 3157, 8672, 25366, -28791, -20565, -10676, 27766, + 24778, -27086, -1258, 1523, 28678, -3104, 11013, 27971, -23034, -13793, -26449, 28230, -30520, -18873, + 7241, -8238, 19028, 12971, -26682, 5805, 7016, 29972, -1573, 24296, 24952, -18297, 2257, 15930, + -26538, -30524, -16034, -9390, 32756, 7692, 27591, 16932, -18863, 30155, 7377, -19337, 3570, -17601, + -17584, -27001, 14182, -12570, -4602, -16317, -11424, -18983, -25134, -22872, 18954, 21936, 9054, 5843, + 3994, 534, 21876, 7676, -11777, -20187, 28001, -12283, -25663, -28341, -830, 24850, -26822, 19659, + -2170, 15921, -14316, -26809, -12739, 3870, 3460, 17268, -4739, -15973, -22626, -17059, 22471, 5802, + 4386, 12419, -22291, 25775, 10348, -24642, -32545, 26585, -9187, -1075, 20251, 19123, 31314, -13737, + 21501, 22596, -12004, -28975, -31840, -19485, -6438, -15034, 12532, 2068, -22010, 6062, -18179, -24557, + 9765, -5952, -15106, 14709, -32529, 28517, 27328, 18014, 59, 19142, -23674, -26715, 14367, 1007, + 4955, 12449, -28084, 20678, -17616, -30160, 23141, 17756, 14188, -15848, 7165, -4039, 2893, 22082, + -17321, 208, -30457, 4435, -11462, -17192, 15840, -16965, 8513, -26874, 923, 3666, -26397, -23842, + 12331, -12427, 25063, -19960, 2276, 26947, 23193, -1691, -23775, 8397, -10502, 23094, -23731, -7627, + 14013, 28503, -10911, 26817, 859, 22719, 23089, -3341, 32268, -10098, -30400, 2028, -20207, -11667, + 16394, 20790, 11980, -17298, 9213, -6858, -21732, 11519, -11638, -18063, 31106, -27515, 3606, 3798, + -20499, -11728, -17656, 9236, -17190, 6388, 18029, 3778, -4916, 8163, 10363, 25542, 20409, -31351, + 31887, 7928, -9625, 25561, -24570, 16142, -21530, -8460, 22767, -19397, -30631, -6970, 15523, 11290, + 26900, 27950, 27740, -29556, 15890, -12663, -14610, 5351, 28704, -20729, 10322, -26062, 20796, -26320, + 9251, 18844, 31734, 13951, -17121, -14139, 28326, 4071, 14389, 9871, -16422, 30589, -19990, 14375, + 22930, 6021, -10852, -18441, -3727, 31230, 219, 32377, -27371, 14955, 14396, 27924, -15290, 32725, + 12390, 25897, -27498, -27032, -24909, -25944, 19653, -10821, 19499, -5818, -30688, -20839, -7704, -2995, + 16803, -10670, 5894, -11243, 886, -32510, -20769, 11054, -15630, 28371, -1748, 8944, 28756, -19708, + 20059, 17058, 8558, 22594, 6396, 21872, -3109, 20999, 3857, -19677, -11631, -19919, 21155, -25155, + -12639, -16552, -25128, 31898, 31199, 3794, -1362, -156, -8061, -26982, 13177, 13701, -15341, 3435, + 28642, -22771, 7526, -7065, -28408, -21042, -2113, -21422, -21027, -3858, 28201, -18618, 12144, -21184, + -31488, -23820, -5709, 8161, -12684, -21381, 14064, 18881, 1922, -14116, -1381, 3002, -12475, 9277, + 27194, 18101, -30654, 12705, 17974, 25687, -32727, 11906, -16277, -30154, 1721, 20618, 18534, 14598, + 8573, 17653, 31542, -29760, -23441, -21552, -3696, -26844, -23953, 19594, 24984, 11600, -8369, -21214, + 8186, -6947, -25195, 27814, -5191, 12890, -7380, -26616, -30352, 12855, -31605, -31388, -29178, -1446, + -1326, -11995, 19578, -26893, -27791, 11844, -21002, 31416, -6867, 7797, 613, 30438, -13988, -16244, + 14485, 10827, -5288, 7829, 13139, 22654, 6464, 26096, -14258, 4407, -22410, -6248, -653, -1142, + 19532, -30127, -30706, 27918, 3155, -510, -14271, 23741, -11626, -22235, -21841, 8013, -32065, -7008, + 14319, -24247, 32708, 2227, 5977, -28922, -20713, -31504, 6551, -15556, -29840, 1670, 32128, 14620, + -315, 23290, -9681, -99, -15701, 1283, -25933, -32721, 1307, 25584, -25162, -26900, 31254, 22650, + -27669, -204, -22697, 29748, -12245, -11276, 17822, -18224, -28839, -23029, -15441, 19342, 25933, 15336, + -13960, -27064, -25927, 29060, -19125, -14983, 10333, -15538, 3460, 14369, 13123, -9103, 5404, -27303, + 2289, -13145, -11593, 8107, 20406, -29460, 21382, 27839, -5967, -23251, 20302, 4773, -25310, -9611, + -24223, -13425, 8888, -24121, 5068, -18090, 21270, 13669, 7912, 27678, 21435, 47, -10621, 10272, + 27701, 5728, -16177, -14232, 16257, -11773, 17063, 26359, 25161, 27427, -2998, 29222, -10295, 133, + 3923, -24356, -7349, 31018, -7743, -21589, 27672, 18159, 926, -32500, -29452, -12045, -3880, 16452, + -30523, 29474, 7623, 6581, -13904, -1434, -16162, -27186, 7671, 27244, 31541, 24664, 30683, -16653, + 10758, 12420, -22503, -20970, -25763, 29586, 8824, -2313, 18737, 25015, -30461, -840, -32760, 8431, + -14624, 14980, 30125, -20208, -22205, 13856, -4800, 1317, 18029, -31578, 25345, -20224, 30339, 3893, + -23734, 13486, -5135, -4387, 24946, 25551, -15161, -31229, -23573, -27701, 8187, -15959, -21318, -18384, + 24359, 659, -28781, -17151, 22561, -16404, 20558, 28841, -2457, 28023, -25556, -14607, 26624, 16677, + 23541, 7505, -29535, 1663, -29084, 5416, 7198, 13600, -17563, 26256, -24242, 7456, 25597, -23275, + 1214, 10383, -19670, 17549, 6577, 32468, -20785, 12442, 22050, 32394, -6557, -23655, -17888, -31360, + -6298, -20759, 1466, -3953, 7812, -30981, 28803, 8673, 4006, -27212, 12681, 17255, 1719, 8229, + -17821, 17215, -10196, 3987, 7462, -1882, 17144, 29828, 2147, -22101, -8013, 22661, 4210, 9868, + -2637, 31618, -15726, -27662, 3800, 21738, -6939, -10516, 17959, 28303, 6610, -7275, -20256, 13726, + 13987, 7347, -25795, -21344, -16702, 17658, -7532, -25206, 25868, -30360, 836, 23345, 1000, 27323, + 1649, -7650, 29744, -17588, -1248, 19057, -30149, -12710, -29095, 15431, 18165, 30463, -1080, 16547, + -32196, -23215, 10457, -22867, 17045, 17506, -32171, 16495, 27850, 32658, -29848, 22546, 30324, 25153, + -27991, 2897, -18522, -29275, -31087, 19411, 21566, 21142, 14624, -27215, 22229, 30766, -32579, 16609, + 10940, -15584, -85, 18623, 10289, -313, 6011, 7111, -20790, -16186, 10863, -14541, -28893, -20715, + -12147, 9649, -17409, -28741, 19739, 26242, -14703, 31618, 19245, -12151, -24933, 11081, -29215, 2732, + 32272, -6113, -9932, 21361, 8775, -12602, 466, 20798, -17952, 514, 31940, 31220, -24714, 12967, + 28308, -23093, -21400, 20014, 4903, -15018, 21629, 14764, 9571, -30268, 1316, -7735, 4183, 7043, + 6278, -29434, -32457, 27664, 10336, 26010, -25015, -27653, -24209, -20415, 27714, 5617, 2796, -10039, + 22354, -32308, -8826, 13502, -20032, 9766, 9773, 4942, 21929, 22063, 7084, -30418, -14718, -16784, + 29983, 20719, 28927, 25381, 20057, 27101, 11333, -32757, 9437, 7036, -12384, 5144, -6191, 1100, + 2082, 27115, -5783, -30274, -3269, -5830, 17014, -20438, 22884, 28978, 6094, 30335, 16201, 4867, + 6788, 10269, -30698, 20901, 13751, 6933, 21607, -20197, -17185, 31475, 27479, -117, -3012, 9498, + -9328, 21954, 27623, 30818, -12675, -10876, -3439, -15593, 30946, -26975, -32545, 20349, 15991, -24879, + 20828, -31849, 31017, 5711, -20102, -6252, 22527, -271, 16879, -31403, -20804, 18701, -21855, 11596, + 8760, -9588, 19468, -16506, 24286, -26056, 25217, -23987, -205, -17741, 24651, -26573, 15805, 6728, + 8063, 23450, 23415, -28234, 19853, -24982, 26974, 6222, 8003, -24770, -13438, 4577, -30520, -28492, + 23027, -7927, 13558, -32237, 9966, -7055, 6034, 27694, -20854, -4108, -12310, -6850, 15019, 30155, + -31501, -744, 24215, -28749, -20522, 3157, 4809, 32444, -11118, 10637, -17247, 9269, 29083, 18527, + 1847, -362, 29756, 11841, -14435, -24754, 16706, 29936, -18798, -17635, -29215, 19981, 8938, 676, + 32168, 21463, 3195, -17974, -25379, 28201, -17764, 20786, -9949, -6698, 8084, 25874, -15553, -21745, + 31832, 15919, 19420, -31954, -28650, -9702, 18784, -21652, -7926, -16392, 7750, 5380, -5533, -10447, + 14729, 30466, -2047, -15598, -24826, -32667, -14769, -11487, -12060, -10983, 25825, 9447, 19203, 32023, + -21924, 5446, 6098, -19829, 4487, 12195, 18450, 116, 13270, 9145, 5494, 776, -21516, 18569, + -3816, 16587, -32592, -18988, -24813, 6731, 398, 14998, 3673, -27648, 12067, -24192, -20838, -13012, + 11962, 9114, -31815, 2097, 31236, -4998, 28496, -31826, -7732, 20609, 30202, 9770, 22369, -22512, + -21532, 16543, -23239, 18437, -13087, -14869, 21495, -11875, 13690, 8548, 6193, -5396, 20608, 21741, + 16033, 9042, 17380, -12465, -26300, -1902, -6305, 31901, -15000, -5589, 9974, -10237, -25631, 19772, + 2519, 20502, -30485, -14401, 14354, 30988, 26602, -23650, 16820, 6478, 24908, -3040, 17576, -14997, + -551, 31776, 27099, -3554, 3379, -32282, -4024, -31634, 16305, 24546, 10557, 31763, -6418, -5326, + -6095, 12393, -14992, -14306, -16667, 2153, -16675, -13499, 11847, -29533, -21456, 24351, 20729, -23256, + -4423, 7097, -10027, -27877, 5951, -7841, -19779, -26046, -22095, 27656, 28649, 14993, -3177, -5963, + -20691, 23450, -24220, -18645, -1935, 8458, 17639, 16051, 3936, 13260, 30231, -26478, -12844, -23847, + -29651, -6121, 23538, 21044, 187, -4605, 17590, -18377, 1509, 23515, 26155, 8547, 6925, 23638, + -30360, -2507, -29029, 6272, -22096, 607, 1421, 10743, 29074, -12332, 6299, 7149, 29635, -19116, + 7681, 20561, 3081, 24219, -1554, 30212, 12960, 28714, 11895, 21746, 18963, -18268, -4692, 12805, + 26414, -4197, 11148, -3627, -11097, 17455, -4207, -904, 26743, -18199, -9835, -19226, 2679, -5753, + 29527, 5916, 26519, -17202, 32055, -12887, -3061, 26281, 14699, 5829, -8114, 6208, 9910, -3937, + -20582, 22027, 8142, 27307, 14126, 6417, 12462, -24141, 1965, 6877, 30161, -3829, -26672, -24084, + 30481, 23253, 16139, 10266, -23097, 32373, 20804, 8716, 26895, -7227, 25054, 31972, 2625, 27681, + -14376, 32268, 17413, -29956, 15871, 11157, -11870, -9570, 2586, -1110, 24093, 27576, 16752, -18621, + -173, 28673, 8644, -11853, 8431, 10260, -11897, 20243, -8219, -11644, 2701, 20520, 13991, 3541, + 32415, -8353, -5792, 3152, -969, 4285, -22682, 23162, -24192, -30073, -17915, -19713, 10504, 23669, + -10996, -18944, -7206, -9863, 10856, -31547, 13926, 9674, -17918, -16440, -28314, -2420, -18496, 5888, + -28269, 5813, -21466, -24341, -1613, 19282, -31605, -20111, -13467, -261, 21381, 20317, 6697, 1112, + 2516, -6628, 2744, 28775, -118, 12514, -35, -14686, -15695, 7917, 16916, -23594, -24986, -2068, + -2995, -19290, 23432, -20127, 6010, -24773, 24936, 17855, 6843, -24629, 1678, 21310, 22072, -3706, + -708, -22720, 31937, -28687, -28772, -6508, -3473, 10248, 2602, 10363, -4882, -30769, -18259, 4009, + 9635, -28402, 7513, -30491, 22819, 29250, -1479, -16860, 14969, -19013, -14096, 10878, -25108, 25498, + -19194, -14350, -24953, -16962, -20374, 3792, 32668, 15402, -30276, -13258, -17708, -28973, 9880, -17859, + 18799, 3661, 4906, -10667, 4556, 25607, -30358, 17200, 19551, -17866, -16026, -21221, -4356, -24710, + 3332, -16574, 20607, -29966, -5609, -12601, -26290, -31865, -3789, -1714, -39, 8776, -7560, 9768, + -24709, -23614, 23035, -30218, 31150, 17009, 27690, -4778, -14311, 22115, -10240, 401, -23711, -8555, + -4302, 22300, -1419, 17709, -3971, -13080, -27561, 19993, 5149, 17673, -13627, 10774, -4250, -31913, + 18301, -20396, 32193, 5766, 5541, -29947, 10617, -23370, -5481, 16173, 13157, 24244, 1426, 24866, + 2424, 27212, -23794, 15502, 15608, 10548, 11231, 21705, -23169, -23752, 10052, 18936, -19585, -32432, + -24680, 30264, 1190, -2597, -3314, -29151, 28810, 16417, 13105, -15702, -15121, 14816, 25887, 26221, + -27849, 19512, -21404, 1040, -28823, -23841, 25569, -31063, 30113, -31725, -625, 14159, -25861, 1121, + -18340, 30674, 13572, 12574, -29221, -11379, 14998, 27771, -20729, 18723, 23665, -285, 32751, 699, + 27536, 20105, 4877, 32234, 31420, 14584, 5881, 22245, -6265, -31194, -1334, -5279, 21009, 1681, + -117, 3062, 15174, 28716, -13491, 11035, -23483, -21511, 18156, -16150, 19810, 27621, -387, -22457, + 1219, 13240, 11874, -23505, -27233, 20972, 25218, -30270, -10370, -9624, -6481, -23863, -27322, 31489, + -19700, 32442, 1873, 1225, 3946, -9387, 19779, -29751, 14132, 26679, 23976, -9499, -16925, 13926, + 19641, -3625, 30075, 8006, -30354, 20472, 28992, -26542, -26440, -6048, 11928, 8164, 26221, 20077, + -13912, -19928, 23773, -13130, 4388, 31083, -29783, -11162, -13328, -29072, 25575, -5313, 6779, 10571, + 1261, 1557, 20814, 14900, -31443, 10224, 12231, -21872, -8949, -25195, 18851, 5034, -19636, 17738, + -25557, 24739, 11973, 9593, -4222, -20205, 29234, -8282, 13331, 24438, 3565, 10806, -28973, -24187, + -7040, -18018, -2814, -3412, 646, -25558, -26002, 11720, 28545, -9148, 4752, 28096, -26503, -26962, + 20515, -28378, 3048, -22976, 5796, -5652, -1057, -22150, 32579, 18574, 15562, -5604, -26189, -1120, + 15869, 24441, 18749, 20418, -29645, -22916, 17124, -17451, 7223, 22703, -7924, 1928, 30392, -17733, + 13190, 19925, -6796, -12287, -31220, -11398, 15470, -31137, 30224, 27360, 14406, -1355, -4273, -25673, + -31284, 3097, -10665, 12551, 11740, -25450, 18012, 30944, -14410, 10879, -5575, -20795, -26806, 14162, + 22226, -4160, -10190, 16263, 3334, -13613, -19371, 6847, -27695, 10750, -27931, 21477, -31274, -660, + -27899, -23790, 19954, 13921, 15053, 20203, 14012, 30415, 21665, -15275, 26557, 7510, 12663, -1385, + 23019, 15661, 14590, -5466, -1449, 25081, -25835, -11170, -27526, 685, -29412, 12480, 9177, -5211, + -26888, -10570, 27246, 4381, 508, -25642, -3072, -24171, -18590, -24106, 19677, -27581, -11562, -28667, + 12856, 13193, 8842, -24245, -28326, -10421, -14927, 15607, -14188, 12695, -30520, 3789, -28790, 16405, + 31057, -8416, -24840, 25338, -1599, -16073, 20385, -22299, 28069, 20577, -945, 17169, 6055, -19895, + 11878, 21766, -18821, -25, 17846, -15073, 20524, 22416, 28483, -19630, 32391, 29226, -28060, -12823, + -13486, 15155, 17900, 388, -32425, 15485, -5954, 24257, -13608, -31607, -18089, -10282, -32083, 25748, + -12297, 24981, 18754, 3691, -19207, -10350, 15311, 26585, -16936, 18178, 9397, 20118, 1667, -12073, + 8790, 5049, -19610, -11797, -12550, 18846, 2564, -3137, 19782, 28873, 19353, 2327, 2238, 3605, + -15312, -4923, -30403, -15474, 21606, -9099, 29632, -7539, 30161, -17525, -9639, 21153, 23966, 29062, + -21044, 15707, 16556, -21728, -26692, -1392, -29917, -22519, 13813, -16000, -12976, 9928, 20718, 30390, + -25223, -17821, -12788, 15712, 30459, 13331, -5822, 31315, -29424, -26706, -23825, -14120, 8905, 147, + -25392, -25167, -21738, 11736, 1499, 32628, -30024, -18564, -19230, -9595, -27956, 18573, 18028, 13665, + 22471, 20389, -7158, -30148, 21863, -32020, 559, 28194, -8792, 30970, 13877, -29669, -24886, 7578, + 31601, 9166, -9923, 1941, -28798, -8998, 18310, 8189, 26795, 26117, -30352, -12551, -749, -9238, + 18186, 8985, 7065, -29302, -22215, -28651, 23429, 2989, -19707, 11062, -29632, -25327, -15771, 26777, + 5397, 1744, 26477, -9507, -20388, -14275, 27870, 7496, -17517, -17715, -12445, 24202, -9487, 8182, + -13422, -19631, 20472, -24035, 32411, 14964, 24588, -21984, 30372, 20613, 21418, -4564, 11512, 7073, + -28639, -1593, -11466, 3424, -26004, -922, -13834, -24575, 1048, 27688, 979, -22282, 15413, 6886, + -15392, -17629, -11012, 28506, -17991, -10479, 6121, 8687, 427, 25018, 24782, -706, -24127, 16188, + -13743, -3863, 5768, -25765, -13849, -6262, -27840, -2577, 2413, 14979, 6591, -21771, 29158, -14387, + 6548, -8995, 13921, -30466, -11957, -17960, 8452, 22108, 9535, 30873, 440, -16671, 4748, -18598, + 25475, 32081, 4024, -7059, 30143, 2536, -11543, 31851, -24070, 1862, -24734, 28010, -18902, -32598, + -28547, -3948, 25287, 2631, -15893, 13282, 23888, 10925, -2516, 16160, -32551, -8606, -27124, -3378, + -10724, -31224, -468, 7072, -11429, 2215, -32467, -7821, 12618, 23317, 8656, -22615, -21737, 30023, + 24188, -18309, -17924, -6959, -711, 26097, -23415, -16673, 5277, 27012, -5479, 31147, -3887, 31887, + -13083, 15651, -1911, -3197, 18610, 12903, -29094, -31522, 19397, -22902, 2875, -5616, -17718, 28332, + 23253, 29329, 7802, -18926, 22, 9773, 25049, -3024, 18930, 24328, -7683, -15717, -9185, -22790, + -24051, -8409, 10695, -13120, 3051, 8474, 28643, 8351, 10361, 6217, -3884, 17227, 17120, 13946, + 21552, -826, 30569, -30325, -6027, 27294, -6206, -30171, 24360, 1718, -13442, 19362, 15004, 5167, + 8626, 12613, -12679, -16456, -11493, 26892, -7654, -7572, -20745, -9196, 1979, 9988, -31852, 16300, + -24578, -9937, 29843, 8034, -1997, 19708, 17370, -7975, 18324, 21225, 1195, -2492, -17942, 20738, + -21720, 27407, -18615, -5650, 2550, -21554, -16259, -25786, 31331, -24703, 8331, -6909, 13105, -9360, + -32265, -6290, 29291, 20957, -24284, -12214, -24190, -14141, -8141, -2484, -15051, 27255, -14120, 21998, + 19564, -1237, 27257, 23675, 9784, -12682, 4224, -2415, 25510, -26001, -7999, -24553, 30391, -4398, + -9037, 17827, 22348, -17508, -24297, -23795, -15290, -4300, -23450, 17196, 30079, -17538, -7162, 12277, + -5097, 17088, -17572, 7841, -1973, -13002, -6594, -23791, -20348, -2681, 21745, 32588, -27264, -20917, + 5584, 28253, 25357, 8290, 16619, 11560, 19152, 20382, 15429, 14531, -21416, -25068, -27428, -26181, + -1915, -13815, 3788, -9537, -18202, 8482, 24000, 30373, -6463, -27780, -6549, -15245, 18998, -1426, + 23283, 4664, -24623, 19335, 26062, -7993, -26829, 11089, -13065, -3288, 5769, 16315, -21862, 12932, + 30605, 4317, -2026, 14810, 9278, 27331, -29740, -9677, -28650, -30275, 31940, -13035, -22796, -6045, + 26141, -867, -11968, 3659, 7773, 26620, -6392, -2692, 25428, -13044, 31516, 4697, -2884, -4597, + 11531, 26126, -21381, 17323, 28706, 21804, 17895, -15930, 8613, 6265, 4165, 29600, 16580, 12905, + -3208, 855, -9769, -6976, 7132, -16481, 21132, 6538, -32137, 30034, 24146, -19093, -25203, 30280, + 15721, 18623, 21387, 25131, 25017, 14078, 19745, -31649, 4271, -31555, 17474, -18568, -30687, -20806, + -14414, 10677, 5817, -24317, 19872, 14600, -16906, 16590, 16139, -6097, -17704, -20183, 20479, -27993, + -15266, 9059, -13288, -32397, -14232, -22830, -12070, 8378, 7552, -17867, -32568, 31261, -28684, -22845, + 17533, 1255, 21065, 844, 3759, -7854, 16990, 23391, 9118, -10592, 23551, 19180, 18577, -30287, + 24430, -18066, 24366, -13814, -24380, -13794, 10143, 32095, -21843, 1877, -12493, 26805, -29532, -3997, + 5779, 29998, 419, 2845, -14094, -9291, -545, -5973, -30316, 10312, -11059, 4070, 6897, 4573, + -27546, -381, -4339, -19456, -27385, -30249, 6867, -13305, -6824, 25215, 24459, 18027, -9581, 27148, + -26627, -29276, -24121, -11844, 3391, 20181, -20606, 3044, -30683, 3866, 10334, -7561, -28160, -20456, + 16888, 23783, 27863, 15140, 14057, -29830, 9150, 5579, 16316, 22908, 23021, -2363, 25999, 21179, + 7583, -29264, 16843, 18530, 13058, 19826, -21541, 18868, -1287, -31067, 7099, 30425, 24787, 12861, + -3302, -24879, 18817, 17625, -28991, -17938, 15881, 26176, 31713, -18853, 23712, 32633, 29285, -19635, + 2838, 12009, 7785, 30699, 24408, 31386, -25678, 27377, 16540, 31044, -5684, -18327, 25107, -2179, + 31016, -28965, 4488, 9593, -16137, -13948, 199, 24548, -10785, -3878, -26734, 7459, -5906, 13753, + -14109, 3409, 10204, 30850, -21963, 28400, -970, -31769, 9661, 32167, 19756, 22458, -21365, -15610, + 20306, -24924, 31248, -14943, -20899, 30898, 18284, 15946, 26487, 17675, 3903, 6394, 5677, -6995, + 31356, 13433, -11853, -1976, 28010, 15429, -31462, 6549, -11686, 2847, -11405, 32506, 9183, -13511, + 30532, -20873, -21173, -3789}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output.h new file mode 100644 index 00000000..b643e231 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output.h @@ -0,0 +1,15 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_2_output[90] = { + 20652, -32768, 7237, 9162, 1743, 14708, -14513, 2315, -1237, 7130, -4158, -23769, 8296, + 2173, 13292, -32768, -23818, -11629, 17792, 5955, 5291, -13593, 3998, 13292, -20724, 21828, + 814, -18737, -20687, 14386, 7914, 21389, 5161, -16797, 9307, 4827, -6743, 6567, 24376, + -7588, 26426, 13857, -7062, -11872, -4918, 2359, -4489, 3163, 13134, 3395, -10751, 4095, + -15901, -5240, 19988, -12281, -7652, -4504, 10397, 6770, 10365, -4299, -3486, -7606, -4050, + -13987, -5269, -28914, -3389, -1213, -13073, 7540, -5834, -16890, 5933, -10027, 13674, -14757, + 4580, 6220, -12122, 2097, -12385, 12028, -9134, 9029, 1408, -5242, 24171, 13617}; + +const int16_t *const int16xint8xint32_2_output_ref = int16xint8xint32_2_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output_multiplier.h new file mode 100644 index 00000000..b47bd2ae --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output_multiplier.h @@ -0,0 +1,9 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_2_output_multiplier[9] = + {1896267360, 1894333615, 1893517140, 1893630191, 1894543342, 1894533248, 1895851048, 1896337119, 1891748709}; + +const int32_t *const int16xint8xint32_2_output_mult = int16xint8xint32_2_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output_shift.h new file mode 100644 index 00000000..71cd99e2 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_2_output_shift[9] = {-12, -12, -12, -12, -12, -12, -12, -12, -12}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/test_data.h new file mode 100644 index 00000000..33835748 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/test_data.h @@ -0,0 +1,7 @@ +#include "bias.h" +#include "config_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/weights.h new file mode 100644 index 00000000..3e844750 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_2/weights.h @@ -0,0 +1,944 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8xint32_2_weights[17820] = { + 27, -69, 116, -20, 10, -11, 70, -109, 89, -123, -104, -108, -30, 80, 32, -4, -34, -44, -82, + -111, -39, 94, 55, 36, -125, -58, 88, -23, 2, 110, 100, -121, -73, 36, 46, 52, 109, 93, + 93, -7, -11, 120, 5, 5, 55, 44, 117, -57, -19, 115, 2, -33, -109, -79, -62, 113, -98, + -4, 12, -83, 115, 110, -3, -89, 49, 57, 62, -23, 24, -78, -85, 3, 93, -92, -117, -68, + 61, 90, 82, 105, -98, 45, -122, -112, -75, 89, 44, -34, -43, -14, 3, 124, 71, 7, -101, + -39, -18, -37, -82, -2, 66, -28, 80, -7, 83, 69, -62, 117, -102, -81, 51, -14, 97, 49, + -49, -90, -118, -32, 74, -79, -71, -89, 95, 112, -13, -2, 23, -121, -75, -127, -74, 111, 72, + 15, -44, -26, -44, 16, 53, -43, 127, 100, 117, -60, 95, -18, 84, 78, -30, -48, 117, -78, + -85, 21, -17, -5, -75, -4, -111, 70, -57, 61, 110, 56, -71, -103, -102, 104, 14, 21, -82, + -89, 0, -96, -42, 65, -80, -123, 60, 81, 110, 43, -5, -1, 99, 65, 90, -57, -124, -18, + 120, -114, -87, 69, 97, -41, -113, -103, 7, -13, -101, 57, 87, -59, -56, 32, -25, 98, 120, + 109, 22, 39, -24, 114, -35, -38, 4, -51, -1, -99, -35, -12, -11, 126, -103, 11, -16, 75, + 62, -30, 30, 7, 5, -119, 51, -120, -47, -75, 53, 43, -92, -48, 123, 112, -86, -5, 49, + 111, 10, 109, 47, -102, 2, -126, 46, -76, -29, 99, 3, 85, 66, -118, -114, -44, -76, 93, + 9, -30, 1, -44, -122, 1, -58, 8, 99, -75, -124, 63, 18, 6, -39, 11, -18, -82, 57, + -57, -10, 83, 100, -34, -12, 115, 125, -96, -36, 33, -16, -94, -90, 120, 62, 74, 20, -65, + -44, 119, 17, 120, 102, 26, -7, 2, -7, -70, 76, 122, 39, -124, -39, -102, 81, -23, -22, + -80, 5, 59, 97, 84, 74, -53, 5, -112, 53, -9, 106, -81, -91, -3, 126, -35, -119, -78, + 45, -5, -45, -74, 126, -71, 13, 63, 80, -121, 25, -7, -46, -92, 74, 77, 42, 103, -12, + 105, 65, 66, 1, -11, 7, -49, -53, 15, -23, -23, -111, 69, 9, 11, -37, 113, 109, 68, + 22, 38, 15, 44, 48, -78, 16, 51, 17, -115, -18, -72, 98, 100, -63, 23, 3, -24, -13, + -68, -9, 58, -104, 60, -103, 114, 67, -112, 92, -126, 113, 106, -53, 49, -124, 34, -37, -7, + -26, -44, 108, -94, 59, 7, -96, 103, 15, -26, 52, -16, 33, 70, -68, -21, -59, -97, 43, + 16, -111, -29, -75, 105, 6, -116, -22, 19, -109, -25, 18, 116, -2, 118, 104, 62, 72, -51, + -122, -73, 59, -60, 92, -114, -47, 48, -59, 126, 61, -65, 26, 116, -76, -114, -49, -1, -75, + -125, -73, -80, 39, -16, 103, -40, 22, 18, 67, 88, 99, 117, -12, -56, 66, -105, 79, 56, + -11, 107, -81, -19, -37, -112, 64, -15, -85, -18, 69, 93, 58, 123, 126, -16, 74, 125, 107, + 16, -79, -85, 99, -105, 81, -49, 58, 21, 79, 2, -17, 85, -36, -3, -94, -40, -108, 110, + -8, -33, -89, 28, -56, 99, -39, 72, 71, -76, 94, -8, -89, 37, -112, -60, -127, -1, -78, + 39, 91, -103, 94, -34, 115, 84, 110, 29, -19, 13, 28, 2, 7, -56, -38, 100, -120, -105, + 69, -108, -59, 100, 60, 57, -72, -45, 72, -126, -5, -42, -105, 86, 55, -49, 35, -59, 80, + 69, 17, -22, -74, 16, -113, 15, 93, 62, -44, 4, -103, -88, 58, 46, -10, 115, 85, 78, + 111, 57, -34, -18, 126, 47, -43, -51, 109, -45, -26, -51, 55, -40, 112, -120, 59, 111, 28, + -51, 124, -51, -11, -75, 56, -22, 74, -120, 123, 59, -98, 87, 86, -61, -53, -53, -4, -8, + 92, 10, 0, -49, 100, 96, -58, 92, -73, -79, -10, -109, -17, -93, -61, 26, 93, 3, 53, + 91, 42, 112, -87, -44, -41, 69, 70, -2, 79, 67, 26, -16, -11, 55, 70, 14, -120, -29, + 75, -56, 7, 43, -12, 87, -65, -12, -71, 50, -21, 36, 25, -66, 70, -30, 51, 44, -20, + -12, 26, -51, -75, -9, 101, 123, 9, -32, -98, 127, 30, 4, -58, 71, 120, -6, 108, 77, + 100, 35, -114, 17, -60, -28, 10, 9, -57, -95, -44, 28, 91, 86, 39, 16, 101, 91, 71, + -115, -2, 124, -102, 112, -22, 72, 73, -52, -29, -87, 21, -102, -68, -44, -36, -103, -84, 96, + -16, 9, 117, -97, -69, 92, -114, -60, 9, -116, 81, 11, 56, -20, 8, 107, -60, 24, 106, + -79, 102, -96, -94, -61, -86, 30, 5, 88, -80, -49, 4, -77, -11, 27, -66, -74, 30, -54, + 18, 115, 77, 23, 87, -54, -19, -41, 78, -120, -24, -90, -88, 67, -86, 33, -58, -22, 79, + 118, 87, 76, 40, -22, 14, -49, 111, -34, -86, 60, 50, 86, -61, -55, 123, 50, -21, 67, + 5, 59, -106, -49, 122, -19, -43, 103, -75, -68, 1, 4, 5, 58, 119, 62, 7, 103, -85, + 110, 25, 64, -61, -55, -19, -12, -72, 15, -52, -110, 20, -117, -101, 10, -112, -85, 50, -31, + -52, 117, -39, 54, -108, 96, -38, 62, 80, -94, -37, 46, -46, 13, 4, 42, 74, 120, -104, + 87, 57, 79, -82, 69, 0, -119, 85, -9, 21, -107, 76, 16, 0, -16, -10, -47, -42, -64, + -32, 53, 18, -70, 80, -60, 109, -125, 102, 41, -73, 15, -124, -76, 79, -22, 74, -73, -33, + 92, 66, 68, 57, 49, -113, -10, 54, -36, -106, -42, 9, -103, 70, -86, -30, 122, -52, 75, + -30, -106, -120, 75, 27, 27, 118, 93, 43, 18, 54, -88, -39, 52, -97, 77, -46, -87, -39, + -79, 59, 120, -76, 79, -43, 102, 100, -113, 117, -57, 79, -37, -32, 59, 42, 85, 11, 48, + -38, 25, 12, -35, 122, 39, 54, -51, -37, -34, -25, -114, 75, -120, -22, -116, -20, -30, -107, + 45, -64, -15, -115, -102, -98, 5, -7, 99, -3, -68, 28, -16, 6, -39, -22, -127, -50, -81, + 115, -22, 74, -6, 59, -5, 97, -52, 67, 23, -49, 13, 28, -57, -14, 112, 61, 74, 38, + -82, -97, -87, 96, 63, 20, 15, -72, -84, 76, -85, 112, -24, -74, 106, 7, 18, -90, -111, + 84, 73, -19, -102, -78, -101, 9, 56, 26, -106, -79, 89, -95, -66, -87, -74, -84, -127, 61, + 88, 100, 14, -32, -72, -99, 124, -105, -62, 56, -28, 52, 106, 39, 32, 32, 24, -112, -77, + 87, -72, 54, 29, 7, -63, 108, 63, -6, -80, 32, -48, -101, 64, -56, 101, -69, -37, -124, + 114, -64, -106, -3, 39, -1, -75, 96, 58, 76, -106, 38, -33, -49, 98, 101, -82, 29, 107, + 105, -38, 120, -125, -60, 54, -47, -35, 57, -96, -13, -16, 25, 112, 62, 67, 12, 59, 73, + -106, 118, 18, 116, -42, -115, 77, -62, -83, -127, -97, -81, -26, -69, -111, -52, -56, 51, -92, + 47, -45, 5, 101, 109, 59, 70, 32, 10, -92, 115, 52, 25, 7, 78, -106, -43, 42, -90, + 96, -6, -72, -5, -91, 113, 125, 20, 13, -4, -24, 73, -113, 46, 14, -64, -112, 54, -1, + -127, 33, -100, 114, 35, -4, 60, -61, 98, -110, -46, -56, 40, 91, 104, 35, 86, 47, -50, + -38, -62, -32, 29, 40, 64, -17, -24, 114, 126, 29, 57, -63, 118, 71, -104, -98, -34, -62, + 56, 53, -79, 62, -12, -99, -90, 79, -78, -95, -80, -122, 34, 30, -79, 95, 15, 109, -72, + -15, 113, 56, -30, -79, 28, 98, -123, 107, -72, 56, 121, 63, 29, 32, 48, -50, 110, 30, + 83, -22, -56, 35, 21, 42, -83, 70, 123, -63, 108, -42, 4, -81, -38, -2, -40, -97, 0, + 55, -13, 121, 32, -76, -60, 88, -76, 105, 105, 27, 116, -67, 73, 96, 73, 89, -8, -14, + 94, -101, -29, -93, -122, 123, -32, -63, -12, -14, -2, 94, 33, -42, -89, 90, -112, -114, 23, + -118, 70, 79, 120, 123, -118, -46, 49, -126, 99, -22, -97, 36, 86, 57, -4, -23, -123, -43, + -20, -13, -126, -30, 107, -6, -17, -9, 57, 93, 85, -55, 82, 80, 84, -9, -39, -4, 38, + 5, 126, 117, -98, -11, 95, 42, 48, -14, -123, -5, -67, -35, 10, -9, 10, 76, -112, 5, + -38, 64, 24, -73, 118, 83, 86, 19, -78, -16, 77, 17, -110, 95, 24, -54, 113, -87, -100, + 5, 44, -117, -15, 61, -33, -104, -118, 101, -99, -68, -1, -111, -17, 125, 63, 86, -75, 108, + -11, 73, 40, -54, -120, 57, -90, -124, -93, 126, 4, -123, -18, 91, -114, 76, 3, 12, -40, + 14, -56, -17, -60, 84, -64, -23, -19, -15, 99, -107, -81, -95, 13, -21, 109, -79, 46, -38, + -45, 55, -104, 89, 1, 66, 68, 126, -126, -101, -84, 112, -75, -20, -101, 43, -81, -16, -2, + -110, -75, -6, 8, -36, 3, -24, -75, -54, -94, -127, 104, 49, 21, 90, -6, 7, -87, 30, + -126, -122, 116, -4, -22, 90, -17, 101, -115, 87, -83, -21, 103, 64, 68, -64, 11, 29, -74, + -14, 52, 59, 125, -38, -41, -12, -98, -124, -6, -109, 101, 91, 110, -88, 30, 83, 46, -56, + 92, -10, 101, 56, 84, 18, 108, 122, -103, -10, 111, 101, 95, -19, 80, 21, -32, -112, 27, + -17, 41, -60, -60, 110, -123, 17, 84, -118, -81, -103, 65, 19, 13, -61, 55, -63, 52, 80, + -26, 2, -126, 34, 30, 78, -87, -117, -55, -14, 84, -70, 50, 46, -100, -94, -127, 20, 43, + -67, 57, -108, -22, 25, 127, 32, -40, 79, -20, -114, 54, 78, -35, -19, -85, -45, 16, 13, + -98, -83, -115, -14, 101, 2, -43, -42, 38, -12, -2, 33, 109, 51, 47, -33, -12, -35, -43, + -73, -79, 112, -119, -42, -79, 63, 81, -2, 6, -83, -81, -69, -46, 4, -2, -56, 125, -67, + -115, 51, 93, -91, -51, 27, -108, 107, 77, 2, 7, -117, -69, -95, -59, 16, 24, -127, -121, + 20, -80, -47, 54, -91, -21, -70, -68, 12, -39, 75, 33, 85, 27, -1, -85, 109, -6, 88, + -77, 97, -10, 110, -78, -1, -21, 62, -64, 23, 4, 86, 71, -43, -99, -59, 118, -71, 90, + -94, -89, -4, -83, 69, 48, -58, 66, -108, -51, 27, -81, 126, -48, -54, 23, 106, 58, -77, + 7, 97, 29, 67, 75, 32, 96, 68, 124, -62, -73, -101, 62, 53, 30, 16, 57, -100, 79, + 35, 76, -109, -50, 48, -29, -76, 46, -85, 127, -58, 20, 43, 21, 62, -124, 21, -32, -108, + 62, 109, 67, -52, 118, 54, -46, 94, -81, -11, -110, -45, -74, -108, 105, 25, -27, -18, -127, + -6, -101, 4, 124, 107, 98, -116, -35, 86, -112, 46, -18, -27, 11, -35, -110, -38, 104, 3, + -127, 93, -87, 35, -123, -116, -124, -35, -111, 5, -33, 106, 53, -47, 69, -82, -46, -103, -70, + 32, 94, -60, 117, -44, 6, -65, 111, 79, 43, 79, 100, 67, 58, 101, 36, -20, -114, -122, + 6, 93, -58, 25, 2, 65, -108, 98, 32, -37, 24, -122, 95, 28, -4, -119, -51, 93, -37, + -67, 62, -7, 80, 37, 41, 63, 41, -4, 6, -124, 21, 107, -93, -38, 54, 63, -47, -78, + 21, 72, -97, -118, 112, -72, 89, 31, 7, -61, -82, 74, 113, 120, -20, 98, -2, 18, 32, + -98, 120, -33, -58, 1, 82, 16, 86, 75, 4, -49, -76, 42, 66, -68, -70, -60, -7, 27, + -56, -108, -59, 121, -82, -108, -115, -63, -86, -38, -14, -116, -108, -39, -31, 82, 53, -5, -96, + -61, 70, 48, 112, -19, -57, 24, -32, 24, 54, -29, -123, -34, -116, 3, -110, 63, 62, -57, + 83, -22, -92, -24, 43, 109, -101, 61, 84, 106, 25, 102, -111, -60, -70, 51, -77, 84, 100, + -110, -93, 97, -90, -75, -10, 28, -98, 9, 8, -46, 54, -121, 85, 9, -102, -111, -75, 89, + -38, -105, -53, 105, -87, 115, -98, 115, 80, 15, 90, 54, -110, -117, 4, 105, 104, 119, 44, + 53, 5, -80, 111, -108, 38, -118, 8, -107, 72, -93, -53, 17, -48, 65, -13, 53, 25, -42, + -39, 24, 65, 45, -114, 40, 97, -70, 109, -120, -31, -19, -107, 55, -108, -62, 64, -32, -38, + -47, 46, 103, 91, 4, 1, 65, 106, -109, -13, -89, 112, 85, 23, -43, 80, -127, -32, 127, + 116, 30, -123, -46, -55, -79, -13, -15, 102, -77, -24, 115, 47, 65, 24, -54, -126, 111, -62, + 61, 76, -59, 4, -7, 114, 103, 30, -80, -106, -96, -12, 19, -4, 41, 10, 120, -8, -99, + 43, 81, 20, 120, 87, 82, -87, -105, 5, 121, -126, -20, -20, 48, -16, 123, 36, -87, 59, + 68, 86, -69, 127, 93, -37, -96, -63, 118, 43, 23, -25, -100, -109, 46, 57, -5, -48, -55, + -45, 89, -46, -63, 39, -65, 15, -75, -49, -47, -91, -64, 10, -59, -121, 97, -91, 40, -86, + 19, 106, -120, 125, 21, -38, 122, 10, -75, -43, -18, 45, -46, -5, 72, 46, 26, -12, -15, + -126, -24, 27, -57, 22, -97, 10, -24, 66, 94, 113, 44, 95, 104, 31, 105, 12, 67, 1, + -4, -48, 40, -15, -52, -89, -98, 7, 112, 20, -113, 21, 20, -48, -16, -38, -63, -54, 66, + -98, -74, 3, -40, 52, -27, 57, -8, -103, -10, -95, -118, -59, -79, 20, 17, 33, 39, 20, + -2, 7, -68, -32, -57, -126, -76, -72, -79, 98, 71, 114, 28, -83, -83, -36, -51, -93, -108, + -98, 1, 125, -6, -18, 1, -99, -27, -5, -48, 13, -68, 78, 87, -27, 121, 52, 50, 8, + -101, 59, -39, -15, 26, 63, -23, -90, -68, 14, -115, 107, -125, 58, -48, -73, 3, -16, 25, + -47, 54, -35, -16, -76, 59, -62, -93, 74, 110, 3, 89, 15, 108, -118, 37, -118, -51, -21, + 81, 54, -73, -40, 54, 78, -117, 123, -20, -88, -58, -59, -44, -88, 70, -47, 79, -85, 79, + 124, 63, 114, -8, -87, -89, -82, -105, 30, -87, -8, -91, 83, -85, -52, -47, -54, -111, 81, + 88, 65, -105, -61, 112, 26, -28, 41, 120, 78, -41, 14, 64, 126, 21, -26, -92, 62, -89, + 107, -110, -7, -77, 36, 50, 4, 99, -11, -126, -44, 92, 82, 62, -43, -3, -97, -48, -73, + 58, -101, 54, 47, 52, -6, 58, 99, 95, -56, -105, -46, -18, 27, 72, -1, 43, 120, -8, + 16, 31, 87, -126, 103, -107, 105, 76, -54, 77, -98, 17, 120, 23, 13, 117, 97, 16, 48, + -73, 86, 55, 101, -61, 111, -84, -64, 108, -18, 25, 109, 11, -57, 114, -18, -69, -71, 24, + 58, 55, 114, -112, 106, -56, 125, -62, 123, 27, 107, -9, -85, -51, -96, 114, -76, -46, 43, + 114, -77, 79, -106, 105, 12, 121, -100, 122, -48, 102, -37, 62, 102, 2, -22, -19, 79, 11, + 72, -74, -26, 113, -97, 1, -79, 99, -17, 123, 97, 37, 16, -106, -1, -39, 57, -114, 102, + 71, -117, 81, -84, -26, -102, -98, 57, 101, 90, 91, -48, -118, 57, -88, -71, -47, 95, -47, + 19, 108, 60, 11, 25, -27, 111, -80, -97, -95, -22, -22, -3, -3, -23, -122, -36, 11, -33, + -16, -113, -106, -107, -51, 30, 33, 4, 117, -116, -106, -20, 50, -118, -72, 85, -66, 35, -31, + -97, -18, 73, 100, 49, -92, 74, 40, -67, 102, 127, -85, 76, 92, 23, -117, 31, 63, 61, + -5, 37, 6, -100, -112, -115, -70, 106, 9, -35, -92, -76, -49, 68, -12, 37, -118, -22, -33, + -48, -47, 18, -90, 80, 0, 82, -2, 122, 3, -3, 29, 24, -65, -31, 98, 38, -10, 101, + 69, -121, 75, 90, -120, -101, 71, 109, -93, -62, 25, -93, 117, 70, 5, -43, 30, -124, -47, + 37, 9, 62, 38, 125, 79, 78, 80, -125, 50, -14, 107, 25, -61, 16, -54, -43, 106, 106, + -69, 68, -3, 1, 56, -72, 115, -8, -117, 31, -113, -89, -16, 92, 48, -121, -87, 112, -18, + 104, -63, 92, -51, -79, -121, -105, -72, -49, -98, 85, 46, 35, -78, -26, 92, -127, -84, -80, + -8, 55, 94, 34, -116, -80, 19, -9, 103, -106, -113, 65, 31, 60, 24, -19, 76, -9, 6, + -81, 110, -17, -98, 72, -16, 29, 60, -105, 68, -110, 1, 55, -56, 12, 3, -116, 92, 19, + 80, 98, 61, 91, 13, -81, -71, 94, 53, -66, -87, -22, 13, -59, 113, -46, -52, 20, -42, + 81, 20, 75, 18, -32, -101, 109, 53, 77, 52, 109, 105, -113, 21, 63, 66, 55, 86, -59, + -26, 51, 30, -99, -27, 56, -111, 3, 112, 7, 123, 79, -10, 34, -29, 100, -42, 98, 47, + -46, -32, -30, 44, 124, -4, 60, -37, -14, 124, 99, 5, 33, -14, 124, -6, 9, 60, -45, + 12, 64, 9, 8, -98, 22, 23, -20, 45, -105, 19, -19, -110, -89, 84, -14, 126, 38, -40, + 67, 7, -50, -107, 112, 7, 71, -36, -126, -111, -104, -120, -80, -42, 101, 50, -8, -126, -107, + 115, 107, -121, 122, 81, -99, -8, 112, 80, 65, -11, -50, -50, 114, -48, 43, -50, -99, 18, + 40, 64, 100, -4, -110, -10, 93, -91, 79, 70, 111, -91, -66, 29, 32, -126, -26, -36, -66, + 119, 50, -56, -102, 88, 36, 46, 88, -41, 86, -100, 51, -24, 60, 85, 44, -65, -94, -115, + -45, -70, 112, 123, 13, 64, 80, -35, 6, -49, 67, -54, 31, -30, -32, -99, -40, -43, 29, + 40, 95, 109, 7, 42, -78, -77, -15, -67, -38, 25, -65, 58, 111, -83, -121, -66, 66, 26, + -88, -46, -36, -124, -64, 58, -57, -86, -123, -65, -78, -118, 100, -113, 75, -112, -9, -74, 85, + 66, 91, 35, 72, 22, 5, 25, -117, -60, -67, -67, 98, 8, 24, 66, -117, -110, 24, -62, + 69, -41, 78, 109, 20, 6, -92, -28, 76, 23, -56, -119, 25, -76, -31, -19, -33, 60, 32, + -55, 81, 95, 38, 79, 108, 0, -1, 44, -95, -93, -61, 70, -101, -67, -125, 95, 93, -72, + 63, 53, 95, 120, -96, 50, -121, 48, -36, -48, -57, -42, -63, 121, -48, 115, 9, -6, -6, + -44, 21, -55, -75, -124, -58, 21, 8, -70, 30, -107, -56, 84, 24, 115, -109, 125, -23, 76, + -28, 79, -51, 13, -40, -124, 90, -89, -85, -125, 22, -66, 48, -13, -35, 67, -98, 86, 28, + -96, -64, -46, -13, -125, 48, 21, -28, -125, -71, 109, -59, 34, 65, 114, 48, 38, 116, -62, + 118, -28, 65, 76, 34, 58, -62, 71, 71, 61, 42, 98, 93, 36, -99, 39, 51, 60, -38, + 48, -125, 117, 86, -118, -120, -50, 11, -92, 95, -123, -22, 1, -109, -110, -26, -108, 69, 76, + -118, -64, 125, 25, -94, 4, -105, -89, 33, 85, -36, -86, -42, 39, 73, -123, 30, 106, 0, + 65, 95, 95, -105, 77, 106, -37, -79, 119, -56, 106, 74, -12, 116, 112, -65, -45, 22, -102, + -85, -62, -90, -116, 58, 63, 81, -92, -39, -100, 95, 2, -68, 79, 3, -120, -90, -96, 10, + 39, 123, -12, -83, 98, 32, 88, 32, 98, -23, -114, -26, -101, -114, -127, -11, -17, 12, 4, + -44, -116, 109, 63, 78, -120, -116, -96, -104, -81, -110, 73, -56, -8, -56, 125, 9, -124, -120, + 96, 104, -73, -85, -3, -87, 2, -77, 99, -26, 20, -64, -33, -73, 92, -57, 58, -62, 111, + 9, -19, 84, 3, -22, 91, 121, 40, 38, -125, 106, 122, 43, -13, -2, 107, 45, -24, 79, + 60, -57, -99, -90, -101, 76, 85, -121, 4, 58, 52, 31, 45, -66, -15, -72, 102, 110, -119, + 52, 36, -65, -100, -101, 18, -21, -16, 84, -74, 38, -96, 86, -57, -5, -28, 95, 32, 98, + 1, -87, 31, -31, 99, 61, -61, -118, 125, -93, 59, -122, -60, -45, -108, -127, 98, -112, 45, + -67, 99, 87, -7, 34, 104, 51, -23, -27, -20, 57, 47, -43, 44, 73, 3, 44, 107, -56, + -67, -114, -113, -98, 20, -70, 102, 49, 29, 57, 98, -76, 52, -88, 99, -38, -46, -108, 27, + 115, -12, 1, 37, 88, -67, 89, -82, 62, 69, 41, 43, 20, 34, -89, 43, -116, 85, 1, + -15, -101, -32, -84, -92, 17, 48, -5, 119, -52, 38, 121, 45, 88, 94, -59, 36, 64, -92, + 117, -42, 91, -93, -91, -56, 74, -55, 124, 52, 70, 127, -113, -79, 30, -26, -91, 88, -108, + 101, -15, 45, 115, -95, -110, -107, 68, 105, -20, -103, 65, 109, 24, -10, 1, -76, 120, -121, + 101, -113, 30, 103, 98, -19, 110, -29, 5, -82, 108, -26, -49, 72, 13, -58, 78, 93, 33, + -23, 118, 119, -90, -80, 4, 126, -20, -6, 99, 81, -90, -15, 44, -116, 93, -67, -85, 21, + 89, 17, -2, 94, 125, -108, 96, 74, -42, 40, -29, 29, -113, 95, 13, -17, -122, -37, 64, + -74, -40, -116, -125, -63, -77, 45, 113, 84, 55, 60, -94, 87, 55, 0, 2, -116, -48, -17, + -62, 28, -98, 118, 25, -74, -22, -80, 4, 23, 52, 76, -84, 102, -26, -118, -76, -94, -88, + -49, 98, 54, 101, -46, 42, 95, 26, -95, 90, -25, -7, 119, 0, 106, -17, -121, -97, 22, + -102, 90, -107, -56, -126, 103, -63, -60, 112, 99, -38, -75, 112, 51, 109, -114, 94, -39, -52, + 85, 63, -11, 107, -51, -26, 69, -22, 84, -115, 86, 25, -47, -72, -81, -55, -57, -103, 126, + -57, -38, -97, -72, 47, -1, -101, 59, 94, 103, 80, -31, -40, 103, 69, -113, 89, 20, -55, + -106, 23, 111, -107, -15, 84, -30, -57, -18, 17, 51, 101, -117, -27, -58, 108, 74, -74, -96, + -4, 101, 113, -29, 4, -63, 106, -90, 74, 5, -46, 124, -82, 52, -124, 94, -73, 124, -35, + -48, -69, 115, 48, -1, 77, 35, -92, 35, 82, -15, 25, -65, -119, 75, -30, 19, -34, 1, + -41, -20, 115, 63, -87, -28, 54, -100, -15, 109, -15, 26, 38, 86, -3, -40, 55, 14, -94, + 72, 52, -93, -9, 15, -87, 127, -64, 8, 114, 120, -23, -73, 87, 116, 11, 54, -65, -95, + -95, -14, -25, 115, 43, -24, -84, 88, 66, -29, -30, -3, -59, -62, -68, 36, 69, -15, -120, + 60, 88, 30, 41, -69, -99, 22, 93, 87, -124, 63, 26, -120, 55, 127, 114, 25, -83, 121, + 75, -52, 20, 52, -112, 84, 112, -99, -74, 119, 107, 112, 90, 27, 82, -65, -56, -104, 112, + 22, 28, 29, 7, 50, 1, 125, -115, -94, 110, -30, 63, 41, -59, 1, -58, -28, -118, -2, + -117, 32, -39, -118, -119, 108, 27, -64, -85, -89, 86, 75, -19, 109, -78, -20, 87, -92, 72, + 15, -88, 56, -70, 56, -80, -11, 121, -50, 68, 82, 7, 116, 7, -75, 119, -99, 44, 103, + 23, 105, 5, 35, 110, 85, -76, 17, 81, -124, 1, 72, 15, 15, 84, 59, -5, -110, -10, + -1, 115, 35, 10, 17, 29, 105, 63, -125, 34, 62, 58, 111, -5, 17, -54, -31, -72, -107, + -44, -50, 76, -48, 57, 82, 37, 118, 5, 33, -37, 110, 66, 108, 82, -79, -108, 84, -47, + 118, -98, -19, 113, 66, 74, -78, -24, 119, 46, 25, -51, -4, -71, -12, -93, 111, -54, -89, + -87, -32, -5, -29, 4, 93, -23, -7, 33, -24, -17, -4, -95, 82, -63, -122, 53, 25, -47, + -59, 66, 95, -120, -91, -52, -105, 15, -110, -62, -95, 60, -58, 2, 39, 23, 14, 100, -90, + 112, 53, 27, 54, -54, 87, -16, -69, -76, 51, 2, -16, -50, 88, 55, 115, 100, 41, -58, + -9, -63, 118, 112, -10, 2, -79, -29, -97, -117, -81, -106, -18, -121, 50, -19, 65, -80, -112, + 65, -29, 49, 120, -70, 39, -74, -48, -6, -122, 73, -41, 42, -60, -40, 124, -37, -48, 100, + 6, -120, 120, 105, -63, 106, -58, 75, -24, 4, 72, -119, -117, -74, -79, -55, 37, 0, -5, + 97, 81, 124, -52, 63, 55, 26, 14, -26, -28, -12, -3, 9, -56, -94, 109, -41, 51, 16, + 21, -61, -10, 52, 94, -76, -81, -126, -78, 99, 21, 104, -52, 44, -3, 34, -122, -80, -86, + 98, -112, -93, -65, -124, 10, 26, -82, -67, -38, -7, -69, 103, -92, -42, -10, 127, 42, -11, + 68, -60, -99, -71, 120, 82, 117, 36, 119, 77, 70, 123, -54, 124, 9, -33, 78, 40, 13, + 103, 86, 95, -31, -124, 20, 72, 17, 74, 3, -33, 17, 117, -93, -58, 82, 76, 22, 6, + 46, 90, 10, 104, 91, 41, -70, 27, 5, 64, 36, 26, 48, -3, -124, -78, -123, 62, 40, + -6, 119, -68, 37, -30, 0, -103, -47, -91, -39, 126, 124, 17, -76, -55, -43, -63, -29, -72, + -60, 122, 58, 103, -122, -90, -85, -123, 39, -121, 99, 124, -26, 51, 13, -38, 60, -62, 83, + -120, 32, 125, 72, -60, -24, 46, 61, 54, -87, 14, -2, 14, 14, -8, -120, -1, -86, 17, + 120, 113, 115, -92, 49, -108, 111, 101, -53, 98, -82, -116, 56, 115, 0, 110, -93, -118, 107, + -38, -66, 2, -77, 0, 69, 16, 114, -29, -42, -45, -70, 35, 8, -17, -84, -81, -5, -75, + -74, -92, -117, 3, 28, 48, 48, -95, -13, -49, 16, -7, -86, -44, -27, -100, -77, 84, -54, + 107, 113, 30, 31, -21, -103, -124, 113, -33, -87, -13, -14, -79, 47, -97, -125, -44, -48, -79, + -4, -11, -89, 69, -7, 106, 3, -109, -39, 126, -78, -75, 97, 31, -44, 79, 56, 52, 46, + -86, -103, -9, 104, 103, -11, 71, 52, 26, 32, 48, 27, -113, 97, -126, 6, 122, -2, 49, + -37, -55, -80, -96, 53, -48, 118, 119, -11, -3, -121, -60, -57, -23, -58, -114, -118, 123, -16, + 117, 104, -49, 30, -1, 83, -103, -80, -66, 103, 90, -122, 76, -108, 110, -66, 18, -31, -81, + 78, 4, 124, -17, 126, -35, 62, -108, 68, -16, -74, 126, 18, -49, -110, 82, 32, -78, -38, + 70, 21, -71, 17, 13, 98, -51, 38, -6, -125, 51, 77, -71, 11, 90, -124, -52, 29, -62, + -87, -10, -53, 91, -36, 42, -72, 9, -109, -18, 21, 126, 86, 89, 115, -105, -52, 75, -73, + 47, 46, -8, 113, -89, -18, 72, -31, 45, 105, 68, -74, -68, -109, 87, -50, -30, -81, 102, + -58, 49, 73, -41, -14, -113, -38, -86, 6, 108, -16, 86, -100, -99, 16, 21, 22, -63, -9, + 61, -72, -28, -70, -38, 105, 90, 95, -127, -96, -37, -87, -91, 26, 2, -110, -108, 98, -104, + 3, 14, -76, -85, -126, -111, 111, -87, 47, 124, -98, 98, 103, 21, -38, -97, 100, -126, 69, + -103, -46, 10, -89, 43, -105, 18, -82, -31, 116, -96, -124, 69, -11, -53, -25, 6, 106, 6, + -30, 74, 0, -24, 38, 16, 32, 77, 56, -49, -1, 60, 29, 82, 106, -14, -41, 27, -71, + -52, 24, -12, -73, -2, -59, 125, -38, 88, -48, 102, 41, -51, 28, 111, -88, -53, -102, -46, + 76, -41, 7, -81, -46, -11, -97, 79, 43, -57, 117, -16, 36, 24, 114, 124, 110, 84, -35, + 28, -80, 97, 112, -6, 44, 83, -106, -90, -9, 48, 13, 86, -14, -102, -55, 17, 101, -119, + -84, -100, 65, -57, 7, -22, -65, -6, -108, -6, 80, 8, -45, -51, 119, -112, 51, 104, 125, + 83, 2, -25, -91, -63, 119, -55, -112, 58, 53, -75, 117, 51, -28, 49, -88, -8, 52, -55, + -83, 34, -13, -25, -18, 100, -120, -98, 74, -15, -38, -98, 83, 105, -120, -28, -88, -72, 78, + -27, 119, 22, -116, 29, 40, -56, -15, 71, 41, 107, -115, 70, 20, 6, -28, 14, -27, 37, + 44, 61, -84, -3, -115, -88, 19, -54, 22, -92, 41, 12, -106, 14, -23, 67, -21, 109, 97, + -127, -54, 76, 104, 3, 105, -108, -55, -95, 54, 39, -122, 56, 87, -44, -43, 6, -127, -68, + -62, -111, 2, 97, -22, -103, 69, -5, -14, 33, -106, -13, 96, 100, -3, -89, 112, 7, -15, + -117, 14, 109, 104, -39, -87, -49, -80, -79, -10, 92, -80, -26, -71, 22, -82, -124, -101, 79, + -43, -80, -75, 111, 56, 72, 38, 50, 47, -40, 72, 19, -3, -50, 120, -84, 24, -50, -104, + 83, -26, 45, -95, 101, -50, 116, -122, -87, 32, 107, 119, 90, -12, -24, 92, -18, -36, 56, + 122, 68, 25, -103, -36, 54, 68, 118, 112, 61, 91, -17, 91, -81, 102, -36, 34, 117, 37, + 12, 42, 124, 4, 116, -11, -62, 55, 6, -66, 28, -84, 86, -118, 16, -65, -13, 112, 21, + -54, 103, -122, -88, 91, 93, 106, -126, 19, 41, 98, 25, 91, -114, 62, 121, 47, -111, -43, + 80, 54, -103, -61, -63, 26, 21, 51, 15, 37, 97, -32, 59, 97, 55, -104, 42, 48, 66, + 56, -60, 89, 21, -98, -63, -63, 78, 95, 9, 15, 76, -118, -111, 90, 9, 72, 101, 52, + -90, 46, 86, -23, -107, 60, -111, 46, 102, 120, -26, -85, 58, -81, 42, -102, 0, 25, 40, + 27, 125, 73, -21, 51, 94, -61, -81, -101, 102, 15, 20, -125, 8, -71, 32, 12, -102, -22, + -95, 7, 92, 54, -78, -10, -100, -106, 93, -22, 62, -92, -55, -49, 66, 62, 72, -57, 103, + -71, -40, -57, 118, 120, 121, 8, -105, -104, -28, -3, -39, 88, 38, 77, 65, 110, -126, -94, + -106, 78, 30, -55, 13, 52, 97, -90, -9, 55, 100, -112, 72, -26, 2, 95, 43, -29, -14, + -92, -81, -65, -50, -57, -59, -119, 26, 50, -50, 122, 68, -51, -102, -62, -24, -42, -1, 107, + 42, 24, 111, 75, 12, -48, -87, -112, 124, 97, 11, -84, 22, 107, 62, -101, -41, 50, 79, + -80, 125, -91, 56, 80, -78, -70, -102, 88, 117, 56, -27, 9, -73, -79, 124, 36, 65, 82, + 52, 33, 58, -89, 121, -105, 110, 5, -115, 32, 60, -117, -84, -60, 21, 36, -3, -63, -64, + -35, 15, 101, 53, -105, 28, 76, 31, 95, -37, -29, -43, 20, -105, -109, -114, -15, 104, 60, + -6, -53, -101, 39, 30, 80, 5, -69, 98, 104, 60, 78, -112, -61, 53, -17, -66, -120, -40, + -78, -91, 97, 86, 110, -25, 22, 10, -110, 55, 114, 34, -34, 77, -39, -37, 14, 53, 101, + -92, 122, 98, 7, 43, 109, -102, 10, 50, 45, -110, -107, -78, 89, 103, 98, -21, 48, -118, + -1, -70, 125, -41, 42, 118, 69, 86, -101, 41, 95, -114, 122, 75, -7, -89, 84, -18, -75, + -77, 18, -87, 17, 70, -35, 74, -82, 43, 64, -76, 33, -51, -50, -20, 89, 7, -82, 0, + -83, -27, -62, 120, -104, 30, 5, 1, 22, -77, 59, 19, -76, -79, 47, 111, 39, 76, -37, + 56, -72, -39, 84, 85, 108, 70, 70, -77, 74, -111, 118, 120, -85, -100, 16, -30, -10, 7, + 5, -18, 55, -105, 52, 19, -108, -107, 42, 125, 20, -11, 52, -32, -67, -82, 107, -94, -111, + 18, -10, -60, -48, -120, 1, 115, 25, 12, -64, -100, -115, -118, -106, -102, 111, 62, 86, -68, + -44, 110, 65, -17, -31, 32, 18, -7, -103, -64, -14, 63, -15, 64, 96, 17, -2, 7, -124, + -42, -46, -30, -23, -55, 93, 14, 70, -40, 22, 63, -74, 12, -7, 71, -7, 3, 89, 61, + 80, -83, -85, -15, -115, -41, -57, 75, 26, 50, -92, -85, 43, 84, -11, 23, -26, -71, -74, + -34, -78, 47, 80, -85, 50, 90, 46, 12, 121, 100, -106, 120, -43, -58, -110, 121, 112, 106, + 14, -15, -102, -71, -75, 15, 59, 95, -25, -103, 107, -99, 17, 92, 104, -106, 87, -121, -100, + -62, 79, -45, 83, 66, -60, 17, 59, 4, -54, 23, -112, -127, 61, -51, 30, 15, -11, 81, + -83, 38, 45, 73, 34, 71, -27, -86, 17, -10, -102, 95, -79, 113, 71, 99, -41, -117, -85, + 29, -52, 13, -85, -120, -58, 111, -72, -97, 14, -38, 48, -16, 108, -61, -95, -108, 17, 20, + -105, -39, -93, 46, 97, -91, -103, 37, -95, 116, 108, 19, -17, -24, 69, -46, 124, -4, 43, + -61, -12, 5, -48, -97, 96, 30, 91, 80, -114, -112, 33, 16, 34, -91, -29, -37, 2, 10, + -109, -34, 81, 43, 62, 118, -27, -95, -2, -75, 58, 105, -92, -125, 42, -11, -95, 3, -1, + 14, 78, 124, -11, -60, -79, 125, 57, 43, 57, 61, -68, 69, 55, 103, -63, -18, 15, -61, + -92, 100, -2, -53, 24, -35, -22, 52, -111, 39, 25, 34, 88, -74, 60, 62, 103, 39, 75, + 19, 105, 38, 52, -97, -52, 57, 37, -17, -126, -25, -97, 41, 82, 25, -97, 112, 100, 57, + 107, 82, 24, 74, -119, 20, 12, -19, 67, -27, -94, -13, -36, -122, 50, 32, 27, -29, -21, + -102, -18, -122, -49, 113, 82, 28, 16, -104, 118, -116, 122, 19, -24, -115, -60, -9, -87, -92, + -51, -84, 4, 123, 98, 103, -74, -57, -8, 31, 51, 8, 31, -8, 78, -83, -115, -111, -110, + -74, -115, 1, 41, 96, -106, -24, -26, 125, -79, 24, 60, -31, 77, 95, 36, 103, -83, 125, + 54, 117, -90, 102, -113, 94, 30, 46, -121, -16, 69, -120, -33, 88, 20, -17, 13, -33, -79, + 87, 127, 39, 30, -2, 126, 100, 59, -33, -80, 117, -27, -93, -19, 12, 45, -125, 28, -28, + 80, -118, -37, 57, -60, -105, 47, -29, 18, -10, -104, 72, 118, 98, -21, -125, 71, -44, -24, + -88, -35, -62, -37, -81, 42, 6, -39, -60, -27, -28, 7, 103, -111, 113, -97, 10, 54, 56, + -40, 79, 58, 98, 103, 5, 43, -25, 116, 49, 82, -29, -44, 0, -12, -77, 50, 48, 90, + 11, -70, 48, 105, 82, 101, -22, -90, -125, -117, 92, -65, -105, 101, -6, 107, 67, 71, 67, + 120, 93, -50, -89, 27, -104, 117, 94, 21, 95, 72, -84, 62, -57, -83, 52, -18, 115, -67, + 18, -94, -31, -107, 122, 95, -114, -83, -51, -11, -81, 124, -50, 3, 12, 66, 127, 91, 22, + -44, -68, -91, 20, -55, -14, 76, 118, -57, 72, -121, -92, -69, -64, 80, 76, -40, -41, -18, + 77, 30, 19, 39, 116, 32, -61, -110, -93, -45, 67, -57, 18, 65, -46, 91, 6, 73, -23, + -38, -116, 58, -121, -90, 81, 56, -126, -48, 94, -70, -93, -97, 39, -42, -54, 39, -9, -22, + -57, -84, -106, -99, -54, -29, 6, 72, -117, 57, 105, 24, -10, -125, -61, -26, -75, 93, 121, + 22, 5, 103, -82, 67, 114, -1, 13, 106, 120, -95, -7, 81, 97, -61, -82, -99, 74, -19, + 126, 46, -11, 94, -18, 17, -58, -78, 22, 34, 81, -111, 37, 9, 87, -92, 9, -93, -87, + -24, 9, -1, 9, -14, 14, -69, 110, -51, 33, -113, -89, 84, -36, 60, 3, -94, 126, -40, + -63, -122, 40, 78, 102, 62, 6, -36, -68, -84, -68, -30, 100, -5, 73, 124, -78, 107, 104, + 14, 40, -114, 27, 18, -116, 57, -37, 117, 126, -102, 82, -45, 89, -36, 61, -35, -84, 34, + -66, -44, 118, -27, -108, -64, -104, 115, -71, 83, 102, 17, -31, 8, -10, -100, -80, 31, -14, + -48, 28, -20, -4, 30, -41, -122, -25, 59, 57, -119, -67, -121, 58, -126, 75, -72, 106, -29, + -121, -103, 13, -57, 49, 37, -99, 48, -11, -26, 98, -14, 1, -110, 4, 63, -79, -19, 97, + -26, 76, 86, -8, 88, -2, 122, -95, -86, -79, 66, 46, 88, 116, 102, 111, -5, -39, 22, + 48, -52, 102, -85, -46, -78, -13, 110, 12, 80, -64, -70, 31, -101, 3, -93, 57, 106, 91, + 31, 68, 100, 8, -61, 79, 86, 107, -28, 54, 48, 3, -123, -10, -97, 97, -92, 27, 115, + 74, 21, -9, 126, 49, -106, 16, 93, 110, 112, 118, -9, -103, 25, 6, -14, 122, 67, -57, + -79, 16, -107, -112, 126, 91, -5, -113, 116, 109, 102, -120, -4, 25, 22, -24, 87, -59, -34, + -80, -52, -32, 21, 71, -30, -25, -30, -66, -82, -91, 67, 116, -83, -78, 28, 121, 33, 91, + 31, 3, -43, -57, 26, -47, -122, -42, 2, -110, -41, -100, -106, 93, -50, -39, 49, 28, 120, + 86, 66, 59, -52, 47, 56, 49, 86, -117, 91, -100, 124, 117, -57, 95, 100, 99, 23, 58, + 40, -23, 43, -113, -119, 80, 23, 2, -63, 68, -78, -78, 109, -29, 86, -95, 65, 4, -4, + -96, -45, -39, 78, 30, 20, -63, -47, -109, -1, 61, -5, -113, 40, 28, 95, -33, -109, 76, + -111, 89, 44, -6, 85, -92, -127, 48, 53, 106, -125, -51, 19, 39, -40, -10, -76, 1, 10, + 86, -40, -91, 98, 40, -77, 32, 107, -11, -10, -62, 7, -13, -65, -78, -88, -120, 97, 23, + 57, -65, 98, -61, 108, -70, 108, 30, 39, 9, -82, 94, 26, -31, 4, 91, -5, 70, 70, + 25, 50, 18, 42, -121, -23, -124, 116, 70, -75, -87, -51, 80, 70, -69, 48, -123, 55, 126, + -73, -64, 64, -71, 88, 67, 31, -86, -101, -94, 5, 121, 126, -96, 104, -67, -80, -27, -34, + -92, -54, -36, 1, -84, 32, -49, -55, 92, -31, -59, -62, -68, 99, 5, -93, -32, -39, -30, + -81, 110, 45, -60, -96, -110, -119, -71, -35, 113, -125, -113, 92, 66, 21, -111, -41, 62, 1, + 46, 108, 110, 100, 81, -47, -114, 28, 76, -72, 12, -15, 10, 121, 19, 85, -116, 75, -28, + -51, -100, -51, 17, 107, -27, -69, 9, -123, 9, 43, 84, -81, -67, -12, 114, -81, -99, 88, + -110, -47, -54, 56, -75, 6, -39, -9, -33, 22, -92, -56, 84, 21, -68, 2, 79, -36, 118, + -69, 12, 38, -44, 121, -108, -28, -35, -92, -14, -78, 72, -42, -72, -34, 51, 94, 44, -94, + -15, 29, -102, -38, 50, 71, -91, 54, 113, -38, 118, -62, 116, -114, 36, -45, 25, 116, 94, + 51, -75, 119, -106, -92, -120, 103, -120, 6, 44, -9, -20, -58, -46, 26, -116, -52, 48, -90, + -44, 71, 52, 105, -66, 69, 7, 69, 72, -33, -14, 93, -84, -101, 92, 43, 77, 117, 10, + 23, -38, 26, -120, 119, 125, 33, 37, -5, 87, -45, -35, -14, 109, 94, -121, -90, -8, 111, + -77, 89, 108, 51, -58, 6, 73, -87, 127, 54, 56, 59, 7, -125, -68, -92, 13, 101, -63, + -115, -46, 10, -22, -59, -52, -31, 114, 60, 105, -91, -95, -46, -91, -122, -94, -9, 114, -37, + -80, -82, -111, 123, -106, -121, -29, -70, -122, -100, -111, -57, 16, -48, 100, -88, -99, 44, -50, + 36, -83, -116, 1, -49, 63, 114, -62, 23, 69, -90, 91, -30, 23, 50, 102, 69, 93, -11, + -59, 12, -92, -32, 96, -122, 67, -72, -117, -77, -86, -114, 47, 103, 107, -5, 42, 51, -81, + -3, 47, -24, 11, 91, -116, 11, 44, 72, 73, 16, 61, -50, 66, 36, 36, 88, -67, 122, + -36, 122, -19, -58, 53, 122, 31, 49, 103, 63, -89, 10, 99, -65, -53, 39, 71, -2, -60, + -5, -66, -80, -6, 82, -74, -45, 103, 47, 32, 28, 106, 15, 70, 85, 66, 96, -113, 62, + -57, 59, -59, 110, 55, 36, -32, 70, 74, 73, -122, -7, 112, 55, 125, -84, -106, 122, -88, + -33, -34, 3, 75, 4, -123, 41, 30, -27, -40, 31, 86, -88, 28, -31, 127, -20, 49, -53, + -126, 78, -9, 107, -68, -4, 97, -45, 80, 59, -5, 57, 60, -4, -91, 119, -23, 112, 90, + -88, -53, -99, -30, 6, 29, -56, -15, 53, 107, 99, -63, -75, -25, 76, -26, -41, 27, 93, + -123, -66, -31, 3, 40, 80, 14, -105, -32, 94, -26, 97, -80, 2, -123, 122, 95, 122, -59, + -40, -48, -47, 102, -69, 9, 11, 100, -98, 88, -97, 51, -108, 38, 97, 67, 36, -63, -71, + -124, -39, -23, 68, 17, 95, 96, -75, 90, 113, 24, -71, 66, 23, 17, 97, -82, 5, -104, + -18, 70, -39, -33, 102, 9, 2, -109, -86, -94, -112, -14, -6, 35, -63, 33, 1, -99, 69, + 117, -66, 94, 57, 51, -29, -109, -100, -19, -20, 92, 32, -35, -64, -14, -66, 55, -107, 22, + -55, 3, -2, 35, 31, -74, 17, -61, 64, -66, -78, -106, -48, 76, 18, -111, 37, -59, 127, + 59, -101, 14, -125, 119, 119, -77, -72, -49, -54, -26, -63, 95, -76, -35, -13, 46, -123, -82, + 62, 15, -105, 48, 96, 101, 37, 56, 5, -78, 67, -69, -55, -125, -104, -24, -68, 87, 123, + 75, -77, 20, -8, -15, 89, -96, 6, -75, 94, 34, 37, 105, -57, -94, 124, -67, 47, 117, + 94, -23, -11, 9, -106, -95, -114, -31, 123, -63, -6, 50, 70, 85, 88, -8, 58, -101, -97, + -33, 93, 32, -92, -83, 52, -14, -53, 51, 33, -107, -88, -102, -68, 2, 28, 80, -76, 121, + -62, 73, -102, -119, 39, -35, -37, 122, 2, 87, -65, -45, 73, 24, 88, 122, -9, 44, -60, + 83, -44, 6, -120, 71, -84, 52, -101, 111, 86, 28, 29, 107, 118, -115, -17, 32, 0, 81, + 112, 23, 15, 41, 100, 60, 81, 7, 0, -22, 115, 2, 53, 64, -38, 40, 85, -53, -88, + -77, -10, 113, 67, -45, 79, 89, -72, -81, 66, -43, 102, 101, 49, -28, 33, -24, -119, 118, + -89, 110, -110, -37, -61, 123, -19, -12, 33, -96, -22, 40, -125, 12, 27, -20, -17, 54, 72, + -9, 68, 12, 25, -29, 119, -104, 14, 22, 46, 96, -71, -89, -107, 2, -71, 36, -52, -47, + -47, 67, -43, 25, -67, -120, 103, 37, -38, 78, 41, -126, 55, -124, -99, 6, -82, 109, 109, + 24, 56, 18, -9, -79, 73, 95, -75, 61, -83, -108, 34, -1, -101, -38, 91, -49, 51, -71, + 48, -51, 42, 93, -39, -107, -82, -3, -54, 20, -111, 125, -52, -11, -36, 23, -13, -47, -60, + 54, 124, -120, 30, -39, -121, 49, -100, 107, 44, 115, -100, -50, 75, -66, -71, -112, -16, 49, + 79, -64, 72, 18, 103, -75, 64, 109, 35, 111, 38, 2, 61, -22, -85, -107, 74, 45, -62, + -9, 94, 101, -109, 87, 34, -86, 123, -37, 29, -113, 112, 124, 35, 114, 72, 46, -15, -88, + -76, -114, 35, -107, 19, -55, -47, 119, -16, 108, 107, -59, -87, 25, 53, 57, -22, -97, -41, + 106, 89, -63, 52, 5, 115, -71, 0, 78, -78, 117, -100, 22, -81, 93, 84, -121, -6, 41, + -79, 50, 94, -14, 56, 14, 83, 81, 122, 97, -72, -11, 62, 110, 76, 7, 21, 22, -125, + 107, 42, 120, 57, -51, 94, 96, 70, -22, 83, 35, -11, 48, -68, -57, 50, 126, 44, -37, + -28, -82, 43, -100, 102, -70, 83, -92, 36, 89, -18, 55, 30, 21, -12, -109, 58, 79, -13, + -120, -85, 80, -36, 15, -17, -4, -16, -125, -32, -10, 21, 54, 68, -109, -117, 17, -96, 62, + -39, 21, -21, -65, 29, 65, 89, -125, 80, -25, 53, -25, -12, -94, -37, 127, -84, -108, -113, + 94, 82, 73, 125, 69, -11, 17, -87, -103, 73, 16, -95, 36, 4, -6, -17, -127, 6, -120, + 63, 34, 49, 36, 63, 0, 82, 57, 61, 116, 70, -95, -15, 61, 14, -102, 75, -64, 97, + -14, 64, -60, 48, 97, -92, -32, 43, -122, -5, -21, -32, -91, 94, -59, 101, -74, 83, 94, + 120, -115, 38, 97, -83, -54, -71, 114, -45, 27, -74, -124, -54, -26, 38, -83, -119, 46, -94, + 107, 96, 88, -108, -17, 34, -39, 112, 109, -99, -25, -7, 79, -78, 34, -3, -110, 83, 107, + 112, -59, 57, 66, 5, 84, 119, -44, -21, 124, -46, 88, 118, 73, 90, -65, 105, 115, 87, + 97, 76, -87, -44, -4, -126, 1, -32, 95, -117, 93, -39, -26, 112, -59, -15, 88, 103, -49, + -17, 61, 124, 116, -101, 93, -92, -92, 51, -111, 54, -93, 105, 73, 83, 119, -37, -79, -110, + -84, -119, 101, -39, 104, -32, 49, -81, 70, 82, 61, -37, 98, 61, 64, -34, -26, 83, 12, + -47, 0, 64, -73, -112, 98, 9, -34, 126, -22, -49, -70, 92, 98, 117, -110, -9, 93, -68, + -102, 109, 61, -103, 17, 93, 123, -52, 125, 66, -109, 109, -91, -49, -17, -45, -79, 36, -46, + 113, 30, -33, -37, 59, -42, 96, 44, 73, 10, 71, 26, -72, -37, 2, 22, -116, 120, -52, + 23, 22, -25, -68, -4, 68, 17, 1, 41, -124, -114, -120, 80, 75, -115, 117, 19, -17, 102, + -89, -108, 84, -58, 23, 69, -111, 34, 19, -110, 102, 3, -26, 59, 53, 109, -116, -81, -69, + 93, -60, 103, -117, 87, -12, 100, 67, -46, -6, -116, -36, -25, 61, -6, -2, 107, -91, 106, + -43, 49, 122, 70, 32, 125, -72, 25, 97, 54, -28, 61, -117, 17, -67, -7, 71, 72, -29, + -122, 7, -123, -121, -52, 1, -104, 11, -126, -98, -20, 8, -78, 39, 83, 32, -97, -29, -45, + 64, 103, -87, 49, -58, 121, 34, 17, 102, 38, -60, 4, -15, -107, -96, 49, 124, -18, 97, + 58, 59, -92, -117, -50, 2, -36, 103, 5, 62, -50, -41, 99, 17, 82, 26, -65, 117, 37, + 22, 20, 53, 56, 45, -48, -21, 125, 40, 102, -52, -68, 42, -42, -100, 78, -18, 69, -57, + 89, -88, 19, -7, 9, 37, 78, 36, 44, -9, 101, 51, 86, -122, -35, -8, 96, 78, -53, + -98, 99, -4, -46, 26, 111, 33, 95, 101, -91, 22, -81, 11, -52, -93, -10, 62, 33, -71, + -33, -82, 18, -113, -43, -6, 47, 126, 2, 13, -63, 96, 19, -123, 54, 40, 93, 9, 68, + -76, -40, 45, 77, 99, 98, -85, 74, 64, -71, -51, -3, 58, 123, -8, 81, -33, -95, -88, + -125, 58, 126, -100, 49, -68, -106, 7, -54, 111, 81, 6, -93, -89, -97, 0, -95, 35, -49, + -52, 31, -45, 121, -7, -90, -115, 49, 83, -67, 25, 48, 102, 18, 4, -43, -49, -22, 13, + -9, -62, -42, 92, -66, -65, 65, -61, -106, -39, 85, 86, 69, 81, -84, 119, -7, -122, -107, + -3, -37, 0, -34, -35, 76, 77, 47, -56, 80, -107, -39, 4, 21, -91, 67, 1, -69, -100, + 109, 92, 79, 124, 82, 101, 56, 30, 30, 91, 48, 125, 111, 16, -112, 121, 21, -14, 22, + 20, -79, 6, 109, 48, 15, 25, -16, 112, 35, -70, 15, 74, -45, 14, -121, -98, 99, -106, + 84, -43, 43, -34, -63, -46, 71, -28, 115, 17, 29, -19, -37, -103, 59, 54, -49, -92, -119, + -91, -26, -113, 79, -54, -113, 121, -45, -64, -78, 117, -62, 13, -64, -23, -121, 110, -69, 46, + -75, 101, -46, -6, -105, -44, 9, 108, 11, 102, 107, -107, 91, -69, -28, -33, -53, 61, 105, + 20, -26, 94, 46, -38, -103, -124, -10, 87, -23, -111, -115, 17, -88, -92, 56, 86, 25, -61, + -124, -72, 3, -113, -15, -112, 103, 37, -92, 100, -93, 115, 63, 34, -11, 55, -110, -26, 123, + 122, -120, 24, -121, -60, -74, 0, 52, 21, -89, 57, -103, 36, 75, -93, -81, -57, 93, -104, + -61, 88, -13, -50, 30, -96, 8, 110, -1, 24, -115, -74, -8, 109, 86, 118, 71, -44, -21, + -99, -123, -29, -25, -2, -52, -43, 24, -60, -33, -44, 102, 76, -26, -87, -105, 63, -106, 69, + 118, -4, -118, -125, -54, 41, 22, 73, 16, -61, -53, -3, 55, 125, 27, -62, -52, -85, 12, + 44, 5, 96, 8, -123, 82, 105, 53, 38, -37, -20, 71, 107, 74, 67, -82, -102, 5, 105, + -117, 85, 124, -94, -113, 68, 44, -90, -3, 78, -10, 104, 101, -82, -110, 126, -8, -56, 61, + -25, 74, 80, 5, 94, -78, -37, -35, 119, -38, -79, 60, 56, -91, -7, -32, -2, 31, 103, + 91, 66, -8, 28, 36, 92, 111, -127, -83, 45, 23, -25, -70, -62, 39, -48, -94, -55, 95, + -8, 15, 91, 85, -42, -3, 0, -57, -127, -70, -22, -25, 11, 16, -119, 60, 97, -59, 3, + 9, 2, 75, -87, 118, 105, 37, -124, -79, 54, -47, 56, 9, -23, 17, -82, -115, 51, -52, + -86, 26, -11, -118, -49, 77, 70, 8, -37, -111, 95, -24, 114, 17, -15, -18, 35, 77, 48, + -105, -88, -11, -30, -71, 34, 66, 79, -123, -42, 17, -13, -49, 76, 119, -3, 120, 74, 57, + 79, -75, 26, -104, 10, 69, -76, 64, 53, 4, -29, 51, 9, 10, -115, -117, -122, -50, 48, + 49, -110, 60, -78, 63, 51, 90, -94, 20, -113, -62, -71, 110, -61, -2, -89, 110, 93, 65, + 41, -1, -64, -41, -92, -112, -31, -91, -86, 105, -77, 32, -11, -124, 110, 21, -86, -94, -96, + -113, -102, 121, 98, -97, 18, -39, 32, -11, 71, -2, -1, 49, -34, 51, -125, 9, 78, 118, + 51, 77, 10, 8, -112, -15, 63, 56, -84, -90, 45, -76, -54, 10, -79, 74, 119, -96, -108, + 120, 20, 49, -32, 95, 30, 103, 17, 81, -94, -62, -71, -20, 32, 55, -127, 7, -108, -118, + 38, -17, 44, -73, 21, -57, -94, -25, 52, 7, -66, 95, 58, 93, -42, 10, -105, -1, 58, + 47, 7, 99, 22, -119, -43, -97, -2, -53, 110, -28, 38, -97, -31, 92, 64, 88, 86, 85, + -75, -80, 93, -65, -64, -46, -104, 79, 62, 30, -62, -46, 86, -80, 124, -59, 9, 23, -5, + -50, -124, -105, -15, 26, 14, -22, 116, -115, 113, 11, 115, 82, -43, -16, -38, -114, -76, 19, + -67, 51, -79, -19, -68, 101, 48, 93, -16, -2, -121, -126, 53, 99, -12, -82, -59, -6, 87, + 13, 117, 87, -56, 114, 67, 43, -62, -45, 32, -57, -33, 85, -1, -81, 58, 80, 115, 16, + -108, 4, -101, 118, -53, 77, 72, 12, 47, -15, -114, 124, -39, -90, -14, 80, -103, 13, 36, + -78, 77, -69, -93, -108, -83, 103, -32, -29, -30, 10, -86, 5, -108, 84, 58, -76, 1, 74, + 26, -40, 118, -4, 9, 109, -12, 48, -76, 90, -116, -88, 30, 47, 17, -43, -77, 24, -94, + -105, -13, -99, -50, -77, -2, -87, -111, 46, 42, -37, -36, 85, 67, 63, -46, -87, 69, -53, + 43, -26, -127, -31, -71, 79, -12, -48, 97, -39, -114, -30, -47, 2, -32, -77, -71, 117, 4, + 17, -64, 3, -122, 30, -117, 51, -123, 1, 72, 83, 44, 103, 97, 81, -74, 2, -40, 35, + -55, 26, 9, 124, 19, 63, 125, 70, 94, -84, 122, -10, 103, 90, -31, -41, 12, 115, 43, + -6, -9, -52, -46, 33, -50, 17, 24, -43, 1, 45, -12, 82, -60, 29, 99, -102, 25, -42, + -106, 115, 109, 95, -31, -124, 81, 109, -53, -112, -50, 63, 109, -24, 33, 25, -56, 90, -43, + 14, 80, 8, -74, 58, -53, -54, -21, -88, 27, -118, 21, -76, -56, 84, -15, 12, 125, -109, + -50, 12, 0, 74, 83, 91, -11, 44, 107, -72, 31, 11, -24, -29, -10, 109, 12, -61, -76, + 59, -12, -125, -27, 89, 53, 28, -53, 56, -53, 122, 78, -41, 32, 34, 64, -9, 103, 67, + 72, 36, 57, -85, 120, -63, 48, -102, 43, -65, -115, 65, 15, 80, -67, -73, -63, 13, -7, + -102, -96, 112, -60, 5, 62, 7, -89, -30, 92, 38, -44, -77, 82, -27, 21, -77, 6, -88, + -96, -106, 89, -72, -121, 84, -110, 37, -33, -77, 59, -11, 0, 86, -119, -45, 100, 107, -101, + -110, -40, 71, -30, 52, 36, -16, -11, 38, -63, 86, 53, 121, -51, 66, -96, 78, 114, 52, + 22, -76, 18, -71, 28, -49, -97, 89, -4, 3, 121, 74, 14, -55, 17, -55, -104, -28, 37, + 77, -91, -40, 10, 43, -36, 21, -51, -26, -92, 114, 79, -90, -93, -69, -15, 46, -116, -13, + 54, -65, -62, -99, 35, -42, -108, 30, -24, 108, 47, 62, -5, 114, -87, 79, -4, -103, 64, + -8, -115, 116, 121, -86, 120, -60, -112, 10, 121, 2, 19, -27, 90, -68, -46, 73, -77, -83, + 2, -80, -73, -18, 59, 119, 86, 106, -66, 111, 121, 113, 15, 60, 0, 80, -6, -75, -14, + -118, 13, 72, 82, -27, -25, 122, -39, 25, -102, 0, -106, -107, 100, 127, 68, 62, 27, 23, + 60, -49, -105, -72, -18, -66, 11, -41, 121, -104, 0, 34, 84, 44, -22, -8, -115, 82, 97, + 49, -76, 79, 103, 85, 49, -120, 71, 35, 83, 56, 88, 9, 0, 14, 76, 71, -89, 75, + -89, -74, -22, 124, -50, 10, -51, 70, 8, 14, 2, 20, -120, -45, -108, 10, -118, 56, 65, + 62, 11, 27, 116, 48, 61, 11, -86, -81, -71, -93, -12, 72, -46, -66, 12, -14, -75, 95, + 115, -121, -49, 23, 102, -37, -77, 102, -25, 15, -88, 3, 85, 7, -53, 77, -14, -67, 39, + 118, 16, -105, -123, -6, 109, -18, 109, 23, -48, 24, -31, 117, -16, 84, -22, -65, 29, -91, + -18, -74, 41, 121, 74, -42, 48, 89, 28, -101, -58, 11, 57, 120, -120, -41, -122, -52, -81, + -59, -72, -117, 27, -93, -59, -63, -88, 103, -50, -42, -48, -60, 103, -125, 73, 40, -94, -105, + 49, 104, 122, 104, -46, 89, -66, -86, 93, -94, -14, -45, -94, 74, 5, -39, 68, -76, -77, + -5, 35, -17, -83, 25, 124, 66, 55, 10, -31, -50, 126, 64, -37, 36, -19, 62, 69, 70, + -100, -103, 50, 111, -112, 11, -56, 37, -106, 40, -48, -11, -26, 34, -82, -3, -105, 10, -116, + -110, -81, 67, 103, -106, 122, 33, 37, 123, 52, 105, -25, -56, 1, 70, 79, -73, -120, 25, + 88, -25, -50, -18, -74, 92, -71, -43, 35, -83, 15, 36, -21, 107, 11, -57, -16, -38, 37, + -10, 120, 50, -40, -103, -49, -27, -89, -24, -91, 124, 69, -7, 79, 92, -102, 113, -64, 13, + -106, -102, -79, -87, 119, -3, -38, -97, 127, 31, -45, -67, 73, -57, 93, -45, -46, -50, 40, + 68, 121, -105, -114, -81, 34, 42, 119, -72, -10, -19, 117, 47, 39, 113, 114, 25, -47, -40, + -46, -99, 1, -104, 71, -110, 22, 1, 112, 114, 94, -70, 15, -41, 110, -45, -6, -5, -8, + -117, -20, 18, -18, 77, 61, -81, 105, -35, -41, 113, 3, -97, 114, 82, -108, 107, -67, -110, + -84, -124, 27, -74, -2, -13, -8, 105, 9, -64, 85, 46, 32, -112, -24, -86, 2, 24, 90, + -104, -19, 89, 75, -101, 110, 20, -97, -116, 28, -116, -104, 64, -8, -78, -95, 95, 66, 60, + -102, 124, 97, 22, 100, 45, 44, -53, -21, 112, 124, -112, 62, 101, -13, -62, -38, -64, 111, + -34, -10, 122, -97, 50, -40, -119, -87, -3, 60, 61, 69, 93, 90, 68, -21, 32, 73, 25, + -100, 106, 3, -58, -122, -77, 10, 19, 36, 62, -120, 2, -65, -101, -39, -36, -59, 110, 113, + 100, -45, 38, -46, 7, -27, -105, -115, 28, 55, 70, -61, -6, -25, -34, -94, 32, 79, -57, + -113, -46, -78, -82, -110, 118, -39, 110, -43, 109, 75, -106, -49, 85, -22, -32, -121, 117, -85, + 54, 69, -45, 14, -75, 98, 78, 9, -112, -58, -104, 65, 65, -47, 66, -46, 0, -72, 60, + 85, -81, 104, 42, -70, -111, -62, 28, 33, -109, 118, -68, -53, -93, 35, 13, 102, -126, -95, + -118, -72, 33, -87, 33, 71, -1, 13, 113, 125, -62, 27, -35, 64, 126, 63, -56, -113, 90, + 0, 8, -31, 58, -38, 98, -120, -33, 115, 80, -43, 74, -28, -100, 23, 43, -20, -62, 31, + -80, -10, 60, 106, 99, 84, 76, 29, -7, 3, -18, 124, 11, -51, 13, 9, 15, -45, -79, + 62, -53, 114, 67, -117, -75, 70, -98, 65, 77, 42, -53, -7, 30, 65, 117, 71, 67, -101, + -41, -75, 33, -48, 31, -28, -86, 118, 48, -71, 91, 7, 115, -3, 2, -98, 105, -71, 44, + -61, -16, 65, -101, -10, -45, -4, -81, -107, -42, 23, -45, 51, -78, 37, 59, -94, -91, 103, + -17, -73, -68, -33, -22, -40, 34, -53, 92, -104, -66, 117, 80, 117, -96, 20, 55, 43, -11, + -112, -127, 11, -120, 84, -81, -105, -41, 2, 34, -40, 110, 122, -35, 35, -105, 72, -99, 67, + -101, 43, 87, -35, -22, 86, -107, -115, 56, -6, -32, 111, 122, 120, 126, -67, -21, -3, -69, + 16, -104, -34, 59, -40, -14, 6, -97, -90, -22, -95, -90, -53, -67, -11, -48, 30, 108, 66, + -39, 116, -114, -57, -79, 48, -95, -4, -39, -69, 29, 120, 49, 127, -93, -37, 74, -38, 39, + -46, -38, -4, 23, -122, 108, 110, 93, -105, 53, -49, 65, -84, -106, -89, 35, 47, 46, -24, + 59, 48, 76, -4, -79, -50, 59, -105, 22, -49, -15, -89, 78, -64, -13, 109, -93, -93, 114, + 121, 20, 19, 24, 41, -109, -87, 113, -97, 43, 10, 80, 60, 101, -12, 84, 4, -16, -59, + 20, 114, 49, 16, 66, 107, -9, -55, -2, -125, 68, -77, 41, -64, -5, 81, -90, -55, -40, + -25, 18, -98, -49, 58, -115, 85, 82, -49, -68, -62, -39, -108, -84, 74, -74, 5, -37, -95, + -45, 116, -44, -30, -67, -125, -51, 0, 84, -31, 9, 75, -103, -93, 24, -77, -114, 112, 78, + 59, -104, 62, 68, -86, 110, 13, 28, 10, -3, 121, -7, 63, -53, -23, -4, -71, -104, -73, + -48, -36, 39, 59, -86, -92, 40, -61, 49, 51, -115, 33, -67, 42, -103, -114, 109, 38, -127, + 10, -102, 28, 26, -88, 73, 60, 112, 34, -75, -96, -44, 111, -27, -2, -70, 5, -54, 93, + 59, 29, -83, -70, -13, 64, -74, 23, 47, -111, -41, 37, -69, -56, -93, 92, 25, 116, 9, + -26, 59, 42, 87, -107, 49, -105, 9, 5, -105, -74, -120, -63, -18, -64, -66, 51, 110, -89, + 65, 118, 56, -87, -86, -45, 53, 40, -16, -86, 46, -23, -91, -112, -43, 63, 96, 109, 9, + 61, -98, -81, -65, 1, -3, -70, 55, 53, -17, -7, 4, 9, -58, -66, 18, 52, 44, -26, + -107, 19, 80, 1, -58, -119, -77, 48, -24, -68, 99, -28, 126, -15, -20, -46, -8, -56, 12, + -76, -61, 29, -2, 49, -55, 123, -69, -48, 14, 58, 105, -110, -19, 33, -51, -6, -92, -107, + -80, -89, 0, 63, 105, 69, 33, -106, -62, -115, -117, 126, 88, 126, 100, 44, 106, 84, 52, + -50, -102, 32, -49, 117, 69, 126, -39, 126, 57, -64, -52, -16, 98, 52, -46, 110, -19, 61, + 22, 88, -41, -121, -12, 55, -118, 73, 104, -106, 78, -55, 109, 113, 103, 89, 37, 73, -119, + 29, 89, -85, -112, -28, 122, 17, -75, -102, -2, -3, -82, -18, -58, -12, -114, 28, 124, -99, + -114, 83, -20, 16, -96, 23, -39, -28, -51, 108, -96, 10, 77, 64, -63, 53, -53, 36, -21, + -46, -44, -57, 31, 75, 46, -60, 35, -21, -15, -55, 122, 40, 43, 126, -75, -11, 24, -5, + 112, -127, 62, -99, 7, -119, 109, 29, 23, 24, 48, -127, 113, -64, 15, 20, 59, -101, -125, + 5, 13, 113, 10, -56, 118, 50, -71, 119, 96, 33, 8, 5, 21, -113, -124, 101, 12, 71, + -17, 74, 8, 90, 111, 42, -86, 109, 52, 28, -19, 86, -14, 110, 4, 45, -56, 106, -10, + 28, 59, -104, -40, 103, -102, 84, 9, 21, -89, -48, -65, -71, 97, -104, 123, 35, -23, -1, + 31, -30, 32, 15, 114, -64, 81, -4, -58, 106, 22, 0, -70, 24, 124, -108, -23, 6, -47, + -50, 76, 36, -77, -84, 29, 40, -125, -18, 91, 14, 4, 114, 76, 103, -104, -75, -8, 81, + 33, -49, 13, 126, 114, 56, -122, -121, 62, 16, 26, 24, -45, -55, -102, 79, 4, 42, 104, + -30, -21, 24, -112, 17, -97, 10, 50, -46, -53, -63, 50, -83, 57, 69, -51, 14, -29, 95, + 85, 6, 4, -78, -29, 93, 63, 56, -124, -7, 96, 52, -107, 23, -127, -101, 38, 86, -3, + 44, 113, -69, 70, -97, 116, -73, -90, -93, 86, 33, 90, -80, 114, 16, -49, -46, 65, -48, + -92, -80, 19, 97, -19, 48, 5, -113, -38, -34, -34, 84, -82, -109, -2, -126, -76, -94, -39, + 110, -125, 24, 102, 79, 46, 82, -45, -9, -74, 54, -5, 0, -77, 54, 69, 78, 105, 11, + 57, 69, 60, 97, 112, -10, 63, 124, 71, -1, -58, 124, -27, 31, 69, 43, 51, -106, 5, + 73, 60, -36, 73, 79, -29, -2, 71, 30, -37, 45, 60, -64, 33, -74, 27, -82, 68, -58, + 55, -52, 47, 118, -65, -36, 6, -12, -106, 122, 118, -75, 108, -42, -53, -52, 51, -81, 114, + -43, -36, 42, -74, 74, -55, 117, 48, -50, -37, -103, -101, 26, -79, -5, 114, 7, 70, 104, + 1, -70, 1, -2, -107, -62, 13, -102, -120, 85, 92, 2, -105, 38, -54, -44, -89, 78, 35, + 60, 53, -17, 99, 45, 27, -28, -77, 42, 60, 13, -30, 26, 102, -31, 126, -73, -6, 25, + 16, 118, 0, 55, 23, -9, 109, 43, -2, 80, -46, 86, 98, 87, -21, 54, -114, 29, 54, + 25, 37, 81, 26, 127, 94, -22, -124, 29, 6, 118, -92, 40, -54, -89, -19, -118, -6, 41, + 10, -79, 113, -79, -50, -29, 49, 79, 84, -110, 88, 125, 31, 47, -122, -56, 11, 35, 96, + -114, -113, 71, 106, 44, -118, -87, 90, 97, -83, -99, 65, -98, -69, -44, -104, 13, 123, -84, + -116, 48, -57, 89, -60, 59, 70, -91, 50, 47, -105, 98, -109, 119, 57, -33, -49, 84, 101, + 9, -62, 60, 75, 117, 105, 108, 113, -94, -53, -98, -92, 24, 58, -72, -6, -57, -63, -36, + 103, 85, 6, 33, 64, -58, 23, 42, 32, -81, -125, 37, -28, -123, 4, -23, -1, -73, -18, + 48, 104, -14, -56, 38, 65, 80, 17, -47, 125, -23, 77, 50, 87, 91, 124, -76, 85, -47, + 12, -107, -30, 28, -48, 30, -75, -20, -19, 75, 86, -44, 75, -124, 114, 111, -114, -35, -118, + -10, 45, -119, 56, 77, 62, -30, 126, 38, 15, -100, -59, 6, -34, -56, -62, -86, 44, 121, + 93, 18, 13, 35, -31, -46, -32, -103, -57, 42, 43, -2, 8, 63, 105, -42, 92, -126, 87, + 12, 80, 40, -25, -32, -7, -68, 92, 6, -25, -13, -109, 57, -27, -11, 105, -109, 118, 89, + 15, -83, 115, -88, 100, -51, -78, -100, 51, 69, 76, 6, -27, -36, 94, -108, 52, 124, 13, + -125, -53, 86, -11, 122, -119, 6, -71, -115, -105, 114, 93, 124, -21, -4, 15, -110, 88, 67, + 126, -70, -36, -32, -45, 73, -73, 118, -43, 85, -103, -15, 68, -44, 88, 33, -64, -42, -79, + 109, 1, 14, 92, -89, 107, -38, 35, -35, -83, 65, -36, 76, -39, -69, -121, 55, 70, -62, + -64, -73, -29, -24, -90, -83, -51, -76, -66, 47, 104, -101, -63, 41, -16, 58, -30, -88, 69, + 34, -90, 99, -18, -56, 9, -94, 32, 32, 34, -70, 96, 101, 17, 30, 52, 85, -16, 68, + -14, 35, -75, 70, 49, -102, 111, -13, 93, 39, -119, -52, 111, 102, 116, 32, 28, 63, 15, + -99, -80, -55, -120, -39, 16, -44, -108, -108, -124, -80, -12, -39, 39, -109, -89, 102, -57, 71, + 81, -54, 118, -91, 56, 45, 119, -50, -14, 124, -1, 50, 119, -98, -33, -16, 123, 125, -1, + -36, -72, -80, -48, -3, -78, -33, -113, 116, 81, 34, 18, -106, -85, 5, -88, -25, -45, 16, + -4, -58, -115, 109, -31, 45, -26, -19, 123, 11, 96, 24, 96, -16, -17, 123, -50, 41, -111, + 28, -87, 92, -69, -90, 31, -47, 93, -40, 60, -22, 61, 97, -74, 12, -9, -1, -10, -37, + 67, 7, -4, 121, 53, -127, -32, 4, -76, -88, 103, 13, 97, -77, 49, -51, 4, -54, 9, + 55, -91, -116, 118, 28, 54, 122, 123, -61, -114, 111, 84, 35, 30, 48, -99, -8, -107, -40, + 113, 80, -54, 43, 40, -99, -18, 78, 108, -31, 101, 115, -121, -76, -93, -121, -62, 20, 100, + 44, -91, -38, 83, -34, 38, 92, -32, -1, -39, 17, 57, 123, -66, -58, -7, -16, 7, -30, + 48, 116, -43, 120, 107, 66, -61, 1, -30, -47, 120, -78, 91, 99, -116, -13, 104, 6, 64, + 89, -47, 25, 43, -32, 114, 54, -127, 36, 70, -113, 108, 18, 57, -50, -23, 17, -113, -120, + 15, 42, 110, -25, 94, 15, 90, 40, -98, 39, -9, -120, 24, 44, 92, -96, 75, -7, 104, + -50, 64, -49, -113, -29, -23, -81, -70, 78, -124, -24, -123, 55, -72, -11, 124, -79, -84, -70, + -111, 98, 100, 120, 104, 84, -65, 115, -108, 90, -37, 124, 113, 69, -91, -14, 87, 115, -107, + 14, 116, -58, -92, -46, -75, -91, 46, -18, -4, -83, -111, -112, 112, -118, -55, 123, 56, 15, + 27, 44, 6, -24, 117, -43, -5, -76, 30, 12, 84, 29, 36, -49, 9, 76, -95, 107, 46, + 96, 67, -82, -40, -101, -41, -74, -116, 88, 65, 25, 31, -13, -82, 74, 49, -91, -118, -82, + 123, -23, -82, -102, -4, 93, -5, -20, 87, -42, 86, -104, -34, -104, -62, 1, 116, 54, -42, + -88, -123, -94, -27, -42, -108, -23, 117, -61, -54, 70, -20, 43, -82, 9, -37, -35, -4, 84, + 118, -110, 14, -85, -66, 54, -11, -72, -12, -126, -121, 120, -108, 72, 5, 8, -21, -71, -73, + -109, -35, 4, -107, 88, 74, -17, -106, 52, 47, -57, -4, 77, -42, 110, 21, 34, -86, -50, + 96, 93, -81, -96, 77, -98, 120, -24, 14, -23, -21, 77, -4, 36, 30, -46, 15, 13, -16, + 3, 86, 88, 115, 105, -24, 4, -3, -90, 72, -54, -20, -85, 89, -124, -113, 101, 67, 120, + -106, -53, -66, -58, 108, -43, 70, -93, 96, -92, -101, 127, -15, 100, -29, -71, -126, -117, 80, + -33, -40, 13, 15, 57, 43, -107, -43, -91, 65, 6, -125, -76, 52, -41, -81, -109, -61, 114, + -113, -52, 52, -37, -62, 46, -108, -30, 17, -9, 97, 24, 61, 53, 59, -17, -116, -36, -81, + 14, -11, 75, 117, 55, -7, -115, -55, 117, 22, -8, -119, 45, 58, -103, 88, 106, 88, -8, + -42, 80, 53, 119, -21, -84, 56, 35, -108, 110, 78, -10, -126, 82, 62, 24, 24, -78, 70, + 35, -112, -27, 35, -45, -68, 21, -22, 20, 107, 70, 41, 21, -67, 64, -119, -97, -90, 81, + -16, 47, -43, 0, 64, 51, 62, -54, -14, -62, -59, -52, 56, 68, -88, 31, -36, -5, 84, + 30, -12, 8, -109, 1, -28, -57, 117, -3, 106, -61, 60, -3, 28, -31, 8, -76, 94, 90, + 61, 23, 18, -3, 51, 36, -36, 50, -92, 43, 69, -99, -20, -59, -96, 67, -9, 30, 51, + -55, 91, -13, -62, -84, 110, 107, -69, 118, 32, -2, -18, -79, -10, 78, -2, -69, -23, 53, + -103, -22, 91, -93, -67, -66, -80, -10, -72, 65, -12, -68, -97, 116, -91, 5, -83, 63, 115, + -19, -120, 118, -34, 67, 113, 83, -126, 56, -53, 75, -113, 121, 36, -57, 86, 8, 1, 5, + -39, 13, -60, -13, -42, 79, 11, -58, 32, -94, -41, 125, -124, -24, 22, 110, 95, 115, 77, + -55, -44, -112, 21, -123, 109, 108, 119, 103, 123, 122, -99, 23, 34, 59, 107, 123, 68, -111, + -72, -30, 121, -75, -91, -31, 63, 104, -124, 126, -47, 88, -18, 10, -28, -71, 112, -92, -46, + -111, -5, 3, 13, 35, -35, -79, -23, 24, 52, 100, -51, -10, 123, -109, 126, -82, 83, 125, + -44, -29, -65, -65, -44, 21, 4, -87, -3, -62, -99, -1, 112, 70, -114, 27, -99, 13, 50, + -111, 1, 92, 117, -34, -65, -24, -58, 42, 59, 30, 35, -1, 28, -63, 86, -34, -86, -60, + -88, 4, 106, 93, 105, 82, 55, 61, -48, 125, 93, 20, -41, 103, -75, -29, 25, -102, 67, + -113, 124, -100, 32, -78, 122, -71, 122, -125, 101, -53, 98, 90, -100, 9, 65, -47, -24, 15, + 72, 105, -98, 100, 41, -96, -70, -116, -44, -48, 84, 127, -27, -63, 105, -20, 94, -40, 111, + 12, -102, 97, 24, 22, 17, -92, -120, 79, -16, 41, 117, -25, -76, -58, 121, -4, -100, -94, + -86, 62, -96, 118, 93, 120, 102, -44, 117, -74, -24, 14, -53, 61, 26, 79, 120, 61, -30, + -28, -28, -34, -79, -78, 8, -121, -108, 74, -94, -50, -79, -119, 85, 86, -126, -101, 53, 114, + 104, 23, -35, 1, 79, 10, 40, 116, 6, -70, 86, -49, -114, -90, -15, -111, 36, -116, 100, + 26, -98, 64, -28, -93, 100, -71, 46, -99, 110, -56, 70, 54, -61, 98, -76, -7, -36, 12, + 100, 122, -38, 24, 17, -102, -112, 17, 48, 87, -46, -74, 63, 61, 24, -74, -31, 101, -120, + 66, 126, 73, -123, 125, -22, -19, -1, 52, -3, 100, 93, 105, -56, -55, 4, 61, 98, 25, + 120, -124, -9, -55, 28, -118, 33, -9, 48, -60, 19, -111, 45, -78, 99, 20, -39, 112, -76, + 121, -47, 107, -59, -121, -50, 94, -44, -122, -108, 112, -77, 110, -94, 31, -67, -116, 2, -51, + -94, -75, -106, -24, -57, -92, -17, -18, -29, -37, -77, 68, 6, 123, -36, -51, 48, -103, -26, + -27, 45, 100, 31, -31, 122, -17, -90, 79, -99, -89, 116, 63, 7, 41, -98, 56, -76, 127, + 14, -79, 79, 48, 84, -100, 91, -73, -94, -106, -85, 21, -24, -74, -59, 45, 11, -92, 79, + 54, 77, -122, -80, -100, 18, -14, -88, 67, -5, -59, 56, -67, -122, 70, -9, -63, -6, 7, + 7, 29, 75, 21, -53, -97, -85, 14, 112, -117, -75, 93, -39, -10, -10, -126, 3, -11, 46, + -38, 106, 48, -100, -23, -18, 92, -111, -125, -91, 112, -26, -38, -55, -16, -31, 22, -107, -95, + 79, -69, 101, 81, 25, -103, 50, -45, 46, -106, -57, -56, 88, 16, 115, 79, 15, 15, -30, + 42, 42, -119, -7, 84, -22, -101, -109, 43, -28, 2, -109, -42, 74, 5, -7, -19, -16, -126, + -13, 34, 93, -53, 28, -83, -90, -42, -61, 7, -124, -117, -115, -50, -81, -10, 74, -97, 46, + 42, -86, -84, -44, 78, -119, -18, -38, 60, 8, 87, -40, -56, -7, 75, -33, 29, -9, -119, + -48, -102, -120, -114, 0, 91, 94, -33, -95, 32, 99, -81, -125, -89, -16, 126, -3, -125, -50, + 10, 71, 96, 96, 101, 100, -10, -105, 118, 10, 50, 94, -62, 90, -98, 122, -117, 14, 14, + -12, 52, -49, -63, 75, 75, -67, -13, -114, -65, -10, -112, 41, -68, 68, 53, -84, -121, -47, + -125, -74, -60, 8, 50, 20, 23, -107, 104, 59, 120, -112, -69, 74, -32, -99, -8, 5, -89, + 56, 74, -17, 88, -93, 10, 122, -101, -116, -63, -97, -6, -114, 105, -58, 80, 101, 89, -6, + 13, 119, -97, -121, -75, 71, 47, -45, -14, 67, -57, 55, 126, -62, 92, 28, 98, 31, 14, + 4, 60, -114, -22, -75, 100, 9, -126, 23, -40, 105, 54, -70, -119, 121, 27, -83, -38, -15, + 42, 47, 78, -82, 51, -24, 87, 117, 41, -81, -109, 93, 108, 91, 33, -42, -85, 95, -86, + 79, -22, -48, -29, 0, 76, 4, 117, 119, -74, 111, -116, -96, -60, 85, 12, 58, 16, -101, + -122, -47, -52, 71, 91, -21, -97, 30, -16, 73, 49, 52, -7, -50, -101, -67, -108, -67, -38, + 54, 6, 95, 14, -37, -54, -78, 81, 18, 122, -19, 109, 47, 116, -98, -80, 57, -96, 82, + -20, -85, 63, -125, 57, 51, -46, 66, -65, 29, -56, 124, -112, 62, 21, 100, -71, 88, 35, + -77, 59, -37, 15, -6, 116, -124, 112, 72, -34, -10, 83, -14, 107, -16, 19, 61, -33, -22, + -35, -86, -8, 12, -44, 104, -42, -6, -12, 103, -11, 51, 56, 50, -36, 0, 35, 30, 85, + 120, 79, -86, 23, -76, -102, -28, 16, 125, 103, -86, 42, -117, 84, -89, 91, 84, -63, 2, + -84, -11, 47, 13, -103, -86, -105, -76, 104, -56, 114, -81, -91, 45, -58, -43, 50, -63, 127, + -1, -32, 10, 8, -40, 55, -75, 92, -37, 38, 4, 109, -56, 72, 106, 55, 23, -40, -62, + 18, 43, -84, 72, 114, 1, 75, 24, 39, 42, -125, -10, 20, -87, -85, 26, -112, -97, 87, + 52, -74, -61, -48, 1, 80, -62, -5, 127, -1, 15, -30, 10, 35, -114, 1, -33, 32, -32, + 22, -71, -85, 122, 50, 88, -29, -110, 6, 94, -14, -39, 51, 91, -8, 106, -108, 10, -115, + -12, 6, 49, -96, -39, 100, -97, 73, 123, 110, -104, 74, -44, 5, -114, -36, -71, -47, -110, + -38, 113, -23, -10, 104, 51, 117, 114, -73, -105, -123, 108, 33, 121, 77, -95, 97, -112, 42, + 50, 33, 71, 58, -77, -20, 65, -24, -37, -32, 99, 75, -28, 3, 109, 19, 30, -42, -108, + 101, 66, 68, 12, 126, -8, -82, 39, 86, 111, -71, 32, 118, -60, 100, 59, -7, -102, -114, + -90, 42, 46, 60, -65, -49, -118, 28, -40, 77, 19, 6, 84, 93, -76, -73, -106, -110, 7, + -97, -73, 88, 71, 59, -58, 100, 0, -122, -38, 82, 41, 25, -13, -90, -107, -11, -115, 18, + -27, 46, -3, -92, 86, -34, 67, 42, 81, -81, -5, -89, 39, 17, -118, 5, 73, 98, 7, + -10, 10, -17, -4, -20, 34, -28, 53, -85, 86, -104, -96, -71, 114, -106, 95, 83, 49, -70, + -77, -108, 62, 88, 18, -9, -103, 120, -36, 104, 92, 68, 48, -104, 112, -15, -101, 112, 17, + 37, -56, -86, 35, -114, 63, 81, 126, 18, 4, -86, -2, -121, 49, 4, -110, -25, -40, -105, + -81, 102, 95, 32, 70, -101, 103, -29, -9, 85, 10, -115, 77, -79, -31, 50, -84, 85, -16, + 107, 12, 26, 100, -94, -126, -40, -123, -37, -119, 28, 109, -122, -75, 14, 63, 107, -101, 59, + 56, 61, 112, -8, -43, -3, -14, -48, -106, -76, -25, -14, -57, 71, -2, 62, -111, 64, 53, + -23, -11, -36, 104, 40, -74, 89, 46, -97, 25, 69, -91, 44, 12, 108, 127, -96, -117, -100, + 35, -72, 39, -40, 5, -17, 78, 109, -61, -106, -42, 60, 9, -88, -65, 81, -16, 101, -76, + -55, -28, -114, -51, -7, -82, -36, -17, -22, 77, -48, -34, -7, -118, 25, 84, 124, -95, 101, + -8, 98, -86, -83, 40, 61, 66, 28, 35, 117, 50, 16, 44, -3, 27, 115, 40, 80, -9, + -18, 13, 54, 6, -115, 69, 77, -59, 107, -41, 121, -110, -18, 58, -117, -119, 15, -79, 82, + 82, 124, -97, 85, 30, 124, 66, -66, -111, -38, -42, 77, 45, -12, -115, 125, -104, 102, -82, + 42, -47, 43, -107, -104, 75, -89, 67, 72, 78, 66, 17, -75, 76, 11, 18, 18, -98, 47, + 93, -66, 74, 21, 15, 105, 79, -66, -101, 89, -49, 32, -43, -32, 43, 85, -79, -106, -104, + -26, 118, 12, 126, 19, -63, 52, 31, -42, -103, 54, 91, -77, 3, -92, -108, -42, -116, 94, + -13, -28, 122, 81, -123, 79, 18, 38, 16, -4, 46, -80, -62, 52, 42, 53, 42, 8, 61, + -67, -8, 7, 68, 83, 103, 25, 85, 103, 59, -79, -95, -109, 51, -92, -110, 42, 51, -85, + -109, 39, 78, -2, -27, 6, -76, 119, -88, 96, -125, 111, 77, 1, 94, -79, -127, -78, 84, + -22, -25, 53, -90, -54, 68, 125, 118, 31, -69, 42, 116, -28, -30, 126, 88, 85, 119, 87, + 11, 6, -34, 38, -48, 9, -64, 90, 87, 114, -112, -39, 78, 4, -114, -103, 18, 105, -69, + -26, -2, 6, 76, 15, 111, 14, 52, 84, 34, 125, -50, 15, -16, -42, -81, -8, -5, -21, + 40, 58, -4, -64, 94, -66, -122, 109, -43, -91, -50, 119, 53, -52, 52, 15, 87, 2, -36, + 6, -51, -28, -15, 12, -12, -125, -13, 85, -118, -40, -116, -105, 30, -64, 49, 121, -32, -17, + 4, -61, 117, 22, -102, 75, -94, 63, 73, -92, -122, 36, 9, 96, -64, -111, 28, -114, -45, + -65, -10, -59, -75, -39, -125, 22, 36, -101, 85, -62, 6, 20, 103, -100, -127, -95, -6, 31, + 80, 3, 93, 43, -45, -2, -43, 108, 51, 51, -106, 124, 60, -116, 108, -127, -87, 34, 68, + 80, 48, -6, 55, -102, -105, -60, 29, 120, -76, -53, 124, -16, -28, 111, 99, -14, 96, 77, + -124, 83, -111, -14, 88, -90, -127, 120, -32, -22, 48, -5, -23, 46, 127, -36, 40, -17, 93, + -33, -127, -37, 126, -79, -58, -36, -103, 12, -39, 61, 1, 47, -26, -74, 120, -95, -29, 10, + 41, -63, -59, -96, -88, -73, 126, 38, 3, -44, 13, -101, -62, -12, -52, 71, 21, -44, 23, + -19, -111, 83, 41, -76, 64, 84, 126, 80, 121, -56, 46, -9, 42, -89, 107, 10, -4, 39, + -96, -36, -24, 92, -73, 6, -73, 5, 39, -16, -35, -99, 126, 112, -122, -86, -44, 82, -62, + 26, 44, 56, 87, 14, 80, 95, -116, 57, -15, -1, 102, 19, -4, -118, 108, 3, -35, -79, + -50, -3, -59, -91, -40, 96, 65, 14, 107, -31, -94, -69, 107, -93, 74, 27, -62, 77, -89, + -30, -78, -111, 123, 2, 32, 10, 8, 49, 47, 32, 51, -55, -119, 76, 37, 58, -92, 60, + -105, -109, 23, -21, -125, 104, -85, 76, -26, 127, 125, 78, -31, -117, -116, 100, 98, -11, 119, + 4, -74, -67, -124, -87, 79, -54, 111, 39, 119, -119, 28, -14, 7, 121, -105, -58, -8, 88, + 83, -94, -12, 92, 43, 36, 31, -4, 31, 76, -95, 42, -74, 58, -51, 92, 60, 17, 101, + -45, 14, -105, 47, 75, -122, 124, -90, 11, -5, 44, 12, 8, -3, 122, 25, -29, -28, -106, + -65, -75, 27, -10, 123, 79, -120, 104, -55, -49, 27, -9, 63, 36, 68, 101, -59, 9, 88, + 102, 87, 25, -67, -101, -50, 111, -17, 36, -2, -64, -54, 31, -72, -24, 81, -51, 27, -68, + 74, 62, -93, -42, 17, 37, 102, 17, -7, 55, -11, -101, -91, -4, 94, -122, 55, 72, -89, + 11, 44, 114, 11, -91, 123, 48, -52, -88, 69, -82, 55, 13, 0, 61, -75, -13, 115, -81, + 112, -66, -118, 107, -25, -94, 123, 103, 16, -2, -47, 73, -23, -56, -73, 42, 67, 76, 27, + 11, 80, -18, -52, -77, -113, 15, 72, -109, -102, 49, 114, -32, -109, -66, 45, -74, 22, -9, + -90, 30, -50, 122, 34, 72, -82, -45, -18, -1, 56, 15, 19, 22, 122, -63, 78, -67, 67, + -58, -94, -109, 27, -40, 82, -86, -49, 59, -91, 112, 51, 72, 36, -20, -52, 119, -16, -8, + 7, -16, -35, -75, -20, -1, -26, -74, 46, -4, -32, 78, -122, -29, -92, -13, 12, -106, -102, + -81, -97, -57, -74, -10, -1, -42, 26, -102, -125, -88, -79, -81, -27, -47, 118, -47, -110, 124, + -64, 21, 15, 20, 0, -24, 3, 3, -24, -16, -6, 108, -89, 75, 63, -96, 63, 70, 127, + -47, 81, 54, 47, -76, 11, 111, -64, 106, 107, 117, -30, -41, 10, 3, -54, -72, -72, 100, + -77, 32, 121, 97, -12, -100, -37, 93, -101, -124, -47, -45, -45, 5, -127, -18, 53, -85, 22, + 62, -98, -90, 127, 78, -88, -119, -57, 115, 87, 9, 53, -106, 86, 66, 120, 53, 121, -4, + -45, -1, 53, -25, 56, 79, -38, 6, -28, 94, 35, -93, 55, 86, -80, 14, -98, -92, 103, + 118, -72, -66, -75, 59, 14, 51, 110, 37, -121, -112, 33, 122, 117, -65, -69, 37, -93, -109, + 92, -57, 119, -122, -22, 69, 18, 79, 40, -8, -117, 75, -21, 26, -80, 74, -104, 92, -8, + -30, -85, 109, -72, -13, -99, 103, -73, 50, -110, -63, 80, -63, -87, 106, -101, 30, 77, -54, + 41, -2, 85, 40, 84, -73, -58, -29, 75, 102, 94, -65, 21, 42, -42, -119, 116, 117, 124, + -38, -41, -32, -106, -44, 101, -84, 49, -82, -33, -106, 59, -98, 120, 120, -31, 55, -95, 9, + -107, -83, 31, -70, -9, 57, 35, -125, -6, -79, 27, -110, -80, -48, -41, 112, -22, -50, 102, + 92, 106, 89, 61, 41, 65, 116, 120, -2, 81, 111, -64, 44, 1, -102, -43, 29, -87, 37, + 3, -29, -114, 12, -68, -69, 21, 48, 35, -121, 96, 80, -6, 93, -70, -102, -18, -2, -120, + -2, 87, 12, -19, -45, 104, 75, 62, -110, -96, 1, 38, 42, 106, -96, 109, 15, -32, -46, + 88, -49, -27, 48, -37, -12, 16, 96, 97, 50, -109, 33, 63, 78, -66, 54, -104, -29, 107, + 34, -46, -98, -122, -26, -90, 24, -53, 86, -91, 29, 76, -102, 69, -5, -106, 48, 37, -82, + 68, -109, -77, 3, -14, 63, 68, 38, 56, 97, 41, -25, 91, -109, -96, -92, 56, -127, -86, + 12, -38, -26, 5, -30, 84, -68, -94, -107, 100, -77, -59, 59, 74, 3, -39, -19, -41, 83, + 91, -23, 36, 122, 121, -7, 66, -29, -124, -85, -10, 118, -48, 99, -20, -84, -111, 6, -108, + 76, -101, 114, 106, -57, 63, -36, -43, -71, -30, -66, 98, -96, -53, 49, -120, -9, -93, 5, + 6, -104, 49, -45, -26, -48, 85, -54, 71, -80, 17, -10, -43, 48, 44, -2, 86, -50, 22, + -49, 16, 47, -16, -120, 104, -51, -84, 11, -98, 112, -18, 37, 34, 18, 120, 117, -120, 22, + -86, 24, 3, -47, -72, 43, 107, -125, 83, -7, 34, 118, -124, 13, 51, -8, -49, -31, 105, + 10, -38, 99, -9, -33, 98, -125, -48, -115, -7, 92, -45, 127, 68, -124, -61, -17, 127, -114, + 7, -105, 89, 10, 53, 124, 2, -112, 53, -70, -78, -90, -25, 52, -49, -49, -121, 26, -69, + 92, 77, 64, -20, -44, 53, 50, 59, 22, 127, 92, -1, -99, -21, 16, 111, 102, -43, -116, + 68, 100, -7, 86, 100, -28, -19, 58, -26, 102, 36, 32, -14, 78, -118, -85, -78, 31, 64, + 44, -58, -60, -32, -62, 6, -55, -46, 104, -33, 58, -21, -11, -34, 2, -80, -4, 77, 66, + 111, -18, -86, 59, 117, -100, 105, 17, -84, 121, 3, -121, 8, -84, -106, 94, 96, -16, 58, + -113, -12, 51, -29, -32, -51, 77, 68, 97, 30, -69, -21, 99, 62, -37, -122, -86, -28, -66, + 108, -62, -89, 113, 109, -34, 81, -52, -100, -14, -48, 99, 61, -41, -106, -107, -57, -58, -124, + -44, -118, -60, -46, 16, -47, 29, 18, 20, 46, -88, 82, -88, -22, 9, -98, -94, -5, -64, + 60, 103, -37, 13, -98, -40, 97, 124, -61, 49, -120, 122, 119, 5, 46, 110, 124, -16, -119, + -96, -16, 126, -29, 107, -84, 0, -112, -44, 30, 54, 43, -52, -114, 36, 33, 68, 77, -113, + 113, 33, 89, -14, -64, -9, 79, 117, -9, -77, -103, -95, 28, 9, -5, -125, -72, 109, 67, + 5, -108, 90, -48, -46, 34, -102, 124, -30, -14, 114, 96, 105, -64, -96, -45, 96, -72, 50, + 39, -11, 127, 60, -22, 99, 107, 1, 39, -84, -36, -121, -87, 105, -112, 3, 24, -72, -54, + 88, -96, -120, -97, 19, 68, 3, 33, 47, -23, 80, 38, 92, 108, -43, 24, -126, -66, -33, + -9, 87, -72, 102, 62, -8, -68, -116, -62, 102, -78, 13, -5, -11, -18, -41, -85, -30, 108, + 98, 91, -18, 25, -11, -64, 30, -91, -123, -79, 43, 91, -8, -85, 94, -63, 67, -121, -13, + -24, 58, 9, 118, 71, -59, -28, 101, -1, 106, 92, 56, -15, -87, 82, 68, -9, 11, 77, + -108, 48, -66, -56, -32, -89, 109, -14, 15, 108, -115, 64, 27, 84, 61, 91, 111, -81, 27, + -44, -114, -5, 108, 98, 61, 48, -7, 120, -61, 22, -86, 36, 100, -60, 22, 58, -9, -9, + 124, -4, 62, 100, -46, 50, -75, -100, -41, -37, 75, 0, -107, 4, -57, -27, -89, 31, 119, + -2, 123, 115, 85, 71, -36, 49, 7, 87, -14, -113, -61, 38, -74, 56, -69, 56, 66, 46, + -20, 52, 127, 30, -16, 32, -44, 21, 110, 102, 79, 80, -118, 92, 125, 30, -72, 51, 112, + -67, -37, -30, 29, 87, 12, -27, 80, -92, -67, 86, 65, -10, 2, -100, -79, 44, 27, -34, + 108, 81, -105, 1, -64, -113, -35, -46, -63, 27, -54, -120, -106, 33, 80, 90, -41, -56, -65, + -79, -14, -39, 101, -60, 6, -82, -57, -98, 78, -36, -9, -13, -58, -4, -116, -66, -41, -28, + -98, -40, -44, -84, -34, 46, -105, -115, -82, 38, -101, 53, 36, -123, -79, 108, -57, 81, -109, + -90, 86, -14, 43, -72, 75, 46, 10, 117, -101, 110, -41, 109, -44, -15, -74, 42, -42, -8, + 27, -90, -3, -33, -97, 67, 91, -15, 47, -42, -90, -47, 125, 83, 7, 13, -4, -120, 88, + -84, -55, 93, 33, 46, 101, 114, -61, 91, -89, -43, 38, -25, 82, -49, -120, -7, 30, 45, + -76, 78, -66, -112, 10, 36, 25, -44, -74, 59, -48, 13, 95, 22, 46, 111, 122, 18, -81, + 79, 35, -7, -93, -63, -67, 104, -47, 114, 110, -29, 94, -72, -74, 36, -24, 33, 122, 68, + -77, -70, 18, -14, -38, -74, 16, -52, 86, 53, 123, -67, 28, -37, 46, 20, -80, 60, 45, + 18, 67, -109, -11, 28, 25, -29, 30, 124, 27, -116, -43, 35, -23, 64, -96, -114, 22, 38, + -34, -114, 125, 20, 2, 120, 29, 59, -86, -88, 125, -91, -123, -93, -110, 115, -1, -117, -30, + 114, 125, -99, 79, 33, 91, 77, -38, -6, -125, -90, -111, 39, 103, 81, 111, 111, 87, -37, + -70, 65, -18, -34, 67, -29, 112, -34, -63, -22, 88, 109, -78, -71, -125, -126, -7, 22, 26, + 30, 108, 14, 13, 58, -115, -99, 77, 111, 84, -123, -112, 39, -1, 77, 58, 97, -56, 83, + -111, -83, -88, 100, 22, -99, -80, -124, 5, 117, -18, 72, 55, 83, -116, 43, 106, -73, 76, + -23, -10, -22, 85, -38, -24, 116, 75, 38, 51, -69, 116, 116, 117, -68, 93, 96, -1, -51, + -122, -19, 25, 10, -76, 63, -19, -126, -41, 48, -76, -71, -27, 7, -66, 32, -21, -38, 94, + 94, 121, 34, -118, -48, 23, 76, 117, -92, 56, -101, -11, -121, 92, 6, -93, 72, 25, -125, + 23, -27, -94, 96, -30, -77, -75, -31, -70, -26, 20, -93, 123, -34, 95, -66, 55, 83, -121, + 113, 24, 30, -40, 52, -20, -98, 42, -12, -123, -42, -77, -119, -23, -83, -89, 63, 75, -18, + 118, -55, 118, 69, 63, -26, 92, -50, -56, 69, 104, 105, -124, 125, 65, -101, -41, 6, -11, + 85, -80, -13, -75, -122, -108, -7, 116, 98, 72, -111, -41, 2, -91, 28, 45, -114, -13, 70, + -72, 16, 67, -99, 11, 47, -55, -78, 123, 12, -66, 58, -83, 70, 35, -102, -69, 53, -17, + 42, -120, 23, -37, 2, -93, -23, -112, 115, 125, -10, -48, 52, 103, -64, 14, -125, 59, 65, + -56, -48, -48, -35, 115, 4, 100, 83, 47, 71, -109, -35, -60, -50, 66, 42, -125, -85, 86, + -70, 9, -77, -122, 68, 31, -106, -76, -95, -65, 73, -94, -1, 25, -23, -67, -84, -11, 60, + -105, -30, -70, -90, 52, -46, -23, 86, -69, 112, -58, 119, -69, 74, 27, -36, 46, 39, -96, + -60, 3, -84, 124, -67, -9, -34, -92, 111, 119, -28, -26, 67, 34, -46, 45, 47, 11, -45, + 53, -93, -32, -63, -120, 63, -14, -99, 83, 126, -80, 112, 79, -22, 37, 21, -126, -66, -87, + 33, 45, 105, -120, -46, 90, 73, 26, 112, 41, 63, 42, -74, -1, 5, 77, -62, 56, -87, + 74, 126, -58, -35, 33, 35, 9, 76, -115, 53, 2, 108, 93, -101, 45, -41, -82, -5, 21, + 17, 83, 24, 37, 58, -78, 74, 95, -30, -51, 100, 74, -33, 114, -81, 32, 87, 106, 46, + 65, -74, 15, 113, 3, -100, 69, 7, 118, -64, -8, -96, -107, -122, 14, 67, 70, 20, 101, + -72, -109, 87, 63, 58, -39, 9, -18, 1, 17, 37, 60, 46, -13, 34, 3, 5, -14, -5, + -65, -121, 124, 20, -6, 98, 29, -6, 64, -72, -51, -122, -48, 14, -13, 117, 66, -21, -109, + 8, 39, -68, 108, 93, -98, 41, 94, -14, -127, 94, -104, 117, -25, 35, -26, -97, 105, 1, + 30, -104, 109, 13, -121, 77, 32, 9, 78, 6, -112, 65, -8, 121, 112, -126, 96, 108, -82, + -16, 41, 27, 123, -99, -12, 83, -21, -14, -102, -59, 31, -127, -28, -18, 68, 118, 58, 123, + -4, 116, -45, 26, -87, 42, 81, 118, -8, 73, -124, 122, -28, 82, -112, 86, 105, -83, 1, + -120, 10, -117, 20, -62, -112, -54, 54, -78, 118, 79, -116, -20, 102, -44, 81, 111, -89, 67, + 56, -45, -12, 53, 8, -29, 53, 125, -119, -86, -4, 92, -108, 7, -1, 19, -45, -117, -21, + 32, -67, 60, 22, 69, -12, -19, 83, -40, 42, 52, -88, -107, 79, 21, 79, 41, -67, -117, + 51, 79, 24, 69, -23, -42, -48, 58, 106, 9, 84, -122, -91, -36, -33, 84, 125, 12, -45, + 56, 100, 64, 107, 38, -68, -17, -83, -15, -110, 18, -78, -121, -88, -84, 39, 116, -1, 54, + -53, 70, 95, 95, 81, -4, 13, 15, 18, 62, -95, 70, 1, 105, 38, -94, -87, 79, -69, + 92, -1, 6, 99, 96, 47, -93, -70, 31, -46, -64, 72, 50, 44, 91, -34, -117, -94, 9, + 93, 3, 66, -84, 29, -51, 55, -72, 93, 67, -99, 28, -19, 19, -105, -38, -82, -28, 28, + -69, 127, -105, -106, 47, 58, -84, 89, -9, 123, -85, 105, 36, -119, -66, -51, -78, -124, 64, + -67, -57, 118, -21, -120, 72, -63, 97, 80, -52, 24, 120, 47, -99, -109, 97, -46, 112, 100, + 15, -42, -126, -57, -117, 56, -120, 8, 37, 68, 81, -53, -4, -17, 102, -40, 34, 34, 38, + -92, -105, 26, -118, 111, 119, -1, 55, 50, -102, 55, 57, 111, 64, 69, -28, -26, -71, -48, + -11, 69, -122, -16, 44, -7, 59, -111, 38, -7, -80, -82, 58, -115, -97, -45, 2, 64, -84, + 22, 53, -122, 69, -126, 116, -28, -82, 102, -59, 27, 83, -121, 15, -118, -27, -49, 99, 93, + 127, 27, 0, -84, 47, -26, 106, -56, 13, 64, -72, -65, 47, -8, 58, 119, 6, -18, 90, + -56, -43, 120, -126, -19, 53, 21, -31, 85, -65, -29, 101, -107, 49, 101, 123, 36, -74, 67, + -19, -72, -22, 3, 16, 90, 7, -34, -110, -40, 126, -124, -65, 66, -13, 67, 72, -100, -76, + -69, -13, 69, 90, -105, -72, -90, 59, 3, -102, 108, 92, 82, -120, 112, -88, -7, -65, -79, + -126, 35, 29, 1, 82, -99, 24, 120, -56, -123, -61, -108, -10, -26, -77, -89, 76, 85, -35, + -93, -122, 90, -86, 68, -7, -61, -115, 50, -97, 102, -39, -22, 99, -2, 4, 94, 102, -30, + 58, 89, 92, 125, 107, -55, 4, 12, -88, 90, 103, -3, -24, -47, 67, -97, 13, -66, 89, + 53, -33, 40, 127, -114, -12, -57, -82, 121, -96, -63, 86, -47, -8, -55, -45, 1, 93, 101, + 106, 54, 99, 74, 52, 27, -121, -79, -91, -118, -9, -39, -117, 74, -114, 117, -36, 51, -24, + 1, -46, 36, 118, -45, 61, 95, 23, 33, 59, 88, 87, -85, 67, 67, -36, -63, -57, -74, + -87, -112, -61, 72, 108, -114, -64, 7, 48, 70, -107, -90, -9, -3, -74, -22, 89, 12, 44, + -99, 93, 55, 23, 116, -7, 117, -124, 23, -3, -36, -73, 54, 111, -38, 106, -46, 94, -121, + 91, -55, 40, -37, -90, -106, 26, 44, -6, 64, 111, -112, -40, -109, -116, 60, -98, 113, -9, + -85, -28, -106, 62, -48, 23, -124, -25, -45, -110, 32, -57, 126, 5, -107, -126, 120, -92, 25, + -28, 25, -46, 119, 49, -83, 118, 0, 124, -84, -106, -24, -21, -126, -126, 12, -116, 71, -27, + 70, 65, 41, -62, -1, -33, -80, -55, -118, -78, 1, 62, 113, 63, -37, -107, 26, 13, -28, + -2, -69, -120, -53, -60, 14, 37, 33, -93, -75, 93, 39, -98, 68, 76, -27, 100, 46, -125, + -76, 59, 121, 125, 44, 54, 18, 121, 25, 123, 124, -41, -25, -40, 78, 66, 108, 96, -82, + 45, 82, -111, 46, 76, 123, -85, -35, 88, -82, 81, 68, -39, -63, -78, -84, 23, -6, -7, + -5, -15, -97, -123, 121, -104, 10, 37, 42, -125, -17, 73, -32, -17, 31, 112, -109, -107, 2, + 83, 10, -94, 105, -30, 2, -108, 97, -121, -105, 21, 85, 50, -92, -108, -6, -99, -114, 103, + 2, 43, 97, -114, 63, -89, 122, 94, 89, -78, -48, 75, -72, 116, 125, 91, 120, 26, -113, + 88, -14, -96, 59, 123, 59, 59, -13, 55, 58, 49, -94, -37, 127, -4, 0, 110, 125, -124, + -30, 111, -90, 40, -96, 104, -92, 87, 43, -86, -55, 97, -94, -50, 110, 124, 9, 119, -9, + 92, 15, 36, -62, -114, -29, -24, -56, 63, -76, 21, 69, 39, -40, -11, -111, -56, 49, 120, + 122, -26, 112, -92, -32, 6, -106, -37, 123, 26, -121, -41, 76, 29, -20, 81, -60, -61, -47, + 11, 35, -3, 115, -114, -40, 94, -108, 68, -126, 120, -66, 124, 56, -10, -10, -37, -24, -103, + 11, 115, -92, 29, -62, -10, 65, 69, 4, 68, -19, -24, -105, 30, 65, 123, 71, -119, -18, + 59, 52, 35, -116, -80, -4, 9, 115, -15, 19, 37, -114, -100, 118, -115, -103, -113, -23, -56, + -19, 40, -83, -92, -78, -16, 93, 52, -53, -12, 8, 0, 85, -94, -108, -57, 104, 91, 95, + -117, -97, 12, -88, -18, 1, 79, -45, -32, 101, 114, 120, 111, -32, 7, 122, 67, -124, -43, + -6, -79, 17, 5, 109, 69, 17, 30, -62, 32, 32, 98, -31, 40, 22, -63, -76, 119, -7, + 68, 108, 24, 120, 113, -87, -108, 104, -88, -56, 17, 89, 77, 6, -82, -59, -81, -86, -55, + -107, -66, -26, 95, 104, 81, -12, 89, 83, 21, 107, 110, -12, 34, -69, -55, 64, -6, 59, + -95, -97, 81, -38, 66, -93, -10, 100, -47, 5, 11, 70, -12, 46, 108, 118, 36, -91, 38, + 39, -2, -82, 24, 108, 76, -40, 7, 9, 111, 59, -44, 8, 27, -86, -116, 19, -54, -101, + -90, -28, 12, -108, 86, -5, -5, -112, -126, 64, -20, 57, -72, -18, 108, 40, -58, 43, 85, + 13, -97, -37, 39, -113, -115, -110, -46, -1, 82, 53, -41, -53, 55, -83, 87, 35, 97, 8, + -54, -25, 99, -40, 24, -26, -30, 92, 9, -124, -79, 50, -106, 6, 111, 58, -126, 35, 56, + -59, 23, 14, -89, 27, 73, 37, -124, -85, -41, -80, -55, -27, -7, -31, 48, 101, 97, 81, + -8, -39, -59, 18, 88, 93, 113, 25, 84, -12, -35, -18, 108, -55, 56, -83, -113, 96, 36, + -119, -70, 58, -113, -51, 67, 116, -48, -121, -100, 72, -13, 5, -26, 37, -29, 98, 76, 92, + 58, -38, 23, -109, -51, 97, 99, 122, -65, -73, -2, -112, 51, -80, -38, -86, -104, -26, 120, + -53, 56, -106, -120, -104, -37, -51, -110, -11, -31, -2, -70, -14, -78, -122, 122, 50, -39, 64, + -16, -105, 103, 19, 69, 16, -24, -96, 114, 43, -85, -99, 118, -98, -103, 5, -42, 108, 99, + -112, -107, 53, 126, 104, -2, 33, -70, 94, -49, 33, -90, 102, 16, 45, 0, 112, -29, -89, + -22, 80, -57, -48, -32, -13, -109, 47, -86, 88, 74, -15, 63, 40, 103, 113, 95, -119, -33, + -92, 20, 3, 111, -74, -111, -6, -26, 41, -52, 91, -31, -87, -97, 121, -100, 44, -61, -40, + 64, 16, -70, 106, -102, 46, 31, 5, 62, 41, -46, 16, 50, -110, -63, 78, -87, -112, 53, + -17, 28, -58, 77, 46, 96, -37, -94, -97, 39, -67, -3, 76, -18, -95, 104, -99, 27, 82, + -50, -50, 49, -57, -16, 92, 43, 62, -108, 126, -61, -52, -35, 69, -23, -71, 32, 67, -18, + 82, -68, 86, -3, -77, -105, -68, 60, 23, 18, -29, 24, -14, 43, -88, 54, -75, 102, 122, + 112, 58, 20, 24, 68, 36, 26, 63, 89, -98, 32, -100, -46, -32, 16, 99, -80, 26, 78, + -8, 46, 69, 69, 8, -8, 11, -115, -17, -52, -107, -122, -118, 14, -51, -79, 91, 71, -1, + 72, -105, 18, -61, -75, 48, -7, -27, -62, 113, 90, -3, 78, 41, -81, 91, 12, 38, -94, + 24, -43, 0, 8, 124, -100, 57, 108, -69, 68, -27, -34, -84, -73, -120, -88, -25, 64, 93, + -82, 5, 42, -65, -17, -70, 104, 34, -93, -51, 57, 12, 74, 60, -39, -19, 86, -17, 64, + -92, 106, 4, 104, -71, 60, -14, -104, -81, -84, 44, 106, -117, -9, 52, 27, 19, -38, -86, + 74, 39, 65, 5, -57, -88, -37, -70, 102, 95, -73, 85, 62, -6, 126, 31, 0, 48, -89, + 51, 60, -71, 67, 19, 50, -120, 39, -78, 74, -9, -11, -94, 16, -49, 82, 68, -14, -106, + -79, -86, -5, -9, -6, -42, 21, -4, -106, 23, 119, 10, -49, -4, 96, -67, -46, 0, -60, + 104, 74, 79, 41, -124, 121, 96, 86, 72, -10, -4, -114, 62, -28, 53, 51, -1, 85, -60, + -68, 12, -108, 9, 76, 61, 123, 92, 47, 121, 86, 122, 91, -59, -82, 5, 49, -23, 115, + -109, -69, 56, 75, -101, -59, 63, -31, 15, -37, -58, 85, 14, -78, -93, 125, -64, 17, -123, + 6, 16, -42, 44, 96, -48, 60, -28, -82, 43, 38, -13, 72, 62, 107, 66, 83, -105, 38, + -122, -126, 37, -54, -70, -71, 102, -124, 95, -93, 93, 82, 58, -65, 24, 1, 29, -5, -88, + 56, 84, 123, -97, -33, 99, -66, 33, -11, 28, -56, 101, -38, 70, -53, -16, 101, 38, 116, + -100, 114, 117, -91, -103, -68, 79, 126, 93, 97, -80, -39, 50, -59, -105, 34, 24, 29, -33, + -38, 39, -97, -25, 76, -100, 78, -59, -107, 14, 6, 107, -127, -45, -31, -122, -14, -111, 72, + 19, 71, -21, 104, 53, -32, -4, 100, -70, 96, 55, 59, -75, -90, 86, 78, 102, 53, 29, + -92, -76, 18, -113, -54, -57, -100, -68, -77, -73, 12, -80, 71, 73, 11, 17, -41, -43, 64, + -79, 20, 45, 117, -53, -20, 1, 54, -121, 126, -112, -88, -36, 88, -75, 8, 112, -59, 31, + -110, 52, -6, -5, -102, 28, -27, -11, -113, -27, -31, 2, 122, -79, 0, -29, -22, -58, 121, + -22, 95, 88, -75, 113, -14, 65, 120, 75, -24, 76, -5, -55, 44, 43, -44, 8, 88, 37, + -119, 98, -9, 39, 1, 79, -48, -108, -67, 121, -95, -50, -82, 85, 19, 7, 76, 123, 9, + 69, -119, 103, 88, 15, -102, -82, -42, -28, -45, -106, 7, -28, 97, -14, -8, -6, 67, 63, + 87, -100, 100, 34, 84, 125, 63, -65, -99, -102, -50, -94, 124, -52, 5, 117, -27, 58, -78, + -81, -31, -102, 30, 101, -100, 98, 102, 100, 75, -68, -25, 14, -59, -21, 71, -100, -24, 107, + 117, -27, -7, -14, -57, -119, 85, 99, -6, -107, 93, -70, -103, 112, -16, -9, -58, -54, 5, + -47, -67, 58, 79, 71, 107, -10, -72, 98, -31, 98, -48, -37, -58, 95, -100, 57, -66, 101, + 68, 6, 62, -121, 35, -6, 5, -19, 44, -39, 106, 106, 86, -90, -65, 67, -35, -57, -70, + -13, -29, 13, 29, -43, 2, 60, 30, 72, 62, 17, -110, -125, 117, -119, -72, -78, -55, 115, + -2, 52, 25, 37, -54, -97, 94, -116, -100, -95, 13, 83, -79, -94, 99, -61, 28, 121, 83, + 26, 36, -29, -116, 45, -18, -91, -25, 117, 18, -101, -18, -33, -11, -47, 24, 99, -36, 102, + -97, 68, -96, -82, 125, 27, 21, 103, 57, -70, 67, 12, -71, -87, 73, 86, -80, 125, 62, + 39, -8, 8, -80, -102, 38, -115, -48, 122, -103, 41, 25, -27, -80, 117, -26, -82, 39, -19, + 16, 51, 48, 33, -9, -39, 29, -126, -16, 12, 84, 43, -124, 123, -53, -33, -62, 2, 104, + 108, 30, 74, 35, -107, 72, 5, 10, -15, 50, -123, -23, 60, 65, -31, 58, -106, 61, -1, + 11, 30, 33, 125, -65, 44, -75, -122, 73, -118, -126, -38, 34, 97, -65, 54, -39, -8, 29, + -53, -125, 44, -122, -26, 63, -40, 89, 19, -35, 61, 39, 74, 107, 64, 30, 38, -94, -57, + 64, -67, -37, 104, 21, 63, -77, 99, -32, -48, 66, 50, 121, 121, 98, 53, 38, 30, 114, + 91, 7, -6, -62, 92, -104, -27, 87, -47, 82, -46, -60, -115, -6, -86, 124, -105, -120, -122, + 38, 72, 119, -28, -13, -5, -118, -87, 70, -91, 18, -122, 64, 104, 84, 123, 94, -10, -56, + -45, 108, 23, 23, 66, -39, 9, -67, -126, -112, 45, -54, 6, -54, -64, -16, -61, -21, -9, + -92, -60, 4, 8, -113, 39, 27, -22, 12, 122, -11, -14, -42, 40, -36, 28, -52, -47, 98, + -113, 12, -51, -111, -13, 48, 71, 116, 81, -82, -63, 12, -64, 95, -111, 64, 115, 23, 25, + 8, -120, 100, -34, 91, 72, 120, 118, 53, -42, 113, 2, 18, 99, 19, 120, -3, 44, -52, + 48, 84, -13, 33, 96, 38, 38, -108, 47, 88, 116, -56, 126, -85, -60, 43, 26, 90, 74, + 8, 67, -62, 76, -79, 65, -38, -1, -106, -116, 12, -79, -102, -68, 41, 32, 34, -26, 27, + 89, -65, -78, 115, -106, -102, -60, 85, -81, -35, -82, 39, 94, -125, 61, 80, 6, 47, 50, + -14, 55, -120, 38, -23, -47, -34, -4, -96, 11, 1, 88, -27, -38, -117, -11, 92, 104, 100, + 112, 125, 38, 88, 59, 26, -76, -65, 95, 71, 110, 63, 91, -31, 72, 107, 76, -37, -49, + 71, 120, -81, 57, -8, 45, -112, 63, 22, 92, -82, -97, 48, 60, -48, 74, -112, -80, 53, + -28, 83, 74, -77, 52, -47, 51, 6, -76, -47, -98, -11, -96, -70, 38, 73, 42, 38, 83, + -32, 83, -80, 73, -68, 18, 89, 60, 99, 110, 72, -47, 73, -32, 80, 78, 10, 28, -1, + 52, -111, 40, -60, 26, -89, -107, 28, 41, -97, -122, 72, -88, -36, -83, -3, -101, -33, -51, + -12, -76, 109, -36, -57, -15, -32, -11, -40, 91, 26, -80, -72, -116, -84, -80, -42, 9, -124, + 15, 106, 32, 88, -67, 28, 53, 43, -89, 15, -41, -81, -83, 8, 117, -43, 57, -60, 43, + 93, 84, 93, -36, -95, -1, -35, 63, 107, -76, -42, -50, -98, 46, 51, 89, 118, 80, 17, + 119, 120, -68, -4, -101, 18, 39, -60, -104, -121, 106, -110, 100, 111, -47, -71, -19, 122, -3, + 68, -109, 102, 74, 12, 50, -76, -29, -95, -24, 49, 101, -15, -14, -102, -81, -38, 73, -101, + -93, 47, 47, 84, 120, -3, 22, 20, -96, -45, -118, -46, 77, 49, 90, 41, -109, 117, 102, + 118, 55, 126, -39, -92, -91, 98, -56, -60, 67, -32, 17, 16, -78, -85, 103, 54, -116, 26, + 48, 94, -46, 11, 50, -89, -47, -114, 112, -63, -88, 40, -93, 65, -22, 15, 121, -102, 114, + -27, -34, 39, 48, -94, 90, -59, 113, -78, 79, 105, -126, 12, -15, -110, 104, 28, 89, -70, + -104, 44, -40, 8, 110, 43, 98, 73, -57, 117, -68, 78, -78, 113, 122, -72, -91, 51, 61, + -12, 90, 84, -76, -76, -43, -116, 90, -112, 105, 64, 79, 125, 40, -66, -95, 2, 90, 113, + 94, -94, -96, 1, 41, 1, 97, -28, 47, 54, -70, 21, 65, -87, 47, -70, -95, 125, 20, + 85, 77, -4, 119, 59, -86, -14, 5, 48, 35, 20, -40, 18, 5, 88, 125, -90, 115, 127, + 74, -41, -51, -12, 33, -31, -56, -118, 50, -71, 125, 80, 83, -26, -24, -106, -108, 100, 121, + 20, -59, 25, -14, 1, 19, -91, -40, -19, 86, 15, 45, -57, 28, -56, 15, -14, 3, 124, + -124, 26, -124, -93, -64, -2, 117, 7, -13, 7, 47, -116, 114, 93, -84, -76, -35, -2, 28, + 54, 1, 42, 63, -107, -92, -112, 79, 89, 14, 127, -23, -66, 36, 42, -21, 99, -125, -32, + -95, 19, 121, -72, 7, 115, 42, 32, -10, 30, -2, 100, 96, 121, 83, 75, 21, -85, -60, + -30, 78, -28, 67, 8, 100, 40, -36, -124, 82, 71, -122, 94, -56, 45, -101, -49, -41, -61, + -33, -3, -31, 77, 75, -16, 6, -94, -9, -93, -57, -95, 18, 38, -88, 96, 107, -92, 87, + 65, 21, -19, 90, -71, -110, -71, 28, -88, 87, -37, -88, -52, -102, 13, -52, 60, -1, 100, + 86, 21, 43, 5, 119, -64, 42, -35, -60, -21, -1, 28, 98, -96, 94, -7, -23, -82, 28, + 100, 109, -13, -117, -35, 47, -69, 59, 84, 84, -106, -83, 27, -52, -82, -100, 121, 45, 36, + -40, 23, 45, -108, -57, 78, -48, -103, 119, -2, 107, 82, -126, -20, -90, 2, 4, 6, -94, + -102, -2, 16, 121, 28, -81, -44, -73, 95, -117, 31, 68, 94, -85, -60, 59, -81, -91, 82, + 111, -61, -15, 43, 91, -79, 11, -70, -50, 93, 37, -118, 31, -27, -12, 114, 75, 3, 52, + 41, -116, 103, -41, -53, -114, -21, -99, -1, 123, -10, -10, -12, -53, 92, -64, -41, 19, -9, + 25, -12, 29, 27, -93, -102, -125, 116, -11, 50, 1, -25, -85, 76, 115, -94, -56, -77, 80, + -126, 16, 94, 2, -7, 65, -26, 91, 14, -123, -40, 126, 70, -68, -107, 11, -2, -98, 87, + 62, -62, -122, 73, -85, -24, -79, 46, -120, -74, -85, -80, 105, 122, -64, 64, -101, 42, -73, + 117, 61, 72, -92, -80, -28, -22, 34, 30, 53, -75, -92, 43, 118, 71, -47, 116, 102, -47, + -20, 114, 79, 89, 12, -29, 125, -43, 6, 25, 124, -46, 32, -80, 107, 105, -127, 23, 43, + 7, 28, 46, 114, -1, -93, -85, 83, 94, -24, 48, -109, -37, -80, -111, -119, -112, -90, 95, + 84, 76, 115, 14, -79, -113, -65, -72, 11, -30, -81, -30, -48, 76, -126, 33, -113, -59, -40, + 48, 83, 107, 74, 79, 116, 3, 78, -103, 59, -40, 115, 107, -122, -7, 28, -98, 110, 6, + -95, 30, 126, 94, -92, -108, 56, -118, 51, 36, 74, 89, 5, 70, -72, -36, 54}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/bias.h new file mode 100644 index 00000000..a3d3ed57 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_3_bias[8] = {819276, 1979573, 2395298, 2222549, 683110, 2258676, 3418221, 1276795}; + +const int32_t *const int16xint8xint32_3_biases = int16xint8xint32_3_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/config_data.h new file mode 100644 index 00000000..0b6d52ae --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/config_data.h @@ -0,0 +1,25 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#define INT16XINT8XINT32_3_IN_CH 8 +#define INT16XINT8XINT32_3_OUT_CH 8 +#define INT16XINT8XINT32_3_INPUT_W 4 +#define INT16XINT8XINT32_3_INPUT_H 4 +#define INT16XINT8XINT32_3_FILTER_X 2 +#define INT16XINT8XINT32_3_FILTER_Y 2 +#define INT16XINT8XINT32_3_PADDING SAME +#define INT16XINT8XINT32_3_STRIDE_X 1 +#define INT16XINT8XINT32_3_STRIDE_Y 1 +#define INT16XINT8XINT32_3_DILATION_X 1 +#define INT16XINT8XINT32_3_DILATION_Y 1 +#define INT16XINT8XINT32_3_BATCH_SIZE 1 +#define INT16XINT8XINT32_3_OUT_ACTIVATION_MIN -32768 +#define INT16XINT8XINT32_3_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8XINT32_3_INPUT_BATCHES 1 +#define INT16XINT8XINT32_3_PAD_X 0 +#define INT16XINT8XINT32_3_PAD_Y 0 +#define INT16XINT8XINT32_3_OUTPUT_H 4 +#define INT16XINT8XINT32_3_OUTPUT_W 4 +#define INT16XINT8XINT32_3_DST_SIZE 128 +#define INT16XINT8XINT32_3_INPUT_OFFSET 0 +#define INT16XINT8XINT32_3_OUTPUT_OFFSET 0 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/input.h new file mode 100644 index 00000000..accb97d2 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/input.h @@ -0,0 +1,16 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_3_input[128] = { + -504, -962, -14469, 20414, 9854, 4182, 1983, -24937, -26508, -18229, 19968, 16339, -2361, + -2919, -24495, -5967, -8996, -3450, -26726, -4913, 5379, 8621, 20231, -11186, 12602, 19083, + 8962, 8300, -20354, -30714, -13794, -11930, -24268, -29652, -27613, -30940, -5876, 4311, -6289, + 30525, 23408, 20932, -349, -22076, -14864, 27004, 29884, 10123, 31244, -20267, -25625, -8960, + 31301, -25964, -20974, -4363, -30919, 9339, 7609, -20986, -4796, -15786, 18765, -17597, -8401, + -17498, -29780, 27483, -6201, 23991, 9399, 27461, 6101, 23890, -23160, -12870, -15320, -14444, + 928, -8413, -17105, 27407, 25175, 14954, -21392, 15164, 18187, -1687, -29063, 6862, -24468, + 24728, -21947, 5553, 19951, -18199, -10196, -21220, -15456, -12658, 1903, -19157, -20778, -31937, + 4876, -3599, 6929, -23375, 2955, 29730, 7088, -3441, -8809, 26660, 27225, 8706, 791, + -18419, -7708, -5832, 17015, 21671, 106, 28238, -3482, -9969, -11588, -22741}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output.h new file mode 100644 index 00000000..c7a0c9dd --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output.h @@ -0,0 +1,17 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_3_output[128] = { + -10768, 11288, 13009, 1896, -4768, 8500, 6552, -14973, -3701, 11074, 19542, 13777, -13700, 3033, 1486, + 2777, -1575, 602, -8449, -169, -6142, 286, -1642, 10768, -5062, 6287, -304, 3197, -3278, 8383, + 17039, -5789, 4633, -10649, 20433, -6052, 511, -4383, 5344, 2666, -11397, -15627, -9736, -4352, 12215, + 9424, 5116, 2770, 15063, -6400, -16374, 24293, 12531, -1335, -13907, -1883, 3288, 370, 4001, 10505, + -6117, 11346, 11270, 4282, 6003, -402, 1934, -15987, -21542, -974, 13589, -2608, 4598, 15478, 7071, + 3693, 539, -5228, 13454, 7718, 13523, -4265, -2833, 25295, -16529, 5345, 1153, 6253, 2330, 6835, + -1943, 17696, -4111, -3148, 11513, 11146, 1381, 12859, -1862, 3836, 5619, 4052, 10890, 608, 4804, + -2527, -2703, -3688, 5438, -8295, 4210, -355, -195, 9799, 8669, 2776, -1833, 2949, 6350, -445, + -4013, 7368, 4601, 6891, 3890, 4252, 8131, 4241}; + +const int16_t *const int16xint8xint32_3_output_ref = int16xint8xint32_3_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output_multiplier.h new file mode 100644 index 00000000..429ff067 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output_multiplier.h @@ -0,0 +1,9 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_3_output_multiplier[8] = + {1231137362, 1366540377, 1395113483, 1372081486, 1328069409, 1385217124, 1373010335, 1397844835}; + +const int32_t *const int16xint8xint32_3_output_mult = int16xint8xint32_3_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output_shift.h new file mode 100644 index 00000000..30fb2d59 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_3_output_shift[8] = {-9, -9, -9, -9, -9, -9, -9, -9}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/test_data.h new file mode 100644 index 00000000..33835748 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/test_data.h @@ -0,0 +1,7 @@ +#include "bias.h" +#include "config_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/weights.h new file mode 100644 index 00000000..a20d88a7 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_3/weights.h @@ -0,0 +1,19 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8xint32_3_weights[256] = { + -12, -69, 41, 28, 82, -13, 51, 121, -97, 87, 77, -104, -113, 85, -61, -115, -82, 62, 10, 112, + -11, 24, -108, -26, -31, -2, 64, 121, 124, -12, -30, -127, -105, 83, -113, 53, 102, -110, -75, -37, + 5, -38, 124, 14, -20, 90, -104, -107, 123, -127, 51, -112, -109, -26, -5, -115, 108, 1, 19, 68, + 19, -48, -123, 117, -40, 73, 85, 57, -87, -61, -26, 110, -15, 50, -9, 17, -54, 89, -23, 95, + 122, -107, -112, 17, -14, 127, 100, 80, 89, 62, -90, -20, 119, 112, 52, 54, -62, -23, -79, 67, + 75, -111, 64, -126, -95, -120, -28, 100, -50, -96, 3, 18, 48, 122, 61, 76, -84, -13, 20, 17, + 74, 29, -66, 100, -117, -107, -85, -127, 118, 63, 53, -113, 35, 21, -39, -98, 108, -44, 104, -48, + 114, -17, 46, 114, 92, 54, 106, 41, 66, 127, -52, 16, -97, 81, -112, -24, -119, 115, -13, 112, + -126, 35, 108, 51, 90, -66, -2, -30, -46, -71, -123, -34, 127, -8, 75, 101, -115, -72, -55, -41, + -12, -79, -2, 71, -123, 38, 112, 54, 97, -24, 106, -54, -79, 109, -42, 26, -103, 35, -76, -20, + 60, 75, 73, -113, 3, 100, -124, 39, -93, 22, -21, -60, 25, -11, 28, -127, 27, 119, 2, -42, + 85, 42, -87, 99, 94, 7, -23, -6, -43, 24, 102, -77, -22, -19, -91, 51, -48, 67, 4, -18, + 125, -28, -93, 104, 91, 87, 27, -101, -101, -16, -65, 42, -3, -43, -127, -10}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/bias.h new file mode 100644 index 00000000..dc7398d6 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_4_bias[2] = {4346315, 1615341}; + +const int32_t *const int16xint8xint32_4_biases = int16xint8xint32_4_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/config_data.h new file mode 100644 index 00000000..8b9649be --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/config_data.h @@ -0,0 +1,25 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#define INT16XINT8XINT32_4_IN_CH 2 +#define INT16XINT8XINT32_4_OUT_CH 2 +#define INT16XINT8XINT32_4_INPUT_W 32 +#define INT16XINT8XINT32_4_INPUT_H 32 +#define INT16XINT8XINT32_4_FILTER_X 2 +#define INT16XINT8XINT32_4_FILTER_Y 2 +#define INT16XINT8XINT32_4_PADDING VALID +#define INT16XINT8XINT32_4_DILATION_X 2 +#define INT16XINT8XINT32_4_DILATION_Y 2 +#define INT16XINT8XINT32_4_STRIDE_X 1 +#define INT16XINT8XINT32_4_STRIDE_Y 1 +#define INT16XINT8XINT32_4_BATCH_SIZE 1 +#define INT16XINT8XINT32_4_OUT_ACTIVATION_MIN -32768 +#define INT16XINT8XINT32_4_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8XINT32_4_INPUT_BATCHES 1 +#define INT16XINT8XINT32_4_PAD_X 0 +#define INT16XINT8XINT32_4_PAD_Y 0 +#define INT16XINT8XINT32_4_OUTPUT_H 30 +#define INT16XINT8XINT32_4_OUTPUT_W 30 +#define INT16XINT8XINT32_4_DST_SIZE 1800 +#define INT16XINT8XINT32_4_INPUT_OFFSET 0 +#define INT16XINT8XINT32_4_OUTPUT_OFFSET 0 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/input.h new file mode 100644 index 00000000..f3f22117 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/input.h @@ -0,0 +1,153 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_4_input[2048] = { + 2948, 17255, -11032, -27479, -14642, 15651, -17060, 9399, 14445, 9645, 3795, -872, 3362, -7386, + 13815, 4273, 24591, 1013, -20538, 15583, 9966, 8271, -12364, -8603, -13011, -4552, 3248, -11987, + -3533, -27462, -7024, -1129, 15997, 32739, 31054, -16981, -4210, 8280, -12107, 32109, -4243, 32059, + 6946, -14207, 32622, -20131, -29091, -5720, -13628, -238, -9932, 10381, -14329, -8531, 19108, -24309, + 15374, -26928, 27230, 27631, -2183, -29984, 2095, -9398, 29808, -6094, -16292, 22148, -4025, -25634, + 29528, 29299, -7461, -799, 15648, -14416, 13426, 13067, -13984, -30492, 13345, -8647, 25156, 6502, + -11326, 2378, -12165, 5485, 2012, 2611, 27416, 16572, -21934, 31414, -16411, 3336, -12867, -26893, + -27172, 21881, 11664, 16344, -18470, 13573, -31661, -17935, 25071, -13205, 23577, 29320, 23494, -6421, + -18726, 29607, -12591, 27604, -26188, 26683, 2151, -21197, -13759, 18686, -17254, 22752, -31185, 14153, + -27147, -17252, -1437, -31839, 28120, 3887, -16758, -22908, -6648, -4780, 28810, -9958, 24867, 31140, + 21277, 21906, -25752, 16463, -30473, -18597, 7415, 19675, 9429, 31498, -1432, -19745, 18777, 22068, + 31089, -29568, -18461, 19910, 18657, -25499, -12466, 30801, 19712, -23725, 16294, 22972, -15202, 6381, + 12341, -1275, -461, -10866, 30038, 21419, -2476, 12216, -27763, 32745, -24191, -20869, 24593, 5763, + 8728, 25132, -16821, 23883, 18940, 2182, -31427, 15001, 15599, 8354, 17370, -5358, 14884, 16278, + -31925, 25969, 32546, -29726, -28041, 5149, -30858, -19814, 28171, -3598, 17658, -16600, 15951, -30637, + 30571, 25808, 4413, 29338, 27850, 21064, -31701, 26755, 14153, 23053, -11744, 18696, -3137, 23716, + -19266, 14891, -18223, -7193, 30611, -19403, 11505, -14527, -17987, 14750, 23136, 3563, -10538, -3412, + 22121, 27772, 3873, -23122, 6243, -579, 3549, 27629, -17006, -23241, -4538, 6346, -22065, 31665, + -570, 11694, 15415, -19315, -8825, 17749, -17560, -21127, -24793, 28369, 25885, 20874, 6963, -19106, + 26487, 11965, 7939, 728, 20000, -22604, 12279, -8536, -29565, -30953, 16508, 18919, 3893, -8274, + -2078, 29929, -1758, -5442, 476, -20533, 27228, 21224, -8484, 16425, -27746, -6609, 28402, -23168, + 25355, 18571, -23552, -25850, -23212, 12363, 29700, 25246, 3036, 30994, 25282, 27288, -20701, -2973, + 22757, -4479, 30654, -6484, 27357, -26254, 6514, 1986, -11675, -12625, -10891, 768, -4387, 24692, + -5618, -16962, 23914, 17102, 11456, -14272, 6748, 26176, 19267, 26644, -4207, -26799, -28617, 26809, + 15958, -7601, 13091, -9420, -22918, -11716, -14204, 30656, 6007, 21602, -9430, -3818, 31591, 10639, + -4950, 7174, 11850, 8099, -30095, -4516, 5026, -30303, -1718, 32281, 11220, 9540, -20316, -5139, + 15917, -28126, 25661, 17586, -189, -2278, 5546, -28197, -18729, 19086, -19050, 4846, 21566, -28577, + -29134, -5364, 16506, -24829, 4305, 31661, -27512, 28004, -16765, -64, 3183, -71, 32747, 13598, + 17656, 21757, -6490, -28304, -2628, -6054, 20117, 4857, -2054, -14224, 25921, 27567, 19055, -104, + -21062, -11256, -11778, 23678, 26536, -10103, -22120, 24150, 5975, 25307, 32326, 1708, 32494, -14919, + -14833, 13067, -32545, -30303, -5058, -13447, -1324, -16871, 13680, -20896, -23586, -32370, 3442, 25812, + -4641, -12919, 27647, 14331, -27571, -12996, -7347, 8002, 15067, -12, 25243, -19984, -23414, -13790, + 3995, -12055, 28926, -31805, 7453, -3300, -4290, -13717, 3324, -26650, -31107, 21319, -1380, 1142, + 12779, 4437, -16174, 20435, 22618, -23032, 7026, -21685, 28842, -32409, 2859, 13795, 25474, -31725, + 25678, -955, -10489, 946, -23458, 5644, 16779, -11579, 28010, -5520, -2600, 6348, 26411, -29384, + 19127, 16039, -181, -31473, -1586, 16236, 4402, 345, -16318, 4796, -24331, -28594, 362, -25135, + -6293, -25804, -16670, -4095, -3200, 4058, -26774, 3274, 15794, 28916, 8733, -15078, 12691, 12364, + 17381, -16168, 6763, 199, 5151, -12361, -9569, 28481, -8367, -31588, -5675, 29604, 9898, -24815, + -5314, -31656, -381, -19549, -31457, 28067, -28041, 26234, 17927, -26830, 29695, 16128, -20820, 25144, + 13895, -28288, 6482, -12952, 27688, -13286, 20356, -4374, 22264, 14905, 31375, 25955, 29205, 14387, + -26622, -32103, 11693, -18441, 23988, -30851, -27686, -31565, -31865, -17459, 17288, -25953, 10629, -26155, + -13524, 27466, 1025, -32437, 10450, -12932, -7108, 3196, 16276, -3353, -22545, 7762, -6394, -2088, + 4408, 9179, -11824, -20747, 17090, 21530, -1354, -12166, -21887, -10612, -31749, -23369, -32252, -19952, + -18843, -28978, 30490, -6865, -14403, 6475, -27081, -25737, -6366, -8443, -21977, -17249, -8328, 23660, + -11416, -1507, 10210, 10279, 14961, -5804, -2141, 24891, -1798, 13828, -14757, -29753, -9052, -21522, + 16065, -24444, 21456, -15802, -1502, 2574, -15874, 15620, -1906, 27647, 24443, 13867, 13573, -11355, + 1268, 19597, 17525, 26319, 16400, -12534, -12311, -19206, -391, -23109, -6915, -23552, 9734, -1544, + -829, -14818, -32443, -10656, -10399, -2114, 25860, 21893, 5025, -5306, 29739, 20937, 18701, -30329, + -17956, -6485, 6227, 30870, -22314, -16564, -10002, 30193, -7946, -20361, -20681, -31275, 14557, 31780, + 22814, -23660, 27832, 2834, -8218, 27262, 30906, 690, -21492, 30041, 30997, 9213, -29676, -29965, + -14469, -25863, -18755, 32194, -28768, 14064, 9337, -22101, -8717, -3509, 6932, -12196, 15956, 25700, + -7331, 501, -29600, -9719, -12822, 1047, 17411, 4181, -14986, -1868, 12151, 27264, -1004, -23147, + -21244, -7083, 26381, -2880, 13598, -14703, -24068, -5204, -22077, 8783, -9386, 32687, -6680, -13748, + -4201, 15050, 229, 4830, -21592, 27873, -22331, 25488, 23075, 2892, 26424, -23874, -23009, 7563, + -27072, -31265, -15471, 635, -21019, 25127, 9112, -17084, 27976, -1179, 30558, -22370, 32666, -8600, + 20500, 24528, 14423, -2016, 14654, -4910, -4411, -16285, -18526, -23296, -3075, -4946, 18775, -14208, + -24553, 30333, 25626, -8493, -8573, -15395, 1874, -32527, 27550, -30838, -23267, -3247, 3396, 15199, + -8893, 12166, -32067, -23257, -5763, -2011, 15092, -24889, -28103, 5870, 8021, -25355, -28312, -13101, + -21088, 7535, 24906, -18599, 1632, -23310, -8832, -29514, -32124, -16957, 20595, 13021, 30960, -7690, + 8421, -29662, 19797, -21775, 25824, 13961, -13603, -14287, 23064, -13085, 22818, 11941, -27339, 27243, + -8701, -21239, -7404, -26594, -2332, 21521, 31813, 26164, 13245, -11824, -8121, 27406, 22389, 30770, + -2895, 16846, -28440, -20597, -2655, -18322, -32368, -9910, -6934, 27054, 24340, 2254, 10452, 12425, + 2221, 2726, -28359, -4385, 25751, -2554, 22666, -716, -23390, 9928, 31900, 15739, -17139, 31769, + 19812, -25025, 17236, 21640, 304, 24383, -416, -4369, -8180, -3893, 4907, 20409, -4360, -6182, + 2740, 3399, -11722, -4621, 2454, -27904, 12710, -21204, -25221, -27262, 8152, -2698, -30602, 6889, + 3047, 21280, 30894, 14640, 30408, 2946, 20461, 29513, 20154, 7210, -10414, -15198, 23679, 28642, + -4588, -4973, -1365, 26087, -23108, -15287, -5998, -13305, 20714, -2941, 13834, -26922, -31856, -18187, + 32102, 12331, 5677, 5562, -17408, -12298, -2237, -29603, -4262, 30125, 14854, -15071, -15865, 13543, + -5412, -30057, 10048, -10875, -30385, 15702, 12503, 21312, 6903, -4514, 159, 16489, 14865, -9708, + 21810, -25380, -16165, -8993, 17518, 14826, -27696, -4021, -19847, 8609, -21725, 21456, 8640, -1211, + 3694, 22640, -4418, -30185, -29039, -8028, -22586, 23409, -25281, 25124, -17265, 14367, 8417, 2435, + -23287, -1042, 1010, -27544, 6194, -12126, 20130, -31541, -9148, -17140, -5611, -22123, 7971, -6003, + 29197, -27436, 30564, 22628, -22345, -1291, -19951, 19972, -6184, 21633, 27746, 2606, 32194, -8856, + -25725, 31806, -22920, 27001, -8120, 4347, 32354, -32584, -27084, 6960, 10109, 15349, -4176, -11695, + -16677, 22897, -21331, -19837, 8041, -6372, 31073, 3697, -15134, -1983, 31095, -17525, 25083, 27353, + 18343, 2089, 21699, 6152, -27181, -9776, 17055, 6188, -28541, -8696, 21009, 5026, -31146, -2018, + 6468, 22180, 5280, 16126, 25449, 21700, -6592, -13808, -3722, 2424, 15342, 32686, -31953, 27874, + 13755, 25106, -1505, -7439, 4553, 28858, 28366, 21488, -31364, 19911, -7945, 18808, -580, 17632, + 14686, 20097, -20415, -22455, -19965, 3826, -7990, 7826, 12785, 22989, -20062, -29149, 5549, 393, + -29799, -31035, -14263, 6544, 11229, -11155, 16375, -2442, 3339, 27132, -6664, 29620, -22196, -22548, + -10429, -833, -26423, -17498, 15264, 13661, -13955, -23501, -18870, -14414, -16775, 11308, 426, -6089, + 29368, 24329, -14678, -6173, -19194, 26682, 2003, -31382, -28100, -8131, 30179, 292, 32234, 10912, + 7943, 26497, 12381, -17214, -16205, 18380, -27295, 20031, 16685, -17470, 32049, -19834, -6076, 20804, + 18311, 27389, -11165, -15066, -18724, -20596, -231, 15184, -4432, 6545, -2076, 2538, -32155, -13374, + 13048, 20583, 15023, -6244, 11904, -22735, 6756, 19371, 18378, -24215, -6828, -4804, -7614, -12315, + 8709, 26836, 24035, 29587, 19125, 5763, -3006, 25000, 17263, 6874, -24114, 3856, -30246, 22961, + 2080, -28100, -9221, -14653, -27543, 21372, -15372, 13317, 28887, 19674, -27748, -9991, -6260, -26372, + -16386, 21788, -21119, 6491, 30750, -16014, -17243, 1106, 29444, 26528, 10949, 25012, 24418, 8552, + 28667, 10114, 23243, 18335, 20407, 4420, 17876, 16025, 27047, -29061, 12865, -16222, 29238, 1287, + 22313, -30561, -8490, -12636, 20184, 22912, 5969, -16829, 5123, 27305, -6575, 3637, -28215, 2467, + 4151, 12313, 16337, 1511, 20398, -31408, -14999, 28921, -17563, -20765, 7749, 12962, 3146, -4098, + 16338, 21125, -27651, -22261, 2869, 11203, -18839, 9903, -357, 10888, 19110, 18252, 26092, -31673, + -10811, -28623, -29754, -29608, 30436, 9188, -10848, 24631, 29298, 9543, -10499, -29892, -20633, 2445, + -8194, 9842, 29289, 3574, 13302, 25174, 18185, -8520, -11895, -6096, -27110, 12066, -9158, 17740, + -5762, 10953, -23595, 14227, -266, -32049, -8855, 19664, 29669, -6282, 500, -23247, -10356, 21374, + 27408, 30188, -1050, -21895, 3762, -8293, -22099, 24625, -32246, -11314, -3881, 8440, 30630, 6010, + -11277, 25877, -509, -20325, -30133, 31355, -16744, -23932, 10018, -10850, 2623, 18850, 1434, 22393, + -23317, 19978, -24882, 16068, 932, -21406, -23386, 2146, -24594, -1212, -9572, 7091, -13441, 11938, + -6075, -21688, -17054, 32728, -24103, 13383, -26038, 32706, 26960, 10429, -5130, -16365, -16747, 5910, + 10664, 19798, 7043, -4501, 16791, -21234, -4843, -28622, 4728, 14230, -28454, -10663, 10044, 7170, + -3553, 10368, 6060, 10025, 32463, 7565, 7587, -11514, -10655, 1570, -21558, -12935, -31414, 15488, + 16973, -1152, -12129, 10789, -16632, 21744, -9768, -20904, 12271, 28863, -18754, 13215, 22728, -415, + -28342, -3958, 16212, -8437, 6408, -31186, -19601, 29341, 29650, 11091, 15780, -16446, -25084, 4012, + 5411, -20052, 12004, -29324, 5128, 17348, -7754, 889, 27465, -17426, -14557, -23884, -31232, 15567, + 26206, 15372, -24536, -13040, 2344, 25172, 12485, 29514, -6729, -264, 12524, -4130, -206, -23052, + -28767, 28656, 24496, 728, 8383, 2098, -20775, -18, -22066, -16638, -26191, 14070, 801, 32161, + -2422, 2276, 21346, 32323, -29978, 4350, -26791, -25428, 13834, 23515, -2515, 10327, 24807, 12371, + -30522, -31797, -3148, 21567, 25887, 6224, -23859, -14556, 19790, 224, 834, 16781, -21689, 31381, + 855, 3466, 30360, -19219, -1691, 24706, 20926, -9995, -12017, -9729, 17741, 22982, -2750, -6976, + 1524, -7054, -7856, 17159, -9482, 12386, 7536, -6014, 1212, -118, -10132, 27465, 7485, -29553, + -30017, -5605, -23039, 16386, -2860, 22860, -27676, 13777, -32579, 1089, 8004, -19600, -23713, 11546, + -6895, 21928, -21070, 21784, 7476, -7658, 9074, -312, 1648, 8573, -14986, 25085, -26500, 21132, + 16, -11243, -30812, -26217, 5980, -3073, -15582, -27167, -8265, 11788, -7765, 15158, -29199, -3370, + 1243, -16885, 25666, 16771, -29459, -11677, -23172, 28210, -14204, -22806, -8101, -26460, -8904, -29574, + 27684, -17744, 10396, -19262, 2442, -2097, -17439, -23, 26960, 24240, 21909, 1761, 1425, 8079, + -28260, 25481, 6651, -3997, -15173, 26995, -7175, -26800, -24116, 1602, -3919, -11109, -18070, -32367, + -15724, -12139, -18752, -13296, 14996, -23193, -26955, 5645, 7657, -15351, 28561, 31341, -11376, -32084, + 29794, 5264, 25141, -28700, -24428, 1413, -5749, -26923, 16416, 15810, -8914, -4421, -15003, -5862, + -5841, -19619, -7881, -22462, 27912, -30484, -16195, -3313, 4099, -7489, 22675, 30728, -14014, 21796, + 28887, -8698, -6518, -4443, -9823, -1478, 12658, 2417, -23679, -28336, 20821, -23911, 11342, 8513, + 29913, -29278, -3432, -16111, -17141, 7199, 24391, 21306, -2607, 18964, 17215, -19032, 3419, 1242, + 21826, -11088, 32108, 25896, 24000, 13604, -18024, -8527, -21056, -16731, -2174, 31213, 22673, -4253, + -8689, -7676, -27368, 26831, 30418, 27081, -6921, -7163, -7077, -27132, -30698, 21374, 32123, 319, + 23252, 9400, -25302, -16349, -22879, -10697, 25462, 5116, 6355, 3647, 12, -22975, -10908, 17078, + 7693, -29437, 22951, -16905, 5125, 4421, 16598, -3664, -13786, -23789, -16033, 7396, -7145, -21350, + 9709, 6311, 6050, -8095, -12995, 4976, -18478, 14200, -32629, -27680, -22081, 29870, -17098, 9627, + -6504, -16125, -17574, -25080, 9857, -6798, -18727, 18479, 2591, -18921, 28058, 15842, 17674, 25717, + -12927, -28227, -16239, -974, -12470, 18471, 14334, 4365, -27898, -19242, 15650, -13929, 19450, -14242, + -20711, 12853, 8355, 7098, 21948, -11035, -7574, 17701, -246, -31492, 1465, 6187, 30349, -30671, + -13733, -1385, -9094, 3004, -5253, -8284, -12866, -3092, -11562, -27437, 5469, -4012, -9839, 8904, + 27353, -31383, 104, -30595, -12196, -20475, 7227, 6663, -1602, 10314, -3566, 32667, -29286, 6248, + -30760, 31762, 18912, -8956, -4592, -26788, -25485, -7104, -1891, 31279, 20313, -24946, -3802, -3285, + 23656, 1417, 19794, 27350, 18623, 20641, 6895, 24079, -29849, -23879, -9219, -4016, -2257, 28282, + 17678, 14391, -14839, 29981, 27367, 21675, 31178, 30389, -5226, -21816, 22232, 7639, 8723, 23460, + -13408, -10751, 794, -13952, -31846, 13941, 10405, -5747, -24687, 19672, 30438, 30306, 23982, -29826, + -12551, -4240, 8635, 18881, -11581, -24936, -7678, 3089, -23196, 26263, -13653, -18148, 30638, -9615, + 18016, 4262, 15688, 1625, 3211, 12458, -22914, -2306, 5893, -18544, -22014, -32181, 21713, -21181, + 30793, 25209, 1001, 12399, -14078, 3956, 28682, 30163, -22625, -5787, -24675, -815, -6522, 4968, + 3781, 9793, 7706, -21565, 6211, 18427, 17879, -28240, 21156, -1732, -3022, -2104, 1192, 28532, + 11074, -30005, -24374, 3901, 30286, -9490, 17385, -19974, -17896, 9451, -29315, -259, 11792, 16444, + -13563, -10673, -28592, -26802, 19899, -1390, 20746, -6834, 32038, -27135, 2427, -19752, 31635, -972, + -28446, -3570, 8256, 32699, -7886, 20084, -30561, 16978, -448, 7020, 8655, -20304, 5627, 21171, + -4130, 23482, 26565, -15851, 28801, -10115, -31488, -10664, 10746, 27409, 18710, -30480, -25961, -19836, + 14087, 2670, 20844, -9641, -14290, 30059, -12836, -14972, -6132, -28519, 17883, -24279, -29802, 23696, + -27163, -10911, 6136, 8992, -32140, 4732, -12053, 10217, 7361, -22053, -7810, 23545, 13457, -1530, + 28648, -11194, 31259, -9969, 2140, 3294, -12270, -24674, 12781, -28476, -17118, -3261, 6949, 9429, + 11095, 11649, 22890, -6797}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output.h new file mode 100644 index 00000000..b2944962 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output.h @@ -0,0 +1,137 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_4_output[1800] = { + 1491, -6081, 5657, 23232, 15803, 1163, 6534, 9615, 2616, 2034, 21124, 3697, 32350, -3701, + 4779, 18616, -1524, -8851, 26121, 16572, 13742, 22722, 18981, 9572, 16704, 6958, 4649, 8239, + 11323, 12601, 23756, -9712, 17260, 12756, -12593, 1968, 16770, 25531, 27774, -3706, 22909, -8696, + -6187, 12280, -1379, 8073, 21149, 15085, 23635, 29135, 10778, -14740, 15308, -4314, 23968, 16693, + 17138, -705, 11877, -2062, -662, -14769, 32767, 15778, 18417, 11916, 11540, -32768, 22408, 13036, + 9646, 1702, 25277, -632, 5374, 10053, -14943, 232, 8113, 24245, 16241, 6064, 21454, 11809, + 7274, 22097, 5753, 10736, 19304, 1437, 13394, 25373, 27976, 26377, 12459, 16252, -10107, -2554, + 19692, -3874, 26646, 12257, 10415, 1413, 9206, 7733, 11599, 25812, -13047, 10741, 26013, -8022, + 18531, 22065, -16107, 3315, 2089, 20508, 29182, 26139, 5571, 11038, -3758, -486, 32767, 10803, + 21178, 21021, 6238, -6187, 12216, 20393, 7161, 9726, 15664, -7470, 4273, 20228, 8770, -15382, + 14909, -415, 24610, -11848, 21682, 19264, 9774, -1202, -5238, 5250, 26684, -5175, 32767, 14085, + -2653, 17061, 14327, -21149, 17106, 5101, 4140, -6688, 6397, 13708, -2420, 30571, 20348, 12949, + 32767, 13602, 16673, 23499, 7775, 20276, 15526, -7268, -4648, 8238, 15416, -6028, 1342, 32767, + 26798, -22567, 4661, 27068, -14597, 14643, 32767, 6596, 22519, 5575, 12488, -16539, 32646, 10088, + 5746, 4149, 4561, -21277, -9248, 11613, 27284, 950, 17080, 31884, 5965, -383, 6707, 23610, + 13274, -903, 32767, -4285, 10346, -2583, -14235, 6510, 31718, 2224, 24786, 19133, 9758, 1045, + 7142, -7072, 29156, 2810, 1075, 6022, -3706, -9662, 30382, 14815, 4872, 19833, 8143, 4801, + 15731, -10983, 15402, 27630, 17224, 15847, 16123, 2406, 31373, -6810, 22409, 13003, 10053, -19292, + 19923, -5777, -4282, 22222, 9742, 2746, 27590, 19340, -835, 1435, 13115, 9179, 19990, -5666, + 6206, -589, 17285, 32767, 17950, 25231, 22109, -15186, 22294, -6962, 13522, 11083, -1969, -4820, + 22512, 8457, 16273, -543, 524, -16842, 1393, -8521, 27118, 1999, 25000, -17135, 24342, -10347, + 8817, -3337, 16323, 18572, 11189, 1859, 17873, -6921, 8274, -7724, 17526, 604, 1505, -12220, + 5684, -15163, 8772, 21793, 11596, -1808, 32405, 8250, 20131, 19422, 2676, 20267, 705, 7434, + 10407, 4161, 29849, 2102, -3377, -1557, 9277, -12771, 9259, 21062, 24441, 2447, 3214, 15247, + 18802, 17501, 7409, 13315, 18785, -18744, 21000, 9373, -2443, -1998, 21771, -11450, 11780, 10490, + 13676, 20150, 26210, -22683, -3028, 4365, 6945, -15265, 10517, 5309, 25486, 18116, 23559, -557, + 19991, 9198, 8990, -9759, 3310, -6640, 22374, -309, 16006, 11422, 13397, -12388, 32767, 10166, + 2687, -7238, -17468, -11584, 8417, -17784, 26689, 30353, 16032, 21099, 8331, -24035, 32767, -4465, + 18170, 16861, -5466, 9259, 12099, 7116, 4772, 19071, 9851, 8438, 8417, 27627, 24809, 14464, + 22509, 27344, 22320, -13710, 5730, 3642, -1058, -17688, 18401, 645, 29720, -13427, -14806, -4363, + 1114, -10439, 3904, 6758, 15266, -9250, -3220, 23635, 11671, 13243, 27335, -1945, 1885, 24094, + 19664, -20228, 31188, -1302, 25114, -26349, 12452, -4976, 22378, -25769, 20486, -8110, -7987, -4987, + 4020, 2629, 27339, -2633, 22989, -21307, -1699, -203, 17931, -26934, 24968, 10498, 14613, 3633, + 5092, 4667, 4519, 8189, 26478, 14203, 19629, 10631, 16166, -3467, 12345, 12552, -5471, 8269, + -2787, 4323, -3053, 19957, 14100, -443, 6304, -1833, 26791, 9926, 27898, 7691, 6585, 10679, + 13389, -5353, 2296, 4175, 14187, -3998, 19280, -14392, 7303, -3841, -11585, 32767, -66, 26247, + 29074, 11011, 32767, 1779, 6023, 24613, -2258, -23770, 24178, -11626, 22484, 1744, 20318, -11709, + 32767, 831, 1552, -9287, 17805, -15569, 17889, 18602, -1459, -22342, 25532, 14213, 5784, 12611, + -4329, 28366, 32767, 5546, 31011, 7080, -19071, -1359, 15529, 15598, 12087, -5854, -3236, 18911, + 3705, -1394, 27005, 8826, 12021, 2854, 13897, -223, 15050, 4664, -950, 9494, 11595, 14702, + 16793, 24352, 4493, 18443, 29883, 2971, 4781, 15335, -6503, -5333, 2966, -174, 17111, 21088, + 15165, 25262, 3751, 12021, 14554, -3218, 13228, -5803, 20559, 22398, 27982, 23585, 10434, -4954, + 12022, -12502, 24700, -955, 3267, -20710, 15490, 10951, 14169, 30216, 9823, 16390, 5171, 4755, + 23372, 18072, 24998, -9078, 15394, -8862, 8859, -6782, 10749, 6693, 3004, -4890, 10283, 13698, + 19632, 21038, 13826, 12624, 26666, 11652, 4152, -14161, 1648, -20643, 18868, -14378, 18082, -3358, + 12568, 13549, 10105, 10879, 4260, -2977, 11489, 7808, 20514, -6052, -21, -3747, 27114, 3986, + 32767, -12726, 2656, 7820, 16544, -31085, -9605, 10812, 18622, -9629, 24078, 18350, 11401, 4150, + -12589, 29442, 6778, 11521, -1389, -9878, 25162, 9996, 28925, 15511, -9912, -3115, -7662, 11369, + 32767, 18869, 8423, 20922, -1994, 4447, 22639, 11740, 23182, 7788, 32767, 4534, 17396, -16954, + -12969, -539, 25, 18274, 14560, 32767, 13802, 10550, 17559, 732, 14484, 19733, 4460, 20803, + -4267, 11174, 19282, 5776, 24483, -16093, 14152, 25626, 10152, 24409, -8021, 6248, 11007, 32767, + 30212, 6944, 19134, -8263, 25253, -12934, 24276, -2587, 24642, -8721, 8981, -15687, -53, 2170, + -11, -11689, 13363, 3260, 1335, 32524, 27994, 9856, 11764, 16660, 12221, 3992, 32767, 1696, + -4217, 31048, 3391, 667, 11493, 26804, 8160, 310, 27021, 13674, 20155, 5092, 6932, 19346, + 17937, -10130, -5964, 19527, -4506, 12022, 31805, 1044, 30177, 4805, -3135, -6049, -3948, 13973, + 24098, 12267, 29174, -3984, 28693, -3875, 2284, -32768, 6012, 2527, 20934, 8087, 11350, 32767, + 9072, -10028, 3561, -8, 6627, 3581, 20553, 4540, 14061, -17776, 10654, 6511, 17201, 8774, + 20925, 5078, 15921, 446, -3054, -19492, -5526, 12304, 11239, 18428, 32767, 13946, 24024, -4663, + 20154, 2145, 8678, 11270, 22217, -8869, 23521, -3866, -5822, 1229, 15991, -12684, 7273, 22972, + 12368, -9949, 7734, -15651, 5769, 14402, 7474, -8318, 21427, 16771, 24067, 26083, 1293, 1588, + 32767, 16535, 20240, -8979, -13625, 8816, 21236, 2934, -702, 29550, 11612, -3471, 32767, 9842, + 18249, -10209, 11576, -12821, 22065, 5914, 4114, 1332, 7282, -2241, 19364, 29368, 10790, -6306, + 6483, 22210, 14737, -14752, 22014, 13970, 19206, -16858, -4206, 15383, 15572, -3889, 17989, 29830, + 16188, 4997, 21681, 5809, -6212, 17561, 9636, -7689, 12433, 24730, 27374, 8827, 20351, 9384, + -10062, 32767, 16258, 4463, 20295, 6932, 32767, -12075, 11181, 10455, 3192, -9860, 731, 23841, + 16306, 4834, 12925, 32767, 17816, -16803, 12444, 3564, 8454, -9640, 9961, 16196, -13208, 23328, + -8327, 24930, 25545, 17631, 31701, 8360, 5356, -2879, 12909, 427, 20959, -6773, 30048, -3404, + -1528, -8272, 7179, -322, 14854, 17654, 24793, -12943, 17893, 688, 8775, 12431, 15215, 5521, + -1146, 15458, 22212, -647, 17839, -9115, 5023, 26453, 32767, -4528, 20272, 32767, -5595, -2768, + -1323, 8529, 16996, 14893, 22687, 18470, 10357, -7675, 15185, -8333, 11603, 15123, 29375, -25741, + 14601, 8258, 14135, -6044, 32767, -469, -6056, 10407, 15148, -6516, 14278, 27426, 11680, -16253, + -4954, 24442, -1999, 3759, 24035, 28767, 21920, 3535, 12548, 9151, 18322, -1894, 7070, 2952, + 10557, 24994, 30521, -1925, 491, -14782, 1828, -10127, 24335, 14223, 9543, 9594, 5483, -15899, + 25487, 21989, 8616, 1910, -6033, 23878, 10815, 9635, 17416, 26082, 21901, 13959, 3002, 32572, + 7819, 22946, 19904, 24138, 31143, 12026, 18957, 20960, -7379, 12149, 13141, 6326, 14658, 4207, + -13103, 17967, 18674, 1396, 11487, 25103, -264, -3884, 13610, 22656, 12796, 12257, 25414, 3216, + 22937, 23133, -8179, 3138, 11457, -12440, 16373, 23941, 15516, -7954, 23309, 11305, 13666, -8123, + 20809, -2888, 24054, 1846, 32767, 2478, 19380, 17376, 5668, -16663, 1184, 1986, -7792, -17738, + 10243, 28158, 29879, 21735, 13458, 1889, -9514, 599, 17305, 12636, 18052, 13353, 23087, -1829, + 21067, 10817, 10674, -15450, 4756, -5088, 11043, 7412, 15021, 6934, 31802, 9943, 20730, -8999, + -728, -1198, 31985, 1758, -5001, 6621, -19204, 16779, 32767, 9608, 28819, 20791, -18405, 10451, + 4794, 6235, 32767, 3876, 4027, 17832, 3238, 19365, 28427, -23738, 26969, 27451, 1757, -13232, + 3623, 5552, 19646, -15778, 25226, -12441, 32767, -773, 23883, -13673, 7725, -22642, 24473, -20746, + 16156, -17120, 28012, -4872, 17022, -12337, -3815, -16261, 15066, 4699, 21384, 15055, 30053, 8214, + 8168, 10867, -7297, 6767, 18715, 9751, 32767, 17610, 31394, -14630, -11002, 8236, -2956, -8500, + 20893, 9666, 9246, 3723, 15301, 3364, 8411, 25563, 19771, 5223, 15450, -8111, 24544, -14563, + 16743, -5010, -7368, 7475, 32379, 3468, 7337, 32767, 7735, -27119, 27202, 18411, 9942, 410, + 9002, 25776, 32767, -2716, 1931, -4727, 3040, -11703, 28298, 15156, -269, 14424, 7272, 13706, + 25803, 16801, -8059, 9875, 6106, -14466, 23235, 30029, 29575, -5296, 4433, -17040, -8964, 7688, + 28043, 900, 14548, 5705, 2903, -13120, 9712, 30679, 14232, 32172, 22127, 7505, 13059, -7975, + -497, 15442, 13516, 6180, 19540, -12274, -3618, 8154, 15005, 11682, 6164, 31116, 2551, 4075, + 32767, 5663, 4962, 19493, -8385, 7224, 16103, 31298, 22117, 12599, 11485, 7871, -6250, 13500, + 13926, 23437, 4994, 28816, 15322, -8780, 6842, -4598, 9775, 11601, 32767, 29226, 11690, 3326, + 16589, -9836, 26181, 5826, -2318, 10293, 1880, 16543, 26005, 8544, 4328, 10775, 6449, -4622, + 32767, 166, 22746, 469, 13083, 22013, 2708, -12719, 4289, 9278, 5178, 7885, 21920, 2138, + 30209, 10705, 2292, 11812, 7040, -21928, 5019, 11428, 28887, 2391, 31855, 11733, -5994, 15627, + 9888, -4205, 20678, -13099, 15637, 15899, 31690, -4211, 20704, -3507, 10468, -5695, 1229, 8642, + 11502, -27753, 17074, 1699, 7511, 24848, 15914, 10206, 6676, 126, 4328, 124, 19058, 3669, + 32624, 8388, 20187, -20456, 13430, 1539, -6739, 13838, -4319, 15832, 8047, 14280, 8992, 32767, + 387, 11406, 19943, 13840, 21319, -2762, 8516, 15586, 17405, 176, 11670, -1564, 23143, 12992, + 19853, -18956, 24, -9032, 11656, 3425, 15396, -6044, 3760, 3577, 12844, -880, 15606, 8456, + 8621, 32767, 12302, -1341, 29594, -17451, 4987, 546, 14859, -3542, 3422, -9589, 19635, 2715, + 18214, 5806, 20003, -10272, 10967, 16428, -115, -910, 7572, -8474, 6264, 7836, 16752, 16802, + -5293, 18376, 9882, 19942, 13237, 12046, 11658, 23229, 10666, -7804, 6030, 26717, 12779, 18117, + -9841, 6185, 7215, -1506, 17870, 740, 24030, 21665, 10622, 22002, -2810, 19744, 11063, 10568, + 764, 17743, 24450, 10266, 20281, 17706, -4099, 4361, 4743, 20275, 19079, 23453, 5328, -10124, + 12532, 10287, 16800, 23441, 16457, 21655, 3197, 909, 9146, 1816, 21308, 22928, 26093, -7611, + 22428, 3012, 26247, 3452, 17477, -2244, 12314, -8967, 10878, 30075, 3430, -8662, 2612, 17836, + 21371, 335, 2682, 6742, 10009, 664, 15627, 14592, 3676, 6332, 7273, 18969, 13461, -8734, + 14016, 14786, 11070, -3390, 10093, -13736, 28903, 12328, 32767, -20790, 20908, -4380, -12941, -8409, + 12546, 2940, 23340, 19908, -5891, 13119, 20689, 7555, 22490, 11217, -1767, -7475, 25591, -3888, + 19781, 14524, 15805, 11033, 17764, 4132, 24708, 15367, 2642, 5024, 21555, 1315, 14634, 17068, + 20867, -11392, 18250, 10886, 8550, -23424, 16254, -3698, 3140, 10237, 23198, -2370, 12923, 11701, + 8050, -28874, 24453, 9195, 32457, -1740, 12866, -15862, 3106, -12268, -3571, -10108, -1690, 3202, + 10448, 11516, 24107, 3156, 21256, 7288, 19601, 26340, 17137, -8086, -3350, -5281, 20537, -6246, + 12480, 32767, 12238, -264, 15674, 3193, -3730, 13075, 6638, 17968, -2059, -17697, 1724, 14093, + 18894, 5028, 24033, 5352, 15003, 27318, 28764, 5346, 18919, 23610, -10484, 4622, 17196, 11703, + 30416, 13561, 6734, -8377, 4075, 6761, 3970, 10038, -4489, 21627, 23354, 32767, 17264, 32767, + -1174, -4244, 19206, 3060, 22138, 9159, -13770, 7327, 21803, -3508, 32767, 14517, 7289, 5125, + 4947, -555, 4354, 5821, 4901, 16781, 29425, 10698, 18414, 2401, 19034, -6163, 5240, 329, + 21289, 8066, 11296, 1860, 23112, 1551, 12368, -2412, 23605, -7551, 17962, 13166, 1966, 15115, + 14115, 8148, 17792, 24534, 1099, -2564, 5580, 5626, 16451, 22572, 32767, -10312, 10454, -803, + 16100, 13144, 3189, 2814, 1166, -615, 7260, 15638, 7632, 10050, 13896, 15762, 22032, 1869, + 14866, -3753, 10012, 24181, 8844, 19286, 14183, 1363, 7315, -16191, 4770, 764, 10476, -2262, + 20252, -1477, 18362, 3580, -6131, 14108, 31277, 20459, 19477, 29024, 13700, -21564, 9762, -3743, + 21082, -6162, 32767, -12284, -1434, 7122, 5916, 574, 6385, -8421, -252, 20034, 32767, 11078, + 9241, 22609, -503, -22557, 21459, -25612, 16861, 4739, 4058, -9051, 12607, 7448, 21508, 5553, + -2253, 26822, 3624, 4913, 32767, 7065, 21242, 16091, 7404, -6145, 12498, -2607, 14208, 16726, + 10088, -19228, -2769, 5255, 17952, -4186, 26043, 20445}; + +const int16_t *const int16xint8xint32_4_output_ref = int16xint8xint32_4_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output_multiplier.h new file mode 100644 index 00000000..0133dc75 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output_multiplier.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_4_output_multiplier[2] = {1643785233, 1736266112}; + +const int32_t *const int16xint8xint32_4_output_mult = int16xint8xint32_4_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output_shift.h new file mode 100644 index 00000000..e7067e44 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_4_output_shift[2] = {-8, -8}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/test_data.h new file mode 100644 index 00000000..33835748 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/test_data.h @@ -0,0 +1,7 @@ +#include "bias.h" +#include "config_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/weights.h new file mode 100644 index 00000000..586122b3 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_4/weights.h @@ -0,0 +1,7 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8xint32_4_weights[16] = + {-33, 26, 117, -44, -22, 127, 10, -104, -62, -68, -127, 64, 22, 111, 102, -10}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/bias.h new file mode 100644 index 00000000..bc52b716 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_5_bias[4] = {2497397, -2469195, 1623513, -3789749}; + +const int32_t *const int16xint8xint32_5_biases = int16xint8xint32_5_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/config_data.h new file mode 100644 index 00000000..b6ef1f2c --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/config_data.h @@ -0,0 +1,25 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#define INT16XINT8XINT32_5_IN_CH 3 +#define INT16XINT8XINT32_5_OUT_CH 4 +#define INT16XINT8XINT32_5_INPUT_W 7 +#define INT16XINT8XINT32_5_INPUT_H 8 +#define INT16XINT8XINT32_5_FILTER_X 2 +#define INT16XINT8XINT32_5_FILTER_Y 4 +#define INT16XINT8XINT32_5_PADDING SAME +#define INT16XINT8XINT32_5_DILATION_X 2 +#define INT16XINT8XINT32_5_DILATION_Y 2 +#define INT16XINT8XINT32_5_OUT_ACTIVATION_MIN -13335 +#define INT16XINT8XINT32_5_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8XINT32_5_STRIDE_X 1 +#define INT16XINT8XINT32_5_STRIDE_Y 1 +#define INT16XINT8XINT32_5_BATCH_SIZE 1 +#define INT16XINT8XINT32_5_INPUT_BATCHES 1 +#define INT16XINT8XINT32_5_PAD_X 1 +#define INT16XINT8XINT32_5_PAD_Y 3 +#define INT16XINT8XINT32_5_OUTPUT_H 8 +#define INT16XINT8XINT32_5_OUTPUT_W 7 +#define INT16XINT8XINT32_5_DST_SIZE 224 +#define INT16XINT8XINT32_5_INPUT_OFFSET 0 +#define INT16XINT8XINT32_5_OUTPUT_OFFSET 0 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/input.h new file mode 100644 index 00000000..c7e951f7 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/input.h @@ -0,0 +1,18 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_5_input[168] = { + -27713, 26861, 18169, 11272, -15321, -12497, 16315, -22856, 9802, -3623, 31849, -21480, 15110, -7054, + 25089, -16058, -3369, 7057, -9441, 24551, 25779, -10541, 21691, -15209, -13273, -8555, -2876, 22791, + 26490, 12804, 9212, 7688, -4459, -25715, -6897, -23447, 18773, -30196, -29100, 27317, -4395, -11382, + 25758, -11633, -6418, 721, 32124, 24028, -23079, -9444, -22851, 18709, -22277, -30188, -19013, -31081, + -6831, 1556, 28305, -4502, -5609, -27681, 4035, 16573, 28716, 29556, 19488, -4855, 8854, 32528, + -20466, 27976, 13432, 25358, 7058, 12905, 23343, 21111, 6747, 17740, -5797, 22907, -18814, -19123, + 23271, -13656, -19457, -26811, 12757, 1313, -19376, -17543, 23225, 28627, -14250, -7817, 6559, 19651, + 18709, -15874, 5959, -12774, 29091, 24187, -17372, -24590, 26042, -9561, 8901, -12432, 10532, -25585, + 31904, 32262, 23146, -21466, 12004, -24220, -3622, 26158, -24983, -17839, -6118, -27176, -17437, 22648, + 29696, 1353, -32471, 823, -20549, -24980, 15696, 4667, -20757, -20411, 26338, 12307, -30779, 28635, + -21145, 13740, 2526, -16189, -2360, -27403, -24158, -10518, -32708, 26183, 14359, -29805, 15454, 8, + -5830, -13802, 5571, 27842, -32226, 16583, -13329, -12869, 14798, -26573, 6901, 1391, -6240, -30722}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output.h new file mode 100644 index 00000000..1f32c035 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output.h @@ -0,0 +1,23 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_5_output[224] = { + 3135, 3204, 215, -937, 13672, -8127, 2879, 1219, 11782, -11427, 3937, -8689, 987, -6723, -6105, + -13335, 13245, -1920, -585, -8493, 7545, -6903, 4044, -812, 12544, -1105, -7781, -7287, 2308, -13335, + 7915, -13335, -303, 6466, -5499, -13335, 7745, 1205, 18851, 2576, 6769, 2919, -10301, -5151, 4205, + -13335, -74, -13335, 17351, -3335, -13335, 2081, 4209, 4488, 4129, -5199, 3374, 1488, 3379, -1952, + 23394, -13335, 7262, -3583, 5037, -5154, 4856, -1376, 18099, -13335, 7308, -13335, -13335, -13335, 13538, + -13335, 2008, -5339, 18828, -7978, -2829, 2172, 8062, -1823, 6064, -1007, -3510, -2980, -5071, 1108, + -7501, 7037, 1938, -13335, 12642, -13335, -2214, 1144, 19370, -2845, 8948, -9950, 164, -282, -10198, + 16075, 22994, 11530, 5715, -10286, 5005, -5202, -313, 1335, 462, 4645, -12245, -13335, -6116, -13335, + 6519, -13335, -11966, -11536, -13335, -4801, -1542, 11612, 17686, 10561, 3379, -7121, -5728, -13335, -252, + -12818, 3212, -9904, 1604, -13335, -215, -1127, -2849, -886, 4867, 12295, -5248, -13335, 7306, -4984, + 12407, -11290, 22098, 2695, -13010, -13335, 1338, -7835, 7224, -13335, 17287, -13335, 5125, -13335, 907, + -4789, 2417, -6093, 3382, 1545, -1766, -1578, 14741, 4606, 19056, 7162, 6802, -1675, 11186, -12794, + 4709, 11699, -3755, -9864, -10653, 3694, -9298, -6129, 12857, 23248, 1169, -13335, 3685, 2456, 1843, + -680, -9280, -8437, 5460, -6415, -1816, -13335, 14522, -9403, 17749, 93, 2183, 3583, 4585, -12171, + 5073, 3153, 875, -7226, 5223, -13335, -5956, -2708, 19060, -9394, 5597, -10264, 2973, -5752}; + +const int16_t *const int16xint8xint32_5_output_ref = int16xint8xint32_5_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output_multiplier.h new file mode 100644 index 00000000..1cd70949 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output_multiplier.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_5_output_multiplier[4] = {1758820286, 1757716373, 1789965852, 1747079932}; + +const int32_t *const int16xint8xint32_5_output_mult = int16xint8xint32_5_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output_shift.h new file mode 100644 index 00000000..eeec569d --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_5_output_shift[4] = {-9, -9, -9, -9}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/test_data.h new file mode 100644 index 00000000..33835748 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/test_data.h @@ -0,0 +1,7 @@ +#include "bias.h" +#include "config_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/weights.h new file mode 100644 index 00000000..2255ed23 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_5/weights.h @@ -0,0 +1,11 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8xint32_5_weights[96] = { + -94, -77, -66, 120, -111, -51, -7, 25, 52, 6, 117, 48, 14, -76, -31, 94, 68, -80, -58, 127, + -4, 29, 122, 123, 81, -78, 30, 56, -78, -33, -102, -107, 9, -127, -116, 102, 48, 1, -10, -64, + -86, -50, -89, 31, -115, 102, -72, 46, 64, 54, 82, 44, -92, 26, -8, 57, -118, 42, -41, -127, + -117, 13, 111, 82, 107, -115, -98, -12, -50, 3, -9, 9, -62, 49, 127, -62, 42, 88, -47, -117, + -90, -8, 38, 71, -67, -15, 62, -24, -70, 96, 27, 71, -64, 99, -95, 19}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/bias.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/bias.h new file mode 100644 index 00000000..83ac5006 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_6_bias[4] = {2626786, 1816680, 3770128, 1468683}; + +const int32_t *const int16xint8xint32_6_biases = int16xint8xint32_6_bias; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/config_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/config_data.h new file mode 100644 index 00000000..b1385769 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/config_data.h @@ -0,0 +1,25 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#define INT16XINT8XINT32_6_IN_CH 3 +#define INT16XINT8XINT32_6_OUT_CH 4 +#define INT16XINT8XINT32_6_INPUT_W 7 +#define INT16XINT8XINT32_6_INPUT_H 8 +#define INT16XINT8XINT32_6_FILTER_X 2 +#define INT16XINT8XINT32_6_FILTER_Y 4 +#define INT16XINT8XINT32_6_PADDING SAME +#define INT16XINT8XINT32_6_DILATION_X 2 +#define INT16XINT8XINT32_6_STRIDE_X 1 +#define INT16XINT8XINT32_6_STRIDE_Y 1 +#define INT16XINT8XINT32_6_DILATION_Y 1 +#define INT16XINT8XINT32_6_BATCH_SIZE 1 +#define INT16XINT8XINT32_6_OUT_ACTIVATION_MIN -32768 +#define INT16XINT8XINT32_6_OUT_ACTIVATION_MAX 32767 +#define INT16XINT8XINT32_6_INPUT_BATCHES 1 +#define INT16XINT8XINT32_6_PAD_X 1 +#define INT16XINT8XINT32_6_PAD_Y 1 +#define INT16XINT8XINT32_6_OUTPUT_H 8 +#define INT16XINT8XINT32_6_OUTPUT_W 7 +#define INT16XINT8XINT32_6_DST_SIZE 224 +#define INT16XINT8XINT32_6_INPUT_OFFSET 0 +#define INT16XINT8XINT32_6_OUTPUT_OFFSET 0 diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/input.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/input.h new file mode 100644 index 00000000..1fca6b8b --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/input.h @@ -0,0 +1,18 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_6_input[168] = { + 7910, 24469, -25142, 26054, -21326, -5905, 16813, 21634, 10936, -4078, -10460, -31018, 2744, 17024, + 8832, -12742, 7860, -6782, -15825, 20088, 18988, -27779, -6472, -21204, -4706, 2230, -7354, 4772, + -8495, -21907, 22913, -11163, -27838, 29022, -9602, 11466, 32068, 7074, -13495, -16416, -1164, 9105, + -18745, 31146, 7613, -10559, -18566, -2364, 533, 3830, -9360, -12862, 30112, 2270, 24744, 32029, + 12155, -27534, 29573, 5131, 5315, 25204, 29964, 18562, 7536, 32007, 27, 4817, 7818, -19541, + 15569, -29678, -13877, -21672, 603, 14721, 12326, 1361, -7050, 29677, -12711, -22598, 25529, 18280, + -19756, -21085, -13183, -26241, 20054, -30315, -24621, -603, 32034, -15734, 6479, 32440, -4294, -30671, + 6060, 6971, 13049, -11363, -24636, 21646, 24451, 31441, -9053, 6735, 9653, -27789, -32237, 19610, + -19513, -13727, 6365, 28138, -29074, -29804, 23913, 13952, -24388, 17053, 8420, 14058, 17070, -1328, + 17301, 16201, -29230, 24779, -34, 7048, -30971, -14936, 16409, 4498, -21088, -7295, 14900, 8528, + -18889, 32556, -21887, 28306, 8565, 5118, 8686, 17213, -9081, -26570, 27922, 558, -11151, 30579, + 823, 23772, -331, 6759, 21191, 27019, -22912, 12949, 14099, 32700, -13443, 30710, 29029, 744}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output.h new file mode 100644 index 00000000..fbdd9afc --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output.h @@ -0,0 +1,24 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t int16xint8xint32_6_output[224] = { + 7721, 9394, 131, -3154, 6235, -8985, 5104, 11016, 356, -19021, 14591, 14024, 445, -16706, + 15366, -1608, 14194, -23992, 18403, 14927, 7572, -3212, 14428, 17950, 15960, -13235, 16773, 265, + -7709, 8266, 13733, 8683, 3450, -6073, 20019, 21692, 15152, 12714, 1146, -12255, 13197, -3323, + -9289, -23623, 2280, -12933, 18155, 10714, 20227, -10810, -7925, 18424, -5351, -8891, -8304, 14802, + 379, -2556, 9372, 12205, -8799, 16922, 22917, -3696, -9164, 7618, 17527, -940, 23422, 13869, + 11811, -2828, 14537, 10779, 30193, -331, 19655, 11026, -7923, 8569, 2269, 3801, -1042, -1795, + 11417, 20991, 1315, -3236, 2510, 8548, 4575, 7637, -4793, -2535, 13456, 10109, -16901, 9362, + 16244, 16310, 12427, 4145, -1283, 6218, 28533, 5402, -9182, 8129, -992, -12454, 8553, 9425, + 5026, -12095, 21351, 9960, 3399, -147, -1556, -8397, 7686, 18283, -1449, 3003, 9116, 11826, + 29755, -6917, 22670, 6591, 28422, -16476, 16811, 14682, -12402, 2912, -11775, 923, 1646, 20541, + 613, -27989, 16371, -14784, 4630, -11141, 2466, 18050, 641, -20044, 17123, 25591, 4860, 25488, + -8322, 16883, -6314, -30166, 26677, 14368, 22854, -4228, 32767, 3886, 3813, 7617, 8954, -8144, + -7374, 4519, 12384, -16007, -5251, -11863, -1036, 843, 7803, -24240, 29643, -9007, 24611, -9128, + 23252, -10571, 8858, 4166, -10362, -10569, 8169, -3480, 15120, -12991, 10419, -7063, 9640, 6482, + 7983, 9438, 13960, -4683, 655, -4758, -15888, 8779, 777, 3991, -7497, 2266, 2471, 4110, + 16701, -6211, 19156, 26708, 16942, 396, 18257, 3515, 9138, -5937, 11344, -499, -3927, 1486}; + +const int16_t *const int16xint8xint32_6_output_ref = int16xint8xint32_6_output; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output_multiplier.h new file mode 100644 index 00000000..85a95a64 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output_multiplier.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_6_output_multiplier[4] = {1128472607, 1116748092, 1126950833, 1103518542}; + +const int32_t *const int16xint8xint32_6_output_mult = int16xint8xint32_6_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output_shift.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output_shift.h new file mode 100644 index 00000000..c5528e02 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t int16xint8xint32_6_output_shift[4] = {-8, -8, -8, -8}; diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/test_data.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/test_data.h new file mode 100644 index 00000000..33835748 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/test_data.h @@ -0,0 +1,7 @@ +#include "bias.h" +#include "config_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/weights.h b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/weights.h new file mode 100644 index 00000000..9bfcb69b --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/int16xint8xint32_6/weights.h @@ -0,0 +1,11 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t int16xint8xint32_6_weights[96] = { + 72, -79, 80, -40, 102, 124, -4, -66, 91, 33, 88, -37, 59, -17, -53, 7, 127, -16, -50, 64, + 93, -28, -68, -3, 4, -35, 58, 109, -124, 104, -127, -37, 119, 17, 17, 98, -120, -69, 88, -73, + 120, -11, 40, -63, -71, -54, -112, 15, -122, -116, -69, 118, 112, -118, -84, -30, 10, 11, 96, -53, + 127, 4, -29, 5, -53, -39, -5, -47, 79, 60, 104, -68, -78, -10, -26, -64, -44, 127, 61, 12, + -80, -119, -23, -20, -62, 34, -41, -103, -100, -6, 71, 44, 127, -110, 105, 28}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/bias.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/bias.h new file mode 100644 index 00000000..77ddb1df --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/requantize_s64/bias.h @@ -0,0 +1,8 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int64_t requantize_s64_bias[8] = {1419566, 1628750, 1905785, 1151051, 4108310, 2793171, 3127582, 1330321}; + +const int64_t *const requantize_s64_biases = requantize_s64_bias; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/biases_data.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/biases_data.h deleted file mode 100644 index bbd481c9..00000000 --- a/Tests/UnitTest/TestCases/TestData/requantize_s64/biases_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.15.0 (Keras version 2.15.0). -// Interpreter from tensorflow version 2.15.0 and revision v2.15.0-2-g0b15fdfcb3f. -#pragma once -#include - -const int64_t requantize_s64_biases[8] = {2718092, 2556575, 646371, 1427241, 2010306, 3766647, 1886211, 1482898}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/config_data.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/config_data.h index 359f3f95..6e1ef603 100644 --- a/Tests/UnitTest/TestCases/TestData/requantize_s64/config_data.h +++ b/Tests/UnitTest/TestCases/TestData/requantize_s64/config_data.h @@ -1,24 +1,25 @@ -// Generated by test_settings.py using tensorflow version 2.15.0 (Keras version 2.15.0). -// Interpreter from tensorflow version 2.15.0 and revision v2.15.0-2-g0b15fdfcb3f. +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. #pragma once -#define REQUANTIZE_S64_OUT_CH 8 #define REQUANTIZE_S64_IN_CH 8 +#define REQUANTIZE_S64_OUT_CH 8 #define REQUANTIZE_S64_INPUT_W 4 #define REQUANTIZE_S64_INPUT_H 4 -#define REQUANTIZE_S64_DST_SIZE 72 -#define REQUANTIZE_S64_INPUT_SIZE 128 -#define REQUANTIZE_S64_OUT_ACTIVATION_MIN -32768 -#define REQUANTIZE_S64_OUT_ACTIVATION_MAX 32767 -#define REQUANTIZE_S64_INPUT_BATCHES 1 #define REQUANTIZE_S64_FILTER_X 2 #define REQUANTIZE_S64_FILTER_Y 2 -#define REQUANTIZE_S64_STRIDE_X 1 +#define REQUANTIZE_S64_STRIDE_X 2 +#define REQUANTIZE_S64_PADDING VALID #define REQUANTIZE_S64_STRIDE_Y 1 +#define REQUANTIZE_S64_DILATION_X 1 +#define REQUANTIZE_S64_DILATION_Y 1 +#define REQUANTIZE_S64_BATCH_SIZE 1 +#define REQUANTIZE_S64_OUT_ACTIVATION_MIN -32768 +#define REQUANTIZE_S64_OUT_ACTIVATION_MAX 32767 +#define REQUANTIZE_S64_INPUT_BATCHES 1 #define REQUANTIZE_S64_PAD_X 0 #define REQUANTIZE_S64_PAD_Y 0 -#define REQUANTIZE_S64_OUTPUT_W 3 #define REQUANTIZE_S64_OUTPUT_H 3 +#define REQUANTIZE_S64_OUTPUT_W 2 +#define REQUANTIZE_S64_DST_SIZE 48 #define REQUANTIZE_S64_INPUT_OFFSET 0 #define REQUANTIZE_S64_OUTPUT_OFFSET 0 -#define REQUANTIZE_S64_DILATION_X 1 -#define REQUANTIZE_S64_DILATION_Y 1 diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/input.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/input.h new file mode 100644 index 00000000..7fd6e940 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/requantize_s64/input.h @@ -0,0 +1,16 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t requantize_s64_input[128] = { + 4898, 20987, -11646, -24569, 9045, 14039, -26218, 17352, -31071, -11630, -26970, -22493, -31066, + -11782, 16829, -9044, -17302, -6148, 864, -31534, 19950, 27916, -25132, 12787, -1318, 10919, + 28744, -9100, -14820, -15903, -21482, 23839, 29150, 16221, 9691, 8565, 28421, 6937, 27955, + 23061, -20804, 29332, -8978, -12489, -10486, -26867, -31608, -24800, 31969, 7739, 2680, -5835, + 8514, 24598, 7550, 964, 29147, -6121, 12930, -5554, 16678, 3605, 28094, -14342, -30293, + 20982, 19380, -19009, -32064, -11227, 25470, 5273, -2899, -29136, 30501, 7837, -26033, -8286, + -25837, -14289, -2506, -20319, -29963, 7417, 11204, -11837, -14841, 8435, 21020, -4477, 18651, + 8585, -29997, -29446, -27623, -11313, 22689, 25503, -16293, -1198, -31203, -18611, -9465, -31667, + 30300, 16290, -2664, -31867, -12, -6601, -32211, -9846, -19371, 26879, 15712, -19185, 29489, + -19776, 25344, 31176, -25070, 15181, -1849, -19132, -24596, 19966, -25099, 5574}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/input_data.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/input_data.h deleted file mode 100644 index 16b016d2..00000000 --- a/Tests/UnitTest/TestCases/TestData/requantize_s64/input_data.h +++ /dev/null @@ -1,13 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.15.0 (Keras version 2.15.0). -// Interpreter from tensorflow version 2.15.0 and revision v2.15.0-2-g0b15fdfcb3f. -#pragma once -#include - -const int16_t requantize_s64_input[128] = { - 12, 97, 80, 37, -72, 16, -110, -46, 109, -28, -21, 20, 24, 66, -110, -71, -31, -109, 90, - 11, 64, 77, 83, -38, -26, 44, 86, -109, -88, -39, 43, -36, 29, -95, -90, -36, -30, -41, - 8, 62, 25, -124, -107, -104, -113, -7, 18, 6, 44, -18, 5, -81, -18, 64, -49, -29, 82, - 124, 66, -63, -111, -103, 99, 109, -15, 101, -2, 39, 21, -42, -51, -115, -59, 25, -121, -69, - -46, 104, -20, -8, -91, 31, -114, 25, -27, 39, 79, -117, -28, -93, -31, 19, 107, 61, -8, - -125, -66, 97, -87, -98, -113, -111, 51, 65, 104, 76, 90, 110, -39, -98, -74, -56, -56, -48, - 34, -46, -107, 12, -74, 14, 96, 77, 85, -61, -17, 40, -18, 97}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/output.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/output.h new file mode 100644 index 00000000..57c8fc50 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/requantize_s64/output.h @@ -0,0 +1,11 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int16_t requantize_s64_output[48] = { + 5481, 9384, 779, 18803, 11467, 358, -3944, 10257, 6714, 7193, -1387, -1562, -3594, 8223, 9740, 17383, + -5547, 5115, -2578, -1857, 9919, -541, -4309, -6387, -9344, 12271, -3433, -1764, -1680, -8930, 872, -4686, + 11777, 11324, 10574, -205, -2548, 9810, -18258, -7059, -5637, 3980, -3164, 10545, 4713, -5335, 1535, -40}; + +const int16_t *const requantize_s64_output_ref = requantize_s64_output; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/output_mult_data.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/output_mult_data.h deleted file mode 100644 index 1f5cffeb..00000000 --- a/Tests/UnitTest/TestCases/TestData/requantize_s64/output_mult_data.h +++ /dev/null @@ -1,7 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.15.0 (Keras version 2.15.0). -// Interpreter from tensorflow version 2.15.0 and revision v2.15.0-2-g0b15fdfcb3f. -#pragma once -#include - -const int32_t requantize_s64_output_mult[8] = - {1414739540, 1453951389, 1391394644, 1429974075, 1417631388, 1463499963, 1461229183, 1369934873}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/output_multiplier.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/output_multiplier.h new file mode 100644 index 00000000..96efa838 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/requantize_s64/output_multiplier.h @@ -0,0 +1,9 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t requantize_s64_output_multiplier[8] = + {1994454084, 1981917583, 1097814498, 1094338799, 2097551601, 1095531654, 2075254939, 1092751537}; + +const int32_t *const requantize_s64_output_mult = requantize_s64_output_multiplier; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/output_ref_data.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/output_ref_data.h deleted file mode 100644 index 8037cbdd..00000000 --- a/Tests/UnitTest/TestCases/TestData/requantize_s64/output_ref_data.h +++ /dev/null @@ -1,10 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.15.0 (Keras version 2.15.0). -// Interpreter from tensorflow version 2.15.0 and revision v2.15.0-2-g0b15fdfcb3f. -#pragma once -#include - -const int16_t requantize_s64_output_ref[72] = { - 3491, 3462, 833, 1853, 2589, 5061, 2542, 1794, 3482, 3408, 813, 1895, 2613, 4994, 2499, 1816, 3508, 3371, - 766, 1820, 2610, 4960, 2545, 1878, 3523, 3346, 811, 1887, 2611, 5067, 2517, 1843, 3481, 3363, 787, 1903, - 2590, 4992, 2493, 1863, 3501, 3384, 896, 1931, 2619, 4995, 2398, 1810, 3497, 3405, 835, 1929, 2571, 5008, - 2538, 1832, 3566, 3349, 806, 1854, 2573, 4989, 2502, 1870, 3500, 3393, 754, 1804, 2560, 4972, 2570, 1898}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/output_shift.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/output_shift.h new file mode 100644 index 00000000..5c934b6f --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/requantize_s64/output_shift.h @@ -0,0 +1,6 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int32_t requantize_s64_output_shift[8] = {-10, -10, -9, -9, -10, -9, -10, -9}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/output_shift_data.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/output_shift_data.h deleted file mode 100644 index de069ed5..00000000 --- a/Tests/UnitTest/TestCases/TestData/requantize_s64/output_shift_data.h +++ /dev/null @@ -1,6 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.15.0 (Keras version 2.15.0). -// Interpreter from tensorflow version 2.15.0 and revision v2.15.0-2-g0b15fdfcb3f. -#pragma once -#include - -const int32_t requantize_s64_output_shift[8] = {-9, -9, -9, -9, -9, -9, -9, -9}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/test_data.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/test_data.h index 7930b388..33835748 100644 --- a/Tests/UnitTest/TestCases/TestData/requantize_s64/test_data.h +++ b/Tests/UnitTest/TestCases/TestData/requantize_s64/test_data.h @@ -1,9 +1,7 @@ -// Generated by test_settings.py using tensorflow version 2.15.0 (Keras version 2.15.0). -// Interpreter from tensorflow version 2.15.0 and revision v2.15.0-2-g0b15fdfcb3f. -#include "biases_data.h" +#include "bias.h" #include "config_data.h" -#include "input_data.h" -#include "output_mult_data.h" -#include "output_ref_data.h" -#include "output_shift_data.h" -#include "weights_data.h" +#include "input.h" +#include "output.h" +#include "output_multiplier.h" +#include "output_shift.h" +#include "weights.h" diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/weights.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/weights.h new file mode 100644 index 00000000..56db4d47 --- /dev/null +++ b/Tests/UnitTest/TestCases/TestData/requantize_s64/weights.h @@ -0,0 +1,19 @@ +// Generated by generate_test_data.py using tensorflow version 2.16.1 (Keras version 2.16.0). +// Interpreter from tensorflow version 2.16.1 and revision v2.16.1-0-g5bc9d26649c. +#pragma once +#include + +const int8_t requantize_s64_weights[256] = { + -124, -12, 113, -93, -123, -118, 114, 122, -29, 103, -39, 127, -50, -72, 94, 115, 74, -34, 94, -118, + 63, 117, -25, -17, 49, 63, -39, 79, 125, 3, -115, -75, 54, 118, 34, -104, 47, 67, 74, 14, + 21, 104, 106, -72, -115, 89, 30, 22, 122, -95, -41, -99, 78, -127, 86, 29, 77, -91, -97, -119, + -14, -10, -122, 123, -121, 126, 80, 127, -60, -110, 51, 1, 18, 101, -38, -64, -32, -83, 68, 116, + 126, -42, -98, -38, 74, -95, 74, -80, -15, 10, 86, 30, 117, 51, -98, 75, 108, -28, -89, -6, + -126, 62, -119, 12, -7, -12, 31, 44, -82, 60, -7, -118, -7, 78, 115, 127, 17, -52, 76, 14, + -42, 117, -39, 113, 104, -14, -37, -109, -25, 120, 71, 95, -39, -114, -127, 82, -111, 95, 10, -39, + 24, -35, 117, 50, -98, 60, 7, 59, -15, -75, 68, 31, -20, -1, -90, 23, -94, 16, 48, -58, + -127, 35, 52, -67, -26, 113, -30, 29, -71, -26, 47, -112, 22, 118, -65, 29, -78, 8, 66, 41, + -125, 112, -68, -69, -89, 25, -68, -112, -125, 54, 83, 39, 77, -110, 6, 81, 113, 18, -108, -71, + -102, 59, 101, 127, 28, -50, 111, 114, -59, 13, 120, 97, 113, -125, 69, -19, 112, 2, 19, 84, + 123, -93, 103, 98, -69, -30, 25, -107, 89, 127, -80, 104, -60, -2, 3, -39, 43, 93, -42, 76, + 54, 8, 49, 16, 74, 11, 12, 35, -24, -59, -68, -65, 10, -18, 39, 109}; diff --git a/Tests/UnitTest/TestCases/TestData/requantize_s64/weights_data.h b/Tests/UnitTest/TestCases/TestData/requantize_s64/weights_data.h deleted file mode 100644 index f263b88a..00000000 --- a/Tests/UnitTest/TestCases/TestData/requantize_s64/weights_data.h +++ /dev/null @@ -1,19 +0,0 @@ -// Generated by test_settings.py using tensorflow version 2.15.0 (Keras version 2.15.0). -// Interpreter from tensorflow version 2.15.0 and revision v2.15.0-2-g0b15fdfcb3f. -#pragma once -#include - -const int8_t requantize_s64_weights[256] = { - 74, 87, -103, 86, 32, 107, -13, -53, -118, 113, -41, -13, -45, -91, -26, -106, 89, 86, 49, -127, - 51, -58, -80, -117, 16, -69, -115, 83, 14, 86, 79, 76, -82, 41, 36, 77, -120, 40, -97, -75, - -14, -81, 16, 22, -60, -55, -100, -22, -56, -127, -77, -30, 75, -13, 49, -37, 33, -52, 19, -8, - -6, -79, -48, 2, -54, 80, 39, -14, -45, -126, -52, -86, 86, 114, 28, 107, -53, -109, 107, 121, - 72, -10, -84, -7, -43, -104, 69, -13, -83, 69, -103, -4, 22, 26, -127, 12, 116, 94, -50, 54, - -55, 6, -45, 90, -103, 8, 28, -114, -44, 127, 96, 25, -20, 107, -102, -52, -96, -39, 61, -100, - 8, -88, -79, 76, 80, -53, 65, -22, 60, 18, 112, -48, 2, 127, -19, 3, -54, 1, -43, -93, - -51, 84, -1, 88, 44, -44, -29, -40, 117, 68, -17, -15, 0, 37, -29, -5, 60, 112, -68, 64, - -17, 54, -81, 122, -49, -8, -121, 68, 80, -127, -104, -117, -56, -49, -53, 122, -6, -93, 115, -46, - 117, -82, 48, 44, -38, -23, -34, -84, 29, -70, 8, -48, -66, -47, 104, 61, -8, -122, 109, -70, - -28, -101, 38, -119, 23, 114, -98, -33, 73, 58, -14, 96, -67, -87, -120, 127, 56, -23, 37, -56, - 5, 39, 61, 47, -71, -88, -49, -111, -54, 110, -68, 56, -2, -50, -62, 87, -58, -15, -12, -56, - -114, -28, 50, -22, 48, 39, -56, 63, -38, 115, 127, 61, 52, -22, 58, 118}; diff --git a/Tests/UnitTest/TestCases/Utils/validate.h b/Tests/UnitTest/TestCases/Utils/validate.h index d95bb5d6..80b4d661 100644 --- a/Tests/UnitTest/TestCases/Utils/validate.h +++ b/Tests/UnitTest/TestCases/Utils/validate.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2010-2022 Arm Limited and/or its affiliates + * SPDX-FileCopyrightText: Copyright 2010-2022, 2024 Arm Limited and/or its affiliates * * SPDX-License-Identifier: Apache-2.0 * @@ -61,10 +61,6 @@ static inline int validate_s16(int16_t *act, const int16_t *ref, int size) printf("ERROR at pos %d: Act: %d Ref: %d\r\n", i, act[i], ref[i]); test_passed = false; } - else - { - // printf("PASS at pos %d: %d\r\n", i, act[i]); - } } if (!test_passed) diff --git a/Tests/UnitTest/TestCases/test_arm_convolve_s16/Unity/unity_test_arm_convolve_s16.c b/Tests/UnitTest/TestCases/test_arm_convolve_s16/Unity/unity_test_arm_convolve_s16.c index 96232496..9131ebb2 100644 --- a/Tests/UnitTest/TestCases/test_arm_convolve_s16/Unity/unity_test_arm_convolve_s16.c +++ b/Tests/UnitTest/TestCases/test_arm_convolve_s16/Unity/unity_test_arm_convolve_s16.c @@ -54,3 +54,9 @@ void test_buffer_size_mve_arm_convolve_s16(void) { buffer_size_mve_arm_convolve_ void test_buffer_size_dsp_arm_convolve_s16(void) { buffer_size_dsp_arm_convolve_s16(); } void test_int16xint8_spill_arm_convolve_s16(void) { int16xint8_spill_arm_convolve_s16(); } void test_int16xint8_spill2_arm_convolve_s16(void) { int16xint8_spill2_arm_convolve_s16(); } +void test_int16xint8xint32_1_arm_convolve_s16(void) { int16xint8xint32_1_arm_convolve_s16(); } +void test_int16xint8xint32_2_arm_convolve_s16(void) { int16xint8xint32_2_arm_convolve_s16(); } +void test_int16xint8xint32_3_arm_convolve_s16(void) { int16xint8xint32_3_arm_convolve_s16(); } +void test_int16xint8xint32_4_arm_convolve_s16(void) { int16xint8xint32_4_arm_convolve_s16(); } +void test_int16xint8xint32_5_arm_convolve_s16(void) { int16xint8xint32_5_arm_convolve_s16(); } +void test_int16xint8xint32_6_arm_convolve_s16(void) { int16xint8xint32_6_arm_convolve_s16(); } diff --git a/Tests/UnitTest/TestCases/test_arm_convolve_s16/test_arm_convolve_s16.c b/Tests/UnitTest/TestCases/test_arm_convolve_s16/test_arm_convolve_s16.c index 25194e8b..0e4113a2 100644 --- a/Tests/UnitTest/TestCases/test_arm_convolve_s16/test_arm_convolve_s16.c +++ b/Tests/UnitTest/TestCases/test_arm_convolve_s16/test_arm_convolve_s16.c @@ -28,6 +28,12 @@ #include "../TestData/int16xint8_dilation_3/test_data.h" #include "../TestData/int16xint8_spill/test_data.h" #include "../TestData/int16xint8_spill2/test_data.h" +#include "../TestData/int16xint8xint32_1/test_data.h" +#include "../TestData/int16xint8xint32_2/test_data.h" +#include "../TestData/int16xint8xint32_3/test_data.h" +#include "../TestData/int16xint8xint32_4/test_data.h" +#include "../TestData/int16xint8xint32_5/test_data.h" +#include "../TestData/int16xint8xint32_6/test_data.h" #include "../TestData/requantize_s64/test_data.h" #include "../Utils/validate.h" @@ -43,7 +49,8 @@ void int16xint8_arm_convolve_s16(void) cmsis_nn_dims bias_dims; cmsis_nn_dims output_dims; - const int64_t *bias_data = int16xint8_biases; + const int64_t *int64_bias_data = int16xint8_biases; + const cmsis_nn_bias_data bias_data = {int64_bias_data, false}; const int8_t *kernel_data = int16xint8_weights; const int16_t *input_data = int16xint8_input; const int16_t *output_ref = int16xint8_output_ref; @@ -84,7 +91,7 @@ void int16xint8_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -108,7 +115,7 @@ void int16xint8_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -132,7 +139,8 @@ void requantize_s64_arm_convolve_s16(void) cmsis_nn_dims bias_dims; cmsis_nn_dims output_dims; - const int64_t *bias_data = requantize_s64_biases; + const int64_t *int64_bias_data = requantize_s64_biases; + const cmsis_nn_bias_data bias_data = {int64_bias_data, false}; const int8_t *kernel_data = requantize_s64_weights; const int16_t *input_data = requantize_s64_input; const int16_t *output_ref = requantize_s64_output_ref; @@ -152,8 +160,8 @@ void requantize_s64_arm_convolve_s16(void) conv_params.padding.h = REQUANTIZE_S64_PAD_Y; conv_params.stride.w = REQUANTIZE_S64_STRIDE_X; conv_params.stride.h = REQUANTIZE_S64_STRIDE_Y; - conv_params.dilation.w = REQUANTIZE_S64_STRIDE_X; - conv_params.dilation.h = REQUANTIZE_S64_STRIDE_Y; + conv_params.dilation.w = REQUANTIZE_S64_DILATION_X; + conv_params.dilation.h = REQUANTIZE_S64_DILATION_Y; conv_params.input_offset = REQUANTIZE_S64_INPUT_OFFSET; conv_params.output_offset = REQUANTIZE_S64_OUTPUT_OFFSET; @@ -173,7 +181,7 @@ void requantize_s64_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -196,7 +204,7 @@ void requantize_s64_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); @@ -221,7 +229,8 @@ void int16xint8_dilation_1_arm_convolve_s16(void) cmsis_nn_dims bias_dims; cmsis_nn_dims output_dims; - const int64_t *bias_data = int16xint8_dilation_1_biases; + const int64_t *int64_bias_data = int16xint8_dilation_1_biases; + const cmsis_nn_bias_data bias_data = {int64_bias_data, false}; const int8_t *kernel_data = int16xint8_dilation_1_weights; const int16_t *input_data = int16xint8_dilation_1_input; const int16_t *output_ref = int16xint8_dilation_1_output_ref; @@ -262,7 +271,7 @@ void int16xint8_dilation_1_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -285,7 +294,7 @@ void int16xint8_dilation_1_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); @@ -310,7 +319,8 @@ void int16xint8_dilation_2_arm_convolve_s16(void) cmsis_nn_dims bias_dims; cmsis_nn_dims output_dims; - const int64_t *bias_data = int16xint8_dilation_2_biases; + const int64_t *int64_bias_data = int16xint8_dilation_2_biases; + const cmsis_nn_bias_data bias_data = {int64_bias_data, false}; const int8_t *kernel_data = int16xint8_dilation_2_weights; const int16_t *input_data = int16xint8_dilation_2_input; const int16_t *output_ref = int16xint8_dilation_2_output_ref; @@ -351,7 +361,7 @@ void int16xint8_dilation_2_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -374,7 +384,7 @@ void int16xint8_dilation_2_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); @@ -399,7 +409,8 @@ void int16xint8_dilation_3_arm_convolve_s16(void) cmsis_nn_dims bias_dims; cmsis_nn_dims output_dims; - const int64_t *bias_data = int16xint8_dilation_3_biases; + const int64_t *int64_bias_data = int16xint8_dilation_3_biases; + const cmsis_nn_bias_data bias_data = {int64_bias_data, false}; const int8_t *kernel_data = int16xint8_dilation_3_weights; const int16_t *input_data = int16xint8_dilation_3_input; const int16_t *output_ref = int16xint8_dilation_3_output_ref; @@ -440,7 +451,7 @@ void int16xint8_dilation_3_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -463,7 +474,7 @@ void int16xint8_dilation_3_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); @@ -602,7 +613,8 @@ void int16xint8_spill_arm_convolve_s16(void) cmsis_nn_dims bias_dims; cmsis_nn_dims output_dims; - const int64_t *bias_data = int16xint8_spill_biases; + const int64_t *int64_bias_data = int16xint8_spill_biases; + const cmsis_nn_bias_data bias_data = {int64_bias_data, false}; const int8_t *kernel_data = int16xint8_spill_weights; const int16_t *input_data = int16xint8_spill_input; const int16_t *output_ref = int16xint8_spill_output_ref; @@ -643,7 +655,7 @@ void int16xint8_spill_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -667,7 +679,7 @@ void int16xint8_spill_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -691,7 +703,8 @@ void int16xint8_spill2_arm_convolve_s16(void) cmsis_nn_dims bias_dims; cmsis_nn_dims output_dims; - const int64_t *bias_data = int16xint8_spill2_biases; + const int64_t *int64_bias_data = int16xint8_spill2_biases; + const cmsis_nn_bias_data bias_data = {int64_bias_data, false}; const int8_t *kernel_data = int16xint8_spill2_weights; const int16_t *input_data = int16xint8_spill2_input; const int16_t *output_ref = int16xint8_spill2_output_ref; @@ -732,7 +745,7 @@ void int16xint8_spill2_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, &output_dims, output); if (ctx.buf) @@ -756,7 +769,547 @@ void int16xint8_spill2_arm_convolve_s16(void) &filter_dims, kernel_data, &bias_dims, - bias_data, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); +} + +void int16xint8xint32_1_arm_convolve_s16(void) +{ + int16_t output[INT16XINT8XINT32_1_DST_SIZE] = {0}; + + cmsis_nn_context ctx; + cmsis_nn_conv_params conv_params; + cmsis_nn_per_channel_quant_params quant_params; + cmsis_nn_dims input_dims; + cmsis_nn_dims filter_dims; + cmsis_nn_dims bias_dims; + cmsis_nn_dims output_dims; + + const int32_t *int32_bias_data = int16xint8xint32_1_biases; + const cmsis_nn_bias_data bias_data = {int32_bias_data, true}; + const int8_t *kernel_data = int16xint8xint32_1_weights; + const int16_t *input_data = int16xint8xint32_1_input; + const int16_t *output_ref = int16xint8xint32_1_output_ref; + const int32_t output_ref_size = INT16XINT8XINT32_1_DST_SIZE; + + input_dims.n = INT16XINT8XINT32_1_INPUT_BATCHES; + input_dims.w = INT16XINT8XINT32_1_INPUT_W; + input_dims.h = INT16XINT8XINT32_1_INPUT_H; + input_dims.c = INT16XINT8XINT32_1_IN_CH; + filter_dims.w = INT16XINT8XINT32_1_FILTER_X; + filter_dims.h = INT16XINT8XINT32_1_FILTER_Y; + output_dims.w = INT16XINT8XINT32_1_OUTPUT_W; + output_dims.h = INT16XINT8XINT32_1_OUTPUT_H; + output_dims.c = INT16XINT8XINT32_1_OUT_CH; + + conv_params.padding.w = INT16XINT8XINT32_1_PAD_X; + conv_params.padding.h = INT16XINT8XINT32_1_PAD_Y; + conv_params.stride.w = INT16XINT8XINT32_1_STRIDE_X; + conv_params.stride.h = INT16XINT8XINT32_1_STRIDE_Y; + conv_params.dilation.w = INT16XINT8XINT32_1_DILATION_X; + conv_params.dilation.h = INT16XINT8XINT32_1_DILATION_Y; + + conv_params.input_offset = 0; + conv_params.output_offset = 0; + conv_params.activation.min = INT16XINT8XINT32_1_OUT_ACTIVATION_MIN; + conv_params.activation.max = INT16XINT8XINT32_1_OUT_ACTIVATION_MAX; + quant_params.multiplier = (int32_t *)int16xint8xint32_1_output_mult; + quant_params.shift = (int32_t *)int16xint8xint32_1_output_shift; + + int buf_size = arm_convolve_s16_get_buffer_size(&input_dims, &filter_dims); + ctx.buf = malloc(buf_size); + arm_cmsis_nn_status result; + result = arm_convolve_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + // The caller is responsible to clear the scratch buffers for security reasons if applicable. + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); + memset(output, 0, sizeof(output)); + + buf_size = arm_convolve_wrapper_s16_get_buffer_size(&conv_params, &input_dims, &filter_dims, &output_dims); + ctx.buf = malloc(buf_size); + + result = arm_convolve_wrapper_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); +} + +void int16xint8xint32_2_arm_convolve_s16(void) +{ + int16_t output[INT16XINT8XINT32_2_DST_SIZE] = {0}; + + cmsis_nn_context ctx; + cmsis_nn_conv_params conv_params; + cmsis_nn_per_channel_quant_params quant_params; + cmsis_nn_dims input_dims; + cmsis_nn_dims filter_dims; + cmsis_nn_dims bias_dims; + cmsis_nn_dims output_dims; + + const int32_t *int32_bias_data = int16xint8xint32_2_biases; + const cmsis_nn_bias_data bias_data = {int32_bias_data, true}; + const int8_t *kernel_data = int16xint8xint32_2_weights; + const int16_t *input_data = int16xint8xint32_2_input; + const int16_t *output_ref = int16xint8xint32_2_output_ref; + const int32_t output_ref_size = INT16XINT8XINT32_2_DST_SIZE; + + input_dims.n = INT16XINT8XINT32_2_INPUT_BATCHES; + input_dims.w = INT16XINT8XINT32_2_INPUT_W; + input_dims.h = INT16XINT8XINT32_2_INPUT_H; + input_dims.c = INT16XINT8XINT32_2_IN_CH; + filter_dims.w = INT16XINT8XINT32_2_FILTER_X; + filter_dims.h = INT16XINT8XINT32_2_FILTER_Y; + output_dims.w = INT16XINT8XINT32_2_OUTPUT_W; + output_dims.h = INT16XINT8XINT32_2_OUTPUT_H; + output_dims.c = INT16XINT8XINT32_2_OUT_CH; + + conv_params.padding.w = INT16XINT8XINT32_2_PAD_X; + conv_params.padding.h = INT16XINT8XINT32_2_PAD_Y; + conv_params.stride.w = INT16XINT8XINT32_2_STRIDE_X; + conv_params.stride.h = INT16XINT8XINT32_2_STRIDE_Y; + conv_params.dilation.w = INT16XINT8XINT32_2_DILATION_X; + conv_params.dilation.h = INT16XINT8XINT32_2_DILATION_Y; + + conv_params.input_offset = 0; + conv_params.output_offset = 0; + conv_params.activation.min = INT16XINT8XINT32_2_OUT_ACTIVATION_MIN; + conv_params.activation.max = INT16XINT8XINT32_2_OUT_ACTIVATION_MAX; + quant_params.multiplier = (int32_t *)int16xint8xint32_2_output_mult; + quant_params.shift = (int32_t *)int16xint8xint32_2_output_shift; + + int buf_size = arm_convolve_s16_get_buffer_size(&input_dims, &filter_dims); + ctx.buf = malloc(buf_size); + arm_cmsis_nn_status result; + result = arm_convolve_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + // The caller is responsible to clear the scratch buffers for security reasons if applicable. + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); + memset(output, 0, sizeof(output)); + + buf_size = arm_convolve_wrapper_s16_get_buffer_size(&conv_params, &input_dims, &filter_dims, &output_dims); + ctx.buf = malloc(buf_size); + + result = arm_convolve_wrapper_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); +} + +void int16xint8xint32_3_arm_convolve_s16(void) +{ + int16_t output[INT16XINT8XINT32_3_DST_SIZE] = {0}; + + cmsis_nn_context ctx; + cmsis_nn_conv_params conv_params; + cmsis_nn_per_channel_quant_params quant_params; + cmsis_nn_dims input_dims; + cmsis_nn_dims filter_dims; + cmsis_nn_dims bias_dims; + cmsis_nn_dims output_dims; + + const int32_t *int32_bias_data = int16xint8xint32_3_biases; + const cmsis_nn_bias_data bias_data = {int32_bias_data, true}; + const int8_t *kernel_data = int16xint8xint32_3_weights; + const int16_t *input_data = int16xint8xint32_3_input; + const int16_t *output_ref = int16xint8xint32_3_output_ref; + const int32_t output_ref_size = INT16XINT8XINT32_3_DST_SIZE; + + input_dims.n = INT16XINT8XINT32_3_INPUT_BATCHES; + input_dims.w = INT16XINT8XINT32_3_INPUT_W; + input_dims.h = INT16XINT8XINT32_3_INPUT_H; + input_dims.c = INT16XINT8XINT32_3_IN_CH; + filter_dims.w = INT16XINT8XINT32_3_FILTER_X; + filter_dims.h = INT16XINT8XINT32_3_FILTER_Y; + output_dims.w = INT16XINT8XINT32_3_OUTPUT_W; + output_dims.h = INT16XINT8XINT32_3_OUTPUT_H; + output_dims.c = INT16XINT8XINT32_3_OUT_CH; + + conv_params.padding.w = INT16XINT8XINT32_3_PAD_X; + conv_params.padding.h = INT16XINT8XINT32_3_PAD_Y; + conv_params.stride.w = INT16XINT8XINT32_3_STRIDE_X; + conv_params.stride.h = INT16XINT8XINT32_3_STRIDE_Y; + conv_params.dilation.w = INT16XINT8XINT32_3_DILATION_X; + conv_params.dilation.h = INT16XINT8XINT32_3_DILATION_Y; + + conv_params.input_offset = 0; + conv_params.output_offset = 0; + conv_params.activation.min = INT16XINT8XINT32_3_OUT_ACTIVATION_MIN; + conv_params.activation.max = INT16XINT8XINT32_3_OUT_ACTIVATION_MAX; + quant_params.multiplier = (int32_t *)int16xint8xint32_3_output_mult; + quant_params.shift = (int32_t *)int16xint8xint32_3_output_shift; + + int buf_size = arm_convolve_s16_get_buffer_size(&input_dims, &filter_dims); + ctx.buf = malloc(buf_size); + arm_cmsis_nn_status result; + result = arm_convolve_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + // The caller is responsible to clear the scratch buffers for security reasons if applicable. + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); + memset(output, 0, sizeof(output)); + + buf_size = arm_convolve_wrapper_s16_get_buffer_size(&conv_params, &input_dims, &filter_dims, &output_dims); + ctx.buf = malloc(buf_size); + + result = arm_convolve_wrapper_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); +} + +void int16xint8xint32_4_arm_convolve_s16(void) +{ + int16_t output[INT16XINT8XINT32_4_DST_SIZE] = {0}; + + cmsis_nn_context ctx; + cmsis_nn_conv_params conv_params; + cmsis_nn_per_channel_quant_params quant_params; + cmsis_nn_dims input_dims; + cmsis_nn_dims filter_dims; + cmsis_nn_dims bias_dims; + cmsis_nn_dims output_dims; + + const int32_t *int32_bias_data = int16xint8xint32_4_biases; + const cmsis_nn_bias_data bias_data = {int32_bias_data, true}; + const int8_t *kernel_data = int16xint8xint32_4_weights; + const int16_t *input_data = int16xint8xint32_4_input; + const int16_t *output_ref = int16xint8xint32_4_output_ref; + const int32_t output_ref_size = INT16XINT8XINT32_4_DST_SIZE; + + input_dims.n = INT16XINT8XINT32_4_INPUT_BATCHES; + input_dims.w = INT16XINT8XINT32_4_INPUT_W; + input_dims.h = INT16XINT8XINT32_4_INPUT_H; + input_dims.c = INT16XINT8XINT32_4_IN_CH; + filter_dims.w = INT16XINT8XINT32_4_FILTER_X; + filter_dims.h = INT16XINT8XINT32_4_FILTER_Y; + output_dims.w = INT16XINT8XINT32_4_OUTPUT_W; + output_dims.h = INT16XINT8XINT32_4_OUTPUT_H; + output_dims.c = INT16XINT8XINT32_4_OUT_CH; + + conv_params.padding.w = INT16XINT8XINT32_4_PAD_X; + conv_params.padding.h = INT16XINT8XINT32_4_PAD_Y; + conv_params.stride.w = INT16XINT8XINT32_4_STRIDE_X; + conv_params.stride.h = INT16XINT8XINT32_4_STRIDE_Y; + conv_params.dilation.w = INT16XINT8XINT32_4_DILATION_X; + conv_params.dilation.h = INT16XINT8XINT32_4_DILATION_Y; + + conv_params.input_offset = 0; + conv_params.output_offset = 0; + conv_params.activation.min = INT16XINT8XINT32_4_OUT_ACTIVATION_MIN; + conv_params.activation.max = INT16XINT8XINT32_4_OUT_ACTIVATION_MAX; + quant_params.multiplier = (int32_t *)int16xint8xint32_4_output_mult; + quant_params.shift = (int32_t *)int16xint8xint32_4_output_shift; + + int buf_size = arm_convolve_s16_get_buffer_size(&input_dims, &filter_dims); + ctx.buf = malloc(buf_size); + arm_cmsis_nn_status result; + result = arm_convolve_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + // The caller is responsible to clear the scratch buffers for security reasons if applicable. + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); + memset(output, 0, sizeof(output)); + + buf_size = arm_convolve_wrapper_s16_get_buffer_size(&conv_params, &input_dims, &filter_dims, &output_dims); + ctx.buf = malloc(buf_size); + + result = arm_convolve_wrapper_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); +} + +void int16xint8xint32_5_arm_convolve_s16(void) +{ + int16_t output[INT16XINT8XINT32_5_DST_SIZE] = {0}; + + cmsis_nn_context ctx; + cmsis_nn_conv_params conv_params; + cmsis_nn_per_channel_quant_params quant_params; + cmsis_nn_dims input_dims; + cmsis_nn_dims filter_dims; + cmsis_nn_dims bias_dims; + cmsis_nn_dims output_dims; + + const int32_t *int32_bias_data = int16xint8xint32_5_biases; + const cmsis_nn_bias_data bias_data = {int32_bias_data, true}; + const int8_t *kernel_data = int16xint8xint32_5_weights; + const int16_t *input_data = int16xint8xint32_5_input; + const int16_t *output_ref = int16xint8xint32_5_output_ref; + const int32_t output_ref_size = INT16XINT8XINT32_5_DST_SIZE; + + input_dims.n = INT16XINT8XINT32_5_INPUT_BATCHES; + input_dims.w = INT16XINT8XINT32_5_INPUT_W; + input_dims.h = INT16XINT8XINT32_5_INPUT_H; + input_dims.c = INT16XINT8XINT32_5_IN_CH; + filter_dims.w = INT16XINT8XINT32_5_FILTER_X; + filter_dims.h = INT16XINT8XINT32_5_FILTER_Y; + output_dims.w = INT16XINT8XINT32_5_OUTPUT_W; + output_dims.h = INT16XINT8XINT32_5_OUTPUT_H; + output_dims.c = INT16XINT8XINT32_5_OUT_CH; + + conv_params.padding.w = INT16XINT8XINT32_5_PAD_X; + conv_params.padding.h = INT16XINT8XINT32_5_PAD_Y; + conv_params.stride.w = INT16XINT8XINT32_5_STRIDE_X; + conv_params.stride.h = INT16XINT8XINT32_5_STRIDE_Y; + conv_params.dilation.w = INT16XINT8XINT32_5_DILATION_X; + conv_params.dilation.h = INT16XINT8XINT32_5_DILATION_Y; + + conv_params.input_offset = 0; + conv_params.output_offset = 0; + conv_params.activation.min = INT16XINT8XINT32_5_OUT_ACTIVATION_MIN; + conv_params.activation.max = INT16XINT8XINT32_5_OUT_ACTIVATION_MAX; + quant_params.multiplier = (int32_t *)int16xint8xint32_5_output_mult; + quant_params.shift = (int32_t *)int16xint8xint32_5_output_shift; + + int buf_size = arm_convolve_s16_get_buffer_size(&input_dims, &filter_dims); + ctx.buf = malloc(buf_size); + arm_cmsis_nn_status result; + result = arm_convolve_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + // The caller is responsible to clear the scratch buffers for security reasons if applicable. + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); + memset(output, 0, sizeof(output)); + + buf_size = arm_convolve_wrapper_s16_get_buffer_size(&conv_params, &input_dims, &filter_dims, &output_dims); + ctx.buf = malloc(buf_size); + + result = arm_convolve_wrapper_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); +} + +void int16xint8xint32_6_arm_convolve_s16(void) +{ + int16_t output[INT16XINT8XINT32_6_DST_SIZE] = {0}; + + cmsis_nn_context ctx; + cmsis_nn_conv_params conv_params; + cmsis_nn_per_channel_quant_params quant_params; + cmsis_nn_dims input_dims; + cmsis_nn_dims filter_dims; + cmsis_nn_dims bias_dims; + cmsis_nn_dims output_dims; + + const int32_t *int32_bias_data = int16xint8xint32_6_biases; + const cmsis_nn_bias_data bias_data = {int32_bias_data, true}; + const int8_t *kernel_data = int16xint8xint32_6_weights; + const int16_t *input_data = int16xint8xint32_6_input; + const int16_t *output_ref = int16xint8xint32_6_output_ref; + const int32_t output_ref_size = INT16XINT8XINT32_6_DST_SIZE; + + input_dims.n = INT16XINT8XINT32_6_INPUT_BATCHES; + input_dims.w = INT16XINT8XINT32_6_INPUT_W; + input_dims.h = INT16XINT8XINT32_6_INPUT_H; + input_dims.c = INT16XINT8XINT32_6_IN_CH; + filter_dims.w = INT16XINT8XINT32_6_FILTER_X; + filter_dims.h = INT16XINT8XINT32_6_FILTER_Y; + output_dims.w = INT16XINT8XINT32_6_OUTPUT_W; + output_dims.h = INT16XINT8XINT32_6_OUTPUT_H; + output_dims.c = INT16XINT8XINT32_6_OUT_CH; + + conv_params.padding.w = INT16XINT8XINT32_6_PAD_X; + conv_params.padding.h = INT16XINT8XINT32_6_PAD_Y; + conv_params.stride.w = INT16XINT8XINT32_6_STRIDE_X; + conv_params.stride.h = INT16XINT8XINT32_6_STRIDE_Y; + conv_params.dilation.w = INT16XINT8XINT32_6_DILATION_X; + conv_params.dilation.h = INT16XINT8XINT32_6_DILATION_Y; + + conv_params.input_offset = 0; + conv_params.output_offset = 0; + conv_params.activation.min = INT16XINT8XINT32_6_OUT_ACTIVATION_MIN; + conv_params.activation.max = INT16XINT8XINT32_6_OUT_ACTIVATION_MAX; + quant_params.multiplier = (int32_t *)int16xint8xint32_6_output_mult; + quant_params.shift = (int32_t *)int16xint8xint32_6_output_shift; + + int buf_size = arm_convolve_s16_get_buffer_size(&input_dims, &filter_dims); + ctx.buf = malloc(buf_size); + arm_cmsis_nn_status result; + result = arm_convolve_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, + &output_dims, + output); + if (ctx.buf) + { + // The caller is responsible to clear the scratch buffers for security reasons if applicable. + memset(ctx.buf, 0, buf_size); + free(ctx.buf); + } + TEST_ASSERT_EQUAL(ARM_CMSIS_NN_SUCCESS, result); + TEST_ASSERT_TRUE(validate_s16(output, output_ref, output_ref_size)); + memset(output, 0, sizeof(output)); + + buf_size = arm_convolve_wrapper_s16_get_buffer_size(&conv_params, &input_dims, &filter_dims, &output_dims); + ctx.buf = malloc(buf_size); + + result = arm_convolve_wrapper_s16(&ctx, + &conv_params, + &quant_params, + &input_dims, + input_data, + &filter_dims, + kernel_data, + &bias_dims, + &bias_data, &output_dims, output); if (ctx.buf) diff --git a/Tests/UnitTest/conv_settings.py b/Tests/UnitTest/conv_settings.py index 5b7831d7..b536241d 100644 --- a/Tests/UnitTest/conv_settings.py +++ b/Tests/UnitTest/conv_settings.py @@ -21,6 +21,7 @@ import math import tf_keras as keras + class ConvSettings(TestSettings): def __init__(self, @@ -48,6 +49,7 @@ def __init__(self, out_activation_min=None, out_activation_max=None, int16xint8=False, + int16xint8_int32=False, bias_min=TestSettings.INT32_MIN, bias_max=TestSettings.INT32_MAX, dilation_x=1, @@ -92,6 +94,13 @@ def __init__(self, self.weights_min = weights_min self.weights_max = weights_max + if int16xint8_int32: + if not self.is_int16xint8: + raise RuntimeError("ERROR: int16x8 with int32 bias only relevant for int16x8") + if not self.test_type == 'conv': + raise RuntimeError("ERROR: int16x8 with int32 bias only supported for conv") + self.int16xint8_int32 = int16xint8_int32 + if self.test_type == 'depthwise_conv': self.channel_multiplier = self.output_ch // self.input_ch if self.output_ch % self.input_ch != 0: @@ -197,7 +206,7 @@ def generate_data(self, input_data=None, weights=None, biases=None) -> None: if self.is_int16xint8: inttype = tf.int16 datatype = "int16_t" - bias_datatype = "int64_t" + bias_datatype = "int32_t" if self.int16xint8_int32 else "int64_t" else: inttype = tf.int8 datatype = "int8_t" @@ -327,13 +336,13 @@ def generate_data(self, input_data=None, weights=None, biases=None) -> None: model.add(keras.layers.InputLayer(input_shape=input_shape[1:], batch_size=self.batches)) if self.test_type == 'conv': conv_layer = keras.layers.Conv2D(self.output_ch, - kernel_size=(self.filter_y, self.filter_x), - strides=(self.stride_y, self.stride_x), - padding=self.padding, - input_shape=input_shape[1:], - dilation_rate=(self.dilation_y, self.dilation_x), - groups=self.groups, - use_bias=self.generate_bias) + kernel_size=(self.filter_y, self.filter_x), + strides=(self.stride_y, self.stride_x), + padding=self.padding, + input_shape=input_shape[1:], + dilation_rate=(self.dilation_y, self.dilation_x), + groups=self.groups, + use_bias=self.generate_bias) model.add(conv_layer) if self.generate_bias: conv_layer.set_weights([weights, biases]) @@ -341,12 +350,12 @@ def generate_data(self, input_data=None, weights=None, biases=None) -> None: conv_layer.set_weights([weights]) elif self.test_type == 'depthwise_conv': depthwise_layer = keras.layers.DepthwiseConv2D(kernel_size=(self.filter_y, self.filter_x), - strides=(self.stride_y, self.stride_x), - padding=self.padding, - depth_multiplier=self.channel_multiplier, - input_shape=input_shape[1:], - dilation_rate=(self.dilation_y, self.dilation_x), - use_bias=self.generate_bias) + strides=(self.stride_y, self.stride_x), + padding=self.padding, + depth_multiplier=self.channel_multiplier, + input_shape=input_shape[1:], + dilation_rate=(self.dilation_y, self.dilation_x), + use_bias=self.generate_bias) model.add(depthwise_layer) if self.generate_bias: depthwise_layer.set_weights([weights, biases]) @@ -354,13 +363,13 @@ def generate_data(self, input_data=None, weights=None, biases=None) -> None: depthwise_layer.set_weights([weights]) elif self.test_type == 'transpose_conv': transposed_conv_layer = keras.layers.Conv2DTranspose(self.output_ch, - kernel_size=(self.filter_y, self.filter_x), - strides=(self.stride_y, self.stride_x), - padding=self.padding, - input_shape=input_shape[1:], - dilation_rate=(self.dilation_y, - self.dilation_x), - use_bias=self.generate_bias) + kernel_size=(self.filter_y, self.filter_x), + strides=(self.stride_y, self.stride_x), + padding=self.padding, + input_shape=input_shape[1:], + dilation_rate=(self.dilation_y, + self.dilation_x), + use_bias=self.generate_bias) model.add(transposed_conv_layer) if self.generate_bias: transposed_conv_layer.set_weights([weights, biases]) @@ -377,7 +386,7 @@ def generate_data(self, input_data=None, weights=None, biases=None) -> None: filter_index = 2 bias_index = 1 - self.convert_model(model, inttype) + self.convert_model(model, inttype, int16x8_int32bias=self.int16xint8_int32) interpreter = self.interpret_model(input_data, inttype) diff --git a/Tests/UnitTest/generate_test_data.py b/Tests/UnitTest/generate_test_data.py index a51ebe60..3f77a91b 100755 --- a/Tests/UnitTest/generate_test_data.py +++ b/Tests/UnitTest/generate_test_data.py @@ -756,6 +756,154 @@ def load_testdata_sets(regenerate_input, regenerate_weights, regenerate_biases, int16xint8=True, dilation_x=2, interpreter=interpreter) + dataset = 'int16xint8xint32_1' + testdata_sets[dataset] = ConvSettings(dataset, + type_of_test, + regenerate_weights, + regenerate_input, + regenerate_biases, + schema_file, + in_ch=55, + out_ch=4, + x_in=10, + y_in=8, + w_x=9, + w_y=4, + stride_x=1, + stride_y=1, + pad=False, + generate_bias=False, + randmin=TestSettings.INT16_MIN, + randmax=TestSettings.INT16_MAX, + out_activation_min=TestSettings.INT16_MIN, + out_activation_max=TestSettings.INT16_MAX, + int16xint8=True, + int16xint8_int32=True, + interpreter=interpreter) + dataset = 'int16xint8xint32_2' + testdata_sets[dataset] = ConvSettings(dataset, + type_of_test, + regenerate_weights, + regenerate_input, + regenerate_biases, + schema_file, + in_ch=55, + out_ch=9, + x_in=10, + y_in=8, + w_x=9, + w_y=4, + stride_x=1, + stride_y=1, + pad=False, + generate_bias=False, + randmin=TestSettings.INT16_MAX - 100, + randmax=TestSettings.INT16_MAX, + out_activation_min=TestSettings.INT16_MAX - 100, + out_activation_max=TestSettings.INT16_MAX, + bias_min=TestSettings.INT64_MIN, + bias_max=TestSettings.INT64_MAX, + int16xint8=True, + int16xint8_int32=True, + interpreter=interpreter, + weights_min=100) + dataset = 'int16xint8xint32_3' + testdata_sets[dataset] = ConvSettings(dataset, + type_of_test, + regenerate_weights, + regenerate_input, + regenerate_biases, + schema_file, + in_ch=8, + out_ch=8, + x_in=4, + y_in=4, + w_x=2, + w_y=2, + stride_x=1, + stride_y=1, + pad=False, + generate_bias=True, + out_activation_min=TestSettings.INT16_MIN, + out_activation_max=TestSettings.INT16_MAX, + int16xint8=True, + int16xint8_int32=True, + bias_min=-0x300, + bias_max=TestSettings.INT32_MAX + 1000, + interpreter=interpreter) + dataset = 'int16xint8xint32_4' + testdata_sets[dataset] = ConvSettings(dataset, + type_of_test, + regenerate_weights, + regenerate_input, + regenerate_biases, + schema_file, + in_ch=2, + out_ch=2, + x_in=32, + y_in=32, + w_x=2, + w_y=2, + stride_x=1, + stride_y=1, + pad=False, + out_activation_min=TestSettings.INT16_MIN, + out_activation_max=TestSettings.INT16_MAX, + int16xint8=True, + int16xint8_int32=True, + bias_min=-0x300, + dilation_x=2, + dilation_y=2, + interpreter=interpreter) + dataset = 'int16xint8xint32_5' + testdata_sets[dataset] = ConvSettings(dataset, + type_of_test, + regenerate_weights, + regenerate_input, + regenerate_biases, + schema_file, + in_ch=3, + out_ch=4, + x_in=7, + y_in=8, + w_x=2, + w_y=4, + stride_x=1, + stride_y=1, + pad=True, + randmin=TestSettings.INT16_MIN, + randmax=TestSettings.INT16_MAX, + out_activation_min=-13335, + out_activation_max=32767, + int16xint8=True, + int16xint8_int32=True, + dilation_x=2, + dilation_y=2, + interpreter=interpreter) + dataset = 'int16xint8xint32_6' + testdata_sets[dataset] = ConvSettings(dataset, + type_of_test, + regenerate_weights, + regenerate_input, + regenerate_biases, + schema_file, + in_ch=3, + out_ch=4, + x_in=7, + y_in=8, + w_x=2, + w_y=4, + stride_x=1, + stride_y=1, + pad=True, + randmin=TestSettings.INT16_MIN, + randmax=TestSettings.INT16_MAX, + out_activation_min=-13335, + out_activation_max=32767, + int16xint8=True, + int16xint8_int32=True, + dilation_x=2, + interpreter=interpreter) dataset = 'grouped_conv_1' testdata_sets[dataset] = ConvSettings(dataset, type_of_test, diff --git a/Tests/UnitTest/test_settings.py b/Tests/UnitTest/test_settings.py index 5df97b9a..64fc120f 100644 --- a/Tests/UnitTest/test_settings.py +++ b/Tests/UnitTest/test_settings.py @@ -452,7 +452,7 @@ def convert_and_interpret(self, model, inttype, input_data=None, dataset_shape=N self.convert_model(model, inttype, dataset_shape) return self.interpret_model(input_data, inttype) - def convert_model(self, model, inttype, dataset_shape=None): + def convert_model(self, model, inttype, dataset_shape=None, int16x8_int32bias=False): model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adam(), metrics=['accuracy']) @@ -470,6 +470,8 @@ def convert_model(self, model, inttype, dataset_shape=None): converter.optimizations = [tf.lite.Optimize.DEFAULT] converter.representative_dataset = representative_dataset if self.is_int16xint8: + if int16x8_int32bias: + converter._experimental_full_integer_quantization_bias_type = tf.int32 converter.target_spec.supported_ops = [ tf.lite.OpsSet.EXPERIMENTAL_TFLITE_BUILTINS_ACTIVATIONS_INT16_WEIGHTS_INT8 ]