diff --git a/.gitattributes b/.gitattributes index 5c8cee90d..6bf2a56c7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -21,3 +21,35 @@ *.jpg binary *.pdf binary *.ipynb binary + +c_reference/models/q_scut_head_b_face3_model/mbconv1.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/mbconv3.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/mbconv4.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/rnn1.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/conv2D.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/detection1.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/detection2.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/detection3.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/mbconv2.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face3_model/rnn2.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/detection4.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv10.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv11.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv2.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv5.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv6.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/detection1.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/detection3.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/rnn2.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv7.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv8.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv9.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv14.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv4.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/rnn1.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/conv2D.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv3.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv13.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv1.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/detection2.h filter=lfs diff=lfs merge=lfs -text +c_reference/models/q_scut_head_b_face2_model/mbconv12.h filter=lfs diff=lfs merge=lfs -text diff --git a/c_reference/Makefile b/c_reference/Makefile index 5a77e5e90..35e01e7c8 100644 --- a/c_reference/Makefile +++ b/c_reference/Makefile @@ -4,10 +4,12 @@ include config.mk SRC_DIR=src +MODEL_DIR=models TEST_DIR=tests all: $(MAKE) -C $(SRC_DIR) + $(MAKE) -C $(MODEL_DIR) $(MAKE) -C $(TEST_DIR) .PHONY: clean cleanest @@ -15,9 +17,11 @@ all: clean: rm -f *.o *.gch $(MAKE) -C $(SRC_DIR) clean + $(MAKE) -C $(MODEL_DIR) clean $(MAKE) -C $(TEST_DIR) clean cleanest: clean rm *~ $(MAKE) -C $(SRC_DIR) cleanest + $(MAKE) -C $(MODEL_DIR) cleanest $(MAKE) -C $(TEST_DIR) cleanest diff --git a/c_reference/README.md b/c_reference/README.md index 63cc38185..64812c95a 100644 --- a/c_reference/README.md +++ b/c_reference/README.md @@ -1,7 +1,24 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT license. -This folder consists of C reference code for some EdgeML operators, +This folder consists of `C` reference code for some `EdgeML` operators, and sample parameter sets and input/output traces to verify them. -The code is intended to compile with gcc on Linux machines, -and is to be adapated as needed for other embedded platforms. +The code is intended to compile with `GCC` on `Linux` machines, +and is to be adapted as needed for other embedded platforms. + +## Directory Structure + +The `EdgeML/c_reference/` directory is broadly structured into the following sub-directories: + +- **include/**: Contains the header files for various lower level operators and layers. +- **models/**: Contains the optimized source code and header files for various models built by stiching together different layers and operators. Also contains the layer weights and hyper-parameters for the corresponding models as well (stored using `Git LFS`). +- **src/**: Contains the optimized source code files for various lower level operators and layers. +- **tests/**: Contains extensive test cases for individual operators and layers, as well as the implemented models. The executables are generated in the main directory itself, while the test scripts and their configurations can be accessed in the appropriate sub-directories. + +## Compiling + +Run `make` inside the `EdgeML/c_reference/` directory to compile the entire project at once. Alternatively, run `make clean` to discard the previously generated object files and executables. By default, the directory is compiled with loop unrolling and shift operations turned off. + +## Running + +Head to `c_reference/tests/` directory and execute the test script of your choice. Test patches (wherever required) are currently not included because of license restrictions. Please open an issue / refer to an existing issue for the same. diff --git a/c_reference/include/quantized_datatypes.h b/c_reference/include/quantized_datatypes.h index 41a0aaf74..a5f31635f 100644 --- a/c_reference/include/quantized_datatypes.h +++ b/c_reference/include/quantized_datatypes.h @@ -6,25 +6,20 @@ #include -// Macro for input type. -typedef int16_t INT_T; +// Macros for input type. +typedef int8_t Q7_T; +typedef int16_t Q15_T; +typedef int32_t Q31_T; +typedef int64_t Q63_T; // Macro for unsigned iterator type. -typedef uint16_t ITER_T; +typedef uint32_t ITER_T; // Macro for signed iterator type. -typedef int16_t S_ITER_T; -// Macro for intermediate buffer type. -typedef int32_t INTM_T; -// Macros for scale variable type. -#ifdef SHIFT - typedef uint8_t SCALE_T; - typedef uint8_t L_SCALE_T; -#else - typedef int16_t SCALE_T; - typedef int32_t L_SCALE_T; -#endif +typedef int32_t S_ITER_T; +// Macro for scale variable type. +typedef int32_t SCALE_T; // Macro for max value of input type. -#define INT_TMAX 32767 +#define Q15_TMAX 32767 // Macro for min value of input type. -#define INT_TMIN -32768 +#define Q15_TMIN -32768 #endif diff --git a/c_reference/include/quantized_fastgrnn.h b/c_reference/include/quantized_fastgrnn.h index db77c836a..5f9bf4691 100644 --- a/c_reference/include/quantized_fastgrnn.h +++ b/c_reference/include/quantized_fastgrnn.h @@ -12,45 +12,47 @@ #include "quantized_utils.h" /** - * @brief Model paramters for low-rank FastGRNN + * @brief Model parameters for low-rank FastGRNN * @var mean pointer to mean of input vector for normalization, size inputDims - * @var stdDev pointer to standard dev of input for normalization, size inputDims*steps + * @var stdDev pointer to standard dev of input for normalization, size inputDims * steps * @var W1 pointer to first low-rank component of W * @var W2 pointer to second low-rank component of W * @var wRank rank of W matrix * @var U1 pointer to first low-rank component of U * @var U2 pointer to second low-rank component of U * @var uRank rank of U matrix - * @var Bg pointer to bias for sigmoid - * @var Bh pointer to bias for tanh + * @var Bg pointer to bias for Sigmoid + * @var Bh pointer to bias for TanH * @var sigmoid_zeta first weight parameter for update from input from next step * @var sigmoid_nu second weight parameter for update from input from next step */ -typedef struct Q_FastGRNN_LR_Params { - INT_T* mean; - INT_T* stdDev; - INT_T* W1; - INT_T* W2; +typedef struct Q15_FastGRNN_LR_Params { + const Q15_T* mean; + const Q15_T* stdDev; + const Q15_T* W1; + const Q15_T* W2; ITER_T wRank; - INT_T* U1; - INT_T* U2; + const Q15_T* U1; + const Q15_T* U2; ITER_T uRank; - INT_T* Bg; - INT_T* Bh; - INT_T sigmoid_zeta; - INT_T sigmoid_nu; -} Q_FastGRNN_LR_Params; + const Q15_T* Bg; + const Q15_T* Bh; + Q15_T sigmoid_zeta; + Q15_T sigmoid_nu; +} Q15_FastGRNN_LR_Params; /** - * @brief Model scales for different inputs. The naming convention follows - * two basic rules: - * 1) If the matrix for which the scale is associated is used only once, name + * @brief Model scales and flags for different inputs. The naming convention + * follows three basic rules: + * 1) If the variable for which the scale is associated is used only once, name * the scale after the matrix. - * 2) If the matrix for which the scale is associated is used only once, name - * the scale after the matrix, the operation it is being used under and the - * matrix it is being operated with. + * 2) If the variable for which the scale is associated is used more than once, + * name the scale after the matrix, the operation it is being used under and + * the matrix it is being operated with. + * 3) For flag variables, simply name them after the operation for which they + * are intended. */ -typedef struct Q_FastGRNN_LR_Scales { +typedef struct Q15_FastGRNN_LR_Scales { SCALE_T input; SCALE_T mean; SCALE_T meanSub; @@ -75,14 +77,17 @@ typedef struct Q_FastGRNN_LR_Scales { SCALE_T mV2AddMV4; SCALE_T mV4AddMV2; SCALE_T mV2AddMV4Out; + SCALE_T mV2AddMV4Demote; SCALE_T pC1AddBg; SCALE_T Bg; SCALE_T pC1AddBgOut; + SCALE_T pC1AddBgDemote; SCALE_T sigmoidScaleIn; SCALE_T sigmoidScaleOut; SCALE_T pC1AddBh; SCALE_T Bh; SCALE_T pC1AddBhOut; + SCALE_T pC1AddBhDemote; SCALE_T tanhScaleIn; SCALE_T tanhScaleOut; SCALE_T gateHDHiddenState; @@ -100,35 +105,38 @@ typedef struct Q_FastGRNN_LR_Scales { SCALE_T pC3AddPC1; SCALE_T pC1AddPC3; SCALE_T hiddenStateOut; - INT_T sigmoidLimit; - INT_T div; - INT_T add; - INT_T qOne; -} Q_FastGRNN_LR_Scales; + SCALE_T hiddenStateDemote; + Q15_T sigmoidLimit; + Q15_T div; + Q15_T add; + Q15_T qOne; + ITER_T useTableSigmoid; + ITER_T useTableTanH; +} Q15_FastGRNN_LR_Scales; /** * @brief Buffers required for computation of low-rank FastGRNN -* @var preComp1 pointer to buffer space, must be initalized to atleast hiddenDims size -* @var preComp2 pointer to buffer space, must be initalized to atleast hiddenDims size -* @var preComp3 pointer to buffer space, must be initalized to atleast hiddenDims size -* @var tempLRW pointer to buffer space, must be initalized to atleast wRank size -* @var tempLRU pointer to buffer space, must be initalized to atleast uRank size -* @var normFeatures pointer to buffer space, must be initalized to atleast inputDims size +* @var preComp1 pointer to buffer space, must be initialized to atleast hiddenDims size +* @var preComp2 pointer to buffer space, must be initialized to atleast hiddenDims size +* @var preComp3 pointer to buffer space, must be initialized to atleast hiddenDims size +* @var tempLRW pointer to buffer space, must be initialized to atleast wRank size +* @var tempLRU pointer to buffer space, must be initialized to atleast uRank size +* @var normFeatures pointer to buffer space, must be initialized to atleast inputDims size */ -typedef struct Q_FastGRNN_LR_Buffers { - INT_T* preComp1; - INT_T* preComp2; - INT_T* preComp3; - INT_T* tempLRW; - INT_T* tempLRU; - INT_T* normFeatures; -} Q_FastGRNN_LR_Buffers; +typedef struct Q15_FastGRNN_LR_Buffers { + Q15_T* preComp1; + Q15_T* preComp2; + Q15_T* preComp3; + Q15_T* tempLRW; + Q15_T* tempLRU; + Q15_T* normFeatures; +} Q15_FastGRNN_LR_Buffers; /** - * @brief Multi-step updates of a FastGRNN cell with low rank W, U(W=W1*W2; U=U1*U2) + * @brief Multi-step updates of a FastGRNN cell with low rank W, U (W = W1 * W2; U = U1 * U2) * @param[in,out] hiddenState pointer to initial hidden state and output hidden state * @param[in] hiddenDims dimension of hidden state of the FastGRNN cell - * @param[in] input pointer to concatenated input vectors for all steps, size inputDims*steps + * @param[in] input pointer to concatenated input vectors for all steps, size inputDims * steps * @param[in] inputDims dimension of input vector for each step * @param[in] steps number of steps of FastGRNN cell * @param[in] params pointer to model parameter @@ -144,43 +152,56 @@ typedef struct Q_FastGRNN_LR_Buffers { * ERR_TEMPLRU_NOT_INIT if tempLRU not allocated * ERR_NORMFEAT_NOT_INIT if normFeatures not allocated */ -int q_fastgrnn_lr(INT_T* const hiddenState, ITER_T hiddenDims, - const INT_T* const input, ITER_T inputDims, ITER_T steps, - const void* params, void* buffers, const void* scales, - int backward, int normalize); +int q15_fastgrnn_lr(Q15_T* const hiddenState, ITER_T hiddenDims, + const Q15_T* const input, ITER_T inputDims, ITER_T steps, + const void* params, void* buffers, const void* scales, + int backward, int normalize); /** - * @brief Model paramters for low-rank FastGRNN + * @brief Model paramters for FastGRNN * @var mean pointer to mean of input vector for normalization, size inputDims - * @var stdDev pointer to standard dev of input for normalization, size inputDims*steps + * @var stdDev pointer to standard dev of input for normalization, size inputDims * steps * @var W pointer to W matrix * @var U pointer U matrix - * @var Bg pointer to bias for sigmoid - * @var Bh pointer to bias for tanh + * @var Bg pointer to bias for Sigmoid + * @var Bh pointer to bias for TanH * @var sigmoid_zeta first weight parameter for update from input from next step * @var sigmoid_nu second weight parameter for update from input from next step */ -typedef struct Q_FastGRNN_Params { - INT_T* mean; - INT_T* stdDev; - INT_T* W; - INT_T* U; - INT_T* Bg; - INT_T* Bh; - INT_T sigmoid_zeta; - INT_T sigmoid_nu; -} Q_FastGRNN_Params; +typedef struct Q15_FastGRNN_Params { + const Q15_T* mean; + const Q15_T* stdDev; + const Q15_T* W; + const Q15_T* U; + const Q15_T* Bg; + const Q15_T* Bh; + Q15_T sigmoid_zeta; + Q15_T sigmoid_nu; +} Q15_FastGRNN_Params; + +typedef struct Q7xQ15_FastGRNN_Params { + const Q7_T* mean; + const Q7_T* stdDev; + const Q15_T* W; + const Q15_T* U; + const Q15_T* Bg; + const Q15_T* Bh; + Q15_T sigmoid_zeta; + Q15_T sigmoid_nu; +} Q7xQ15_FastGRNN_Params; /** - * @brief Model scales for different inputs. The naming convention follows - * two basic rules: - * 1) If the matrix for which the scale is associated is used only once, name + * @brief Model scales and flags for different inputs. The naming convention + * follows three basic rules: + * 1) If the variable for which the scale is associated is used only once, name * the scale after the matrix. - * 2) If the matrix for which the scale is associated is used only once, name - * the scale after the matrix, the operation it is being used under and the - * matrix it is being operated with. + * 2) If the variable for which the scale is associated is used more than once, + * name the scale after the matrix, the operation it is being used under and + * the matrix it is being operated with. + * 3) For flag variables, simply name them after the operation for which they + * are intended. */ -typedef struct Q_FastGRNN_Scales { +typedef struct Q15_FastGRNN_Scales { SCALE_T input; SCALE_T mean; SCALE_T meanSub; @@ -197,14 +218,17 @@ typedef struct Q_FastGRNN_Scales { SCALE_T mV1AddMV2; SCALE_T mV2AddMV1; SCALE_T mV1AddMV2Out; + SCALE_T mV1AddMV2Demote; SCALE_T pC1AddBg; SCALE_T Bg; SCALE_T pC1AddBgOut; + SCALE_T pC1AddBgDemote; SCALE_T sigmoidScaleIn; SCALE_T sigmoidScaleOut; SCALE_T pC1AddBh; SCALE_T Bh; SCALE_T pC1AddBhOut; + SCALE_T pC1AddBhDemote; SCALE_T tanhScaleIn; SCALE_T tanhScaleOut; SCALE_T gateHDHiddenState; @@ -222,31 +246,41 @@ typedef struct Q_FastGRNN_Scales { SCALE_T pC3AddPC1; SCALE_T pC1AddPC3; SCALE_T hiddenStateOut; - INT_T div; - INT_T add; - INT_T sigmoidLimit; - INT_T qOne; -} Q_FastGRNN_Scales; + SCALE_T hiddenStateDemote; + Q15_T div; + Q15_T add; + Q15_T sigmoidLimit; + Q15_T qOne; + ITER_T useTableSigmoid; + ITER_T useTableTanH; +} Q15_FastGRNN_Scales; /** * @brief Buffers required for computation of FastGRNN -* @var preComp1 pointer to buffer space, must be initalized to atleast hiddenDims size -* @var preComp2 pointer to buffer space, must be initalized to atleast hiddenDims size -* @var preComp3 pointer to buffer space, must be initalized to atleast hiddenDims size -* @var normFeatures pointer to buffer space, must be initalized to atleast inputDims size +* @var preComp1 pointer to buffer space, must be initialized to atleast hiddenDims size +* @var preComp2 pointer to buffer space, must be initialized to atleast hiddenDims size +* @var preComp3 pointer to buffer space, must be initialized to atleast hiddenDims size +* @var normFeatures pointer to buffer space, must be initialized to atleast inputDims size */ -typedef struct Q_FastGRNN_Buffers { - INT_T* preComp1; - INT_T* preComp2; - INT_T* preComp3; - INT_T* normFeatures; -} Q_FastGRNN_Buffers; +typedef struct Q15_FastGRNN_Buffers { + Q15_T* preComp1; + Q15_T* preComp2; + Q15_T* preComp3; + Q15_T* normFeatures; +} Q15_FastGRNN_Buffers; + +typedef struct Q7xQ15_FastGRNN_Buffers { + Q15_T* preComp1; + Q15_T* preComp2; + Q15_T* preComp3; + Q7_T* normFeatures; +} Q7xQ15_FastGRNN_Buffers; /** * @brief Multi-step updates of a FastGRNN cell * @param[in,out] hiddenState pointer to initial hidden state and output hidden state * @param[in] hiddenDims dimension of hidden state of the FastGRNN cell - * @param[in] input pointer to concatenated input vectors for all steps, size inputDims*steps + * @param[in] input pointer to concatenated input vectors for all steps, size inputDims * steps * @param[in] inputDims dimension of input vector for each step * @param[in] steps number of steps of FastGRNN cell * @param[in] params pointer to model parameter @@ -259,11 +293,13 @@ typedef struct Q_FastGRNN_Buffers { * ERR_PRECOMP_NOT_INIT if preComp2 not allocated * ERR_PRECOMP_NOT_INIT if preComp3 not allocated * ERR_NORMFEAT_NOT_INIT if normFeatures not allocated - * @example Please refer the file: c_reference/tests/fastgrnn/test_quantized_fastgrnn.c + * @example Please refer the file: c_reference/tests/fastgrnn/test_quantized_fastgrnn.c */ -int q_fastgrnn(INT_T* const hiddenState, ITER_T hiddenDims, - const INT_T* const input, ITER_T inputDims, ITER_T steps, - const void* params, void* buffers, const void* scales, - int backward, int normalize); +int q7xq15_q15_fastgrnn(Q15_T* const hiddenState, ITER_T hiddenDims, + const Q7_T* const input, ITER_T inputDims, ITER_T steps, const void* params, + void* buffers, const void* scales, int backward, int normalize); +int q15_fastgrnn(Q15_T* const hiddenState, ITER_T hiddenDims, + const Q15_T* const input, ITER_T inputDims, ITER_T steps, const void* params, + void* buffers, const void* scales, int backward, int normalize); #endif diff --git a/c_reference/include/quantized_mbconv.h b/c_reference/include/quantized_mbconv.h index dca713ef8..bb1565e63 100644 --- a/c_reference/include/quantized_mbconv.h +++ b/c_reference/include/quantized_mbconv.h @@ -22,7 +22,6 @@ * @param[out] output pointer to the output buffer * @param[in] convBuffer1 pointer to the buffer used for storing intermediate values for the first Convolution * @param[in] convBuffer2 pointer to the buffer used for storing intermediate values for the second Convolution - * @param[in] treesumBuffer pointer to the buffer used for storing intermediate values for TreeSum * @param[in] N number of batches passed to the layer * @param[in] H height of a single input tensor * @param[in] W width of a single input tensor @@ -39,28 +38,19 @@ * @param[in] WPadR pad to the right of the input tensor, along its width dimension * @param[in] HStride stride of the filter along the height dimension * @param[in] WStride stride of the filter along the height dimension - * @param[in] depth1 depth of the first TreeSum computation - * @param[in] depth2 depth of the second TreeSum computation - * @param[in] depth3 depth of the third TreeSum computation * @param[in] limit1 maximum output value of the first relu_six computation * @param[in] limit2 maximum output value of the first relu_six computation * @param[in] shrU1 scale to divide the first TreeSum output by - * @param[in] shrB1 scale to divide the first BatchNorm addition factor by * @param[in] shrX1 scale to divide the first Convolution output by * @param[in] shrU2 scale to divide the second TreeSum output by - * @param[in] shrB2 scale to divide the second BatchNorm addition factor by * @param[in] shrX2 scale to divide the second Convolution output by * @param[in] shrU3 scale to divide the third TreeSum output by - * @param[in] shrB3 scale to divide the third BatchNorm addition factor by * @param[in] shrW3 scale to divide the third Convolution output by * @param[in] shlU1 scale to multiply with the first TreeSum output - * @param[in] shlB1 scale to multiply with the first BatchNorm addition factor * @param[in] shlX1 scale to multiply with the first Convolution output * @param[in] shlU2 scale to multiply with the second TreeSum output - * @param[in] shlB2 scale to multiply with the second BatchNorm addition factor * @param[in] shlX2 scale to multiply with the second Convolution output * @param[in] shlU3 scale to multiply with the third TreeSum output - * @param[in] shlB3 scale to multiply with the third BatchNorm addition factor * @param[in] shlW3 scale to multiply with the third Convolution output * @return none * @@ -68,24 +58,64 @@ * 1) Convolution(input, filter1) -> Batch Normalization(BN1W, BN1B) -> ReLU(limit1) -> convBuffer1 * 2) Depthwise Separable Convolution(convBuffer1, filter2) -> Batch Normalization(BN2W, BN2B) -> ReLU(limit2) -> convBuffer2 * 3) Convolution(convBuffer2, filter3) -> Batch Normalization(BN3W, BN3B) -> output - * Variables depth1, depth2 and depth3 are used along with treesumBuffer for accumulating the sums during convolutions. * Rest of the variables are used as indicated. * * @example Please refer the file: c_reference/tests/mbconv/test_quantized_mbconv.c */ -void q_mbconv_block(const INT_T* const input, const INT_T* const filter1, - const INT_T* const BN1W, const INT_T* const BN1B, const INT_T* const filter2, - const INT_T* const BN2W, const INT_T* const BN2B, const INT_T* const filter3, - const INT_T* const BN3W, const INT_T* const BN3B, INT_T* const output, - INT_T* const convBuffer1, INT_T* const convBuffer2, INTM_T* const treesumBuffer, +void q7_mbconv_block(const Q7_T* const input, const Q7_T* const filter1, + const Q7_T* const BN1W, const Q7_T* const BN1B, const Q7_T* const filter2, + const Q7_T* const BN2W, const Q7_T* const BN2B, const Q7_T* const filter3, + const Q7_T* const BN3W, const Q7_T* const BN3B, Q7_T* const output, + Q7_T* const convBuffer1, Q7_T* const convBuffer2, ITER_T N, ITER_T H, + ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, ITER_T COut, + ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, + S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q15_T limit1, Q15_T limit2, + SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, SCALE_T shrU3, + SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, SCALE_T shlX2, + SCALE_T shlU3, SCALE_T shlW3); +void q7xq15_q15_mbconv_block(const Q7_T* const input, + const Q15_T* const filter1, const Q15_T* const BN1W, const Q15_T* const BN1B, + const Q15_T* const filter2, const Q15_T* const BN2W, const Q15_T* const BN2B, + const Q15_T* const filter3, const Q15_T* const BN3W, const Q15_T* const BN3B, + Q15_T* const output, Q15_T* const convBuffer1, Q15_T* const convBuffer2, ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, ITER_T COut, ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, - S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, SCALE_T depth1, - SCALE_T depth2, SCALE_T depth3, INTM_T limit1, INTM_T limit2, L_SCALE_T shrU1, - L_SCALE_T shrB1, L_SCALE_T shrX1, L_SCALE_T shrU2, L_SCALE_T shrB2, - L_SCALE_T shrX2, L_SCALE_T shrU3, L_SCALE_T shrB3, L_SCALE_T shrW3, - L_SCALE_T shlU1, L_SCALE_T shlB1, L_SCALE_T shlX1, L_SCALE_T shlU2, - L_SCALE_T shlB2, L_SCALE_T shlX2, L_SCALE_T shlU3, L_SCALE_T shlB3, - L_SCALE_T shlW3); + S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q31_T limit1, + Q31_T limit2, SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, + SCALE_T shrU3, SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, + SCALE_T shlX2, SCALE_T shlU3, SCALE_T shlW3); +void q15xq7_q7_mbconv_block(const Q15_T* const input, + const Q7_T* const filter1, const Q7_T* const BN1W, const Q15_T* const BN1B, + const Q7_T* const filter2, const Q7_T* const BN2W, const Q15_T* const BN2B, + const Q7_T* const filter3, const Q7_T* const BN3W, const Q15_T* const BN3B, + Q7_T* const output, Q15_T* const convBuffer1, Q15_T* const convBuffer2, + ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, + ITER_T COut, ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, + S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q31_T limit1, + Q31_T limit2, SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, + SCALE_T shrU3, SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, + SCALE_T shlX2, SCALE_T shlU3, SCALE_T shlW3); +void q15xq7_q15_mbconv_block(const Q15_T* const input, + const Q7_T* const filter1, const Q7_T* const BN1W, const Q15_T* const BN1B, + const Q7_T* const filter2, const Q7_T* const BN2W, const Q15_T* const BN2B, + const Q7_T* const filter3, const Q7_T* const BN3W, const Q15_T* const BN3B, + Q15_T* const output, Q15_T* const convBuffer1, Q15_T* const convBuffer2, + ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, + ITER_T COut, ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, + S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q31_T limit1, + Q31_T limit2, SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, + SCALE_T shrU3, SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, + SCALE_T shlX2, SCALE_T shlU3, SCALE_T shlW3); +void q15_mbconv_block(const Q15_T* const input, const Q15_T* const filter1, + const Q15_T* const BN1W, const Q15_T* const BN1B, const Q15_T* const filter2, + const Q15_T* const BN2W, const Q15_T* const BN2B, const Q15_T* const filter3, + const Q15_T* const BN3W, const Q15_T* const BN3B, Q15_T* const output, + Q15_T* const convBuffer1, Q15_T* const convBuffer2, ITER_T N, ITER_T H, + ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, ITER_T COut, + ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, + S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q31_T limit1, Q31_T limit2, + SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, SCALE_T shrU3, + SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, SCALE_T shlX2, + SCALE_T shlU3, SCALE_T shlW3); #endif diff --git a/c_reference/include/quantized_rnnpool.h b/c_reference/include/quantized_rnnpool.h index bf97c2ede..71ba3f844 100644 --- a/c_reference/include/quantized_rnnpool.h +++ b/c_reference/include/quantized_rnnpool.h @@ -4,15 +4,17 @@ #ifndef __QUANTIZED_RNNPOOL_H__ #define __QUANTIZED_RNNPOOL_H__ -#include "quantized_datatypes.h" +#include "quantized_utils.h" -typedef int (*q_rnn_t)(INT_T* const, ITER_T, const INT_T* const, ITER_T, ITER_T, const void*, void*, const void*, int, int); +typedef int (*q7xq15_q15_rnn_t)(Q15_T* const, ITER_T, const Q7_T* const, ITER_T, ITER_T, const void*, void*, const void*, int, int); +typedef int (*q15_rnn_t)(Q15_T* const, ITER_T, const Q15_T* const, ITER_T, ITER_T, const void*, void*, const void*, int, int); /** + * @brief Block implementation of RNNPool operator * @param[in] patch pointer to activation of patch (row, col, channel) - * @param[in] inputDims dimemsion of each input pixel + * @param[in] inputDims dimension of each input pixel * @param[in] patchDim number of rows and columns in a square patch - * @param[in] stride stride lenghth in the larger image to get to next row + * @param[in] stride stride length in the larger image to get to next row * @param[in] rnn1 function pointer to RNN1 * @param[in] hiddenDims1 dimension of the hidden state of RNN1 * @param[in] rnn1_params pointer to parameters of RNN1 @@ -24,16 +26,21 @@ typedef int (*q_rnn_t)(INT_T* const, ITER_T, const INT_T* const, ITER_T, ITER_T, * @param[in] rnn2_buffers pointer to buffers needed for RNN2 * @param[in] rnn2_scales pointer to the scales needed for RNN2 * @param[out] output pointer to output, initialized to size 4 * hiddenDims2 - * @param[in,out] buffer pointer to buffer, intialized to size hiddenDims1 * max{nrows, cols} + * @param[in] buffer pointer to buffer, initialized to size hiddenDims1 * max{nrows, cols} * @return none * @example Please refer the file: c_reference/tests/rnnpool/test_quantized_rnnpool.c */ -int q_rnnpool_block(const INT_T* const patch, ITER_T inputDims, ITER_T patchDim, - ITER_T stride, q_rnn_t rnn1, ITER_T hiddenDims1, - const void* rnn1_params, void* rnn1_buffers, - const void* rnn1_scales, q_rnn_t rnn2, - ITER_T hiddenDims2, const void* rnn2_params, - void* rnn2_buffers, const void* rnn2_scales, - INT_T* const output, INT_T* const buffer); +int q7xq15_q15_rnnpool_block(const Q7_T* const patch, ITER_T inputDims, + ITER_T patchDim, ITER_T stride, q7xq15_q15_rnn_t rnn1, ITER_T hiddenDims1, + const void* rnn1_params, void* rnn1_buffers, const void* rnn1_scales, + q15_rnn_t rnn2, ITER_T hiddenDims2, const void* rnn2_params, + void* rnn2_buffers, const void* rnn2_scales, Q15_T* const output, + Q15_T* const buffer, SCALE_T ShR1, SCALE_T ShL1, SCALE_T ShR2, SCALE_T ShL2); +int q15_rnnpool_block(const Q15_T* const patch, ITER_T inputDims, + ITER_T patchDim, ITER_T stride, q15_rnn_t rnn1, ITER_T hiddenDims1, + const void* rnn1_params, void* rnn1_buffers, const void* rnn1_scales, + q15_rnn_t rnn2, ITER_T hiddenDims2, const void* rnn2_params, + void* rnn2_buffers, const void* rnn2_scales, Q15_T* const output, + Q15_T* const buffer, SCALE_T ShR1, SCALE_T ShL1, SCALE_T ShR2, SCALE_T ShL2); #endif diff --git a/c_reference/include/quantized_utils.h b/c_reference/include/quantized_utils.h index cf8a7c8bc..a671c0399 100644 --- a/c_reference/include/quantized_utils.h +++ b/c_reference/include/quantized_utils.h @@ -8,21 +8,21 @@ #include "quantized_datatypes.h" // Function for saturating the input to the required format. -// This function isn't used currently because of SeeDot generated scales +// This function isn't used actively because of SeeDot generated scales // ensuring the overflows aren't a possibility. -inline INT_T saturate(INTM_T inp) { - if (inp > INT_TMAX){ - return (INT_T)INT_TMAX; - } else if (inp < INT_TMIN) { - return (INT_T)INT_TMIN; +static inline Q15_T q15_saturate(Q31_T inp) { + if (inp > Q15_TMAX){ + return (Q15_T)Q15_TMAX; + } else if (inp < Q15_TMIN) { + return (Q15_T)Q15_TMIN; } else { - return (INT_T)inp; + return (Q15_T)inp; } } -// This function is used to provide a truncation of input to a specific +// These functions are used to provide a truncation of input to a specific // range within the ReLU operation. -inline INTM_T q_relu(INTM_T inp, INTM_T limit) { +static inline Q7_T q7_relu(Q7_T inp, Q7_T limit) { if (inp > limit){ return limit; } else if (inp < 0) { @@ -32,20 +32,37 @@ inline INTM_T q_relu(INTM_T inp, INTM_T limit) { } } -/** - * @brief Compute TreeSum from a given vector holding intermediate multiplications, and store the result in the first index of the input vector. - * @param[in, out] vec pointer to vector on which TreeSum operation is to be computed - * @param[in] len length of the input vector - * @param[in] H1 depth parameter for division-by-two used in TreeSum - * @param[in] H2 depth parameter for direct sum used in TreeSum - * @return none - * @example vec = {-425, -169, -3534, 524, -2739, 87, 52, 292} - * len = 8 - * H1 = 3 - * H2 = 0 - * vec[0] = {-738} - */ -void v_q_treesum(INTM_T* const vec, ITER_T len, SCALE_T H1, SCALE_T H2); +static inline Q15_T q15_relu(Q15_T inp, Q15_T limit) { + if (inp > limit){ + return limit; + } else if (inp < 0) { + return 0; + } else { + return inp; + } +} + +static inline Q31_T q31_relu(Q31_T inp, Q31_T limit) { + if (inp > limit){ + return limit; + } else if (inp < 0) { + return 0; + } else { + return inp; + } +} + +static const Q15_T exp_table_A[256] = {16384, 15391, 14459, 13583, 12760, 11987, 11261, 10578, 9937, 9335, 8770, 8238, 7739, 7270, 6830, 6416, 6027, 5662, 5319, 4997, 4694, 4410, 4143, 3892, 3656, 3434, 3226, 3031, 2847, 2675, 2513, 2360, 2217, 2083, 1957, 1838, 1727, 1622, 1524, 1432, 1345, 1263, 1187, 1115, 1047, 984, 924, 868, 816, 766, 720, 676, 635, 597, 561, 527, 495, 465, 437, 410, 385, 362, 340, 319, 300, 282, 265, 249, 234, 220, 206, 194, 182, 171, 161, 151, 142, 133, 125, 118, 110, 104, 97, 92, 86, 81, 76, 71, 67, 63, 59, 56, 52, 49, 46, 43, 41, 38, 36, 34, 32, 30, 28, 26, 25, 23, 22, 20, 19, 18, 17, 16, 15, 14, 13, 12, 12, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +static const Q15_T exp_table_B[128] = {16384, 16376, 16368, 16360, 16352, 16344, 16336, 16328, 16320, 16312, 16304, 16296, 16288, 16280, 16272, 16264, 16256, 16249, 16241, 16233, 16225, 16217, 16209, 16201, 16193, 16185, 16177, 16169, 16162, 16154, 16146, 16138, 16130, 16122, 16114, 16106, 16099, 16091, 16083, 16075, 16067, 16059, 16051, 16044, 16036, 16028, 16020, 16012, 16004, 15997, 15989, 15981, 15973, 15965, 15958, 15950, 15942, 15934, 15927, 15919, 15911, 15903, 15895, 15888, 15880, 15872, 15864, 15857, 15849, 15841, 15833, 15826, 15818, 15810, 15803, 15795, 15787, 15779, 15772, 15764, 15756, 15749, 15741, 15733, 15726, 15718, 15710, 15703, 15695, 15687, 15680, 15672, 15664, 15657, 15649, 15641, 15634, 15626, 15618, 15611, 15603, 15596, 15588, 15580, 15573, 15565, 15558, 15550, 15542, 15535, 15527, 15520, 15512, 15504, 15497, 15489, 15482, 15474, 15467, 15459, 15452, 15444, 15437, 15429, 15421, 15414, 15406, 15399}; + +static inline Q15_T exp_base_16(Q15_T inp, Q15_T scale) { + Q15_T val = (inp == -32768) ? 32767 : -inp; + Q15_T val1 = val % 128; + val >>= 7; + Q31_T ret = (Q31_T)exp_table_A[val] * (Q31_T)exp_table_B[val1]; + return (Q15_T)((ret / scale) >> 14); +} + /** * @brief Compute the element-wise addition between two vectors. * @param[in] vec1 pointer to the first input vector @@ -55,6 +72,7 @@ void v_q_treesum(INTM_T* const vec, ITER_T len, SCALE_T H1, SCALE_T H2); * @param[in] scvec1 scale factor of the first input vector * @param[in] scvec2 scale factor of the second input vector * @param[in] scret scale factor of the output vector + * @param[in] demote scale factor for output variable demotion * @return none * @example vec1 = {-425, -169, -3534, 524, -2739, 87, 52, 292} * vec2 = {-18777, -9518, 4055, -7309, 8584, -17257, -5280, -7933} @@ -62,10 +80,11 @@ void v_q_treesum(INTM_T* const vec, ITER_T len, SCALE_T H1, SCALE_T H2); * scvec1 = 1 * scvec2 = 8 * scret = 1 + * demote = 1 * ret = {-2772, -1358, -3028, -389, -1666, -2070, -608, -699} */ -void v_q_add(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, - INT_T* const ret, SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret); +void q15_v_add(const Q15_T* vec1, const Q15_T* vec2, ITER_T len, Q15_T* ret, + SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret, SCALE_T demote); /** * @brief Compute the element-wise subtraction between two vectors. * @param[in] vec1 pointer to the first input vector @@ -84,8 +103,10 @@ void v_q_add(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, * scret = 1 * ret = {1922, 1020, -4040, 1437, -3812, 2244, 712, 1283} */ -void v_q_sub(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, - INT_T* const ret, SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret); +void q7_v_sub(const Q7_T* vec1, const Q7_T* vec2, ITER_T len, Q7_T* ret, + SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret); +void q15_v_sub(const Q15_T* vec1, const Q15_T* vec2, ITER_T len, Q15_T* ret, + SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret); /** * @brief Compute the element-wise product (also known as Hadamard product) between two vectors. * @param[in] vec1 pointer to the first input vector @@ -102,8 +123,10 @@ void v_q_sub(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, * scvec2 = 64 * ret = {1423, 7085, -16378, 8209, -12067, 6805, 6475, 6897} */ -void v_q_hadamard(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, - INT_T* const ret, SCALE_T scvec1, SCALE_T scvec2); +void q7_v_hadamard(const Q7_T* vec1, const Q7_T* vec2, ITER_T len, Q7_T* ret, + SCALE_T scvec1, SCALE_T scvec2); +void q15_v_hadamard(const Q15_T* vec1, const Q15_T* vec2, ITER_T len, Q15_T* ret, + SCALE_T scvec1, SCALE_T scvec2); /** * @brief Compute the element-wise Sigmoid activation on the input vector. * @param[in] vec pointer to the input vector @@ -114,8 +137,9 @@ void v_q_hadamard(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, * @param[in] sigmoid_limit saturation limit for the Sigmoid activation * @param[in] scale_in scale factor of the input vector * @param[in] scale_out scale factor of the output vector + * @param[in] use_tables flag for using pre-computed (base 16) exp tables for calculating Sigmoid on the input * @return none - * @example formula = saturate(0, (vec_{i} / div) + add, sigmoid_limit) * 2^{scale_out - scale_in} + * @example formula = saturate(0, (vec_{i} / div) + add, sigmoid_limit) * 2^{scale_out - scale_in} (use_tables set to 0) * vec = {-2772, -1358, -3028, -389, -1666, -2070, -608, -699} * len = 8 * div = 2 @@ -123,27 +147,31 @@ void v_q_hadamard(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, * sigmoid_limit = 2048 * scale_in = 11 * scale_out = 14 + * use_tables = 0 * ret = {0, 2760, 0, 6640, 1528, 0, 5760, 5400} */ -void v_q_sigmoid(const INT_T* const vec, ITER_T len, INT_T* const ret, INT_T div, - INT_T add, INT_T sigmoid_limit, SCALE_T scale_in, SCALE_T scale_out); +void q15_v_sigmoid(const Q15_T* vec, ITER_T len, Q15_T* ret, Q15_T div, + Q15_T add, Q15_T sigmoid_limit, SCALE_T scale_in, + SCALE_T scale_out, ITER_T use_tables); /** * @brief Compute the element-wise TanHyperbolic activation on the input vector. - * @param[in] vec pointer to the input vector - * @param[in] len length of the input vector - * @param[out] ret pointer to the vector storing the output - * @param[in] scale_in scale factor of the input vector - * @param[in] scale_out scale factor of the output vector + * @param[in] vec pointer to the input vector + * @param[in] len length of the input vector + * @param[out] ret pointer to the vector storing the output + * @param[in] scale_in scale factor of the input vector + * @param[in] scale_out scale factor of the output vector + * @param[in] use_tables flag for using pre-computed (base 16) exp tables for calculating TanH on the input * @return none - * @example formula = saturate(-2^{scale_in}, vec_{i}, 2^{scale_in}) * 2^{scale_out - scale_in} - * vec = {178, 1064, -4162, 1718, -1663, 851, 1244, 1282} - * len = 8 - * scale_in = 11 - * scale_out = 11 - * ret = {178, 1064, -2048, 1718, -1663, 851, 1244, 1282} + * @example formula = saturate(-2^{scale_in}, vec_{i}, 2^{scale_in}) * 2^{scale_out - scale_in} (use_tables set to 0) + * vec = {178, 1064, -4162, 1718, -1663, 851, 1244, 1282} + * len = 8 + * scale_in = 11 + * scale_out = 11 + * use_tables = 0 + * ret = {178, 1064, -2048, 1718, -1663, 851, 1244, 1282} */ -void v_q_tanh(const INT_T* const vec, ITER_T len, INT_T* const ret, - SCALE_T scale_in, SCALE_T scale_out); +void q15_v_tanh(const Q15_T* vec, ITER_T len, Q15_T* ret, SCALE_T scale_in, + SCALE_T scale_out, ITER_T use_tables); /** * @brief Compute the addition of a scalar to every element of a vector. * @param[in] scalar the input scalar to be added to a vector @@ -162,8 +190,8 @@ void v_q_tanh(const INT_T* const vec, ITER_T len, INT_T* const ret, * scret = 1 * ret = {16378, 13638, 16378, 9787, 14861, 16378, 10661, 11018} */ -void v_q_scalar_add(INT_T scalar, const INT_T* const vec, ITER_T len, - INT_T* const ret, SCALE_T scscalar, SCALE_T scvec, SCALE_T scret); +void q15_v_scalar_add(Q15_T scalar, const Q15_T* vec, ITER_T len, Q15_T* ret, + SCALE_T scscalar, SCALE_T scvec, SCALE_T scret); /** * @brief Compute the subtraction of every element of a vector (B) from a scalar (a). The resultant vector has elements C_{i} = a - B_{i}. * @param[in] scalar the input scalar @@ -182,28 +210,8 @@ void v_q_scalar_add(INT_T scalar, const INT_T* const vec, ITER_T len, * scret = 1 * ret = {16384, 13624, 16384, 9744, 14856, 16384, 10624, 10984} */ -void v_q_scalar_sub(INT_T scalar, const INT_T* const vec, ITER_T len, - INT_T* const ret, SCALE_T scscalar, SCALE_T scvec, SCALE_T scret); -/** - * @brief Compute the subtraction of a scalar (b) from every element of a vector (A). The resultant vector has elements C_{i} = A_{i} - b. - * @param[in] scalar the input scalar to be subtracted - * @param[in] vec pointer to the input vector - * @param[in] len length of the input vector - * @param[out] ret pointer to the vector storing the output - * @param[in] scscalar scale factor of the input scalar - * @param[in] scvec scale factor of the input vector - * @param[in] scret scale factor of the output vector - * @return none - * @example scalar = 16384 - * vec = {0, 2760, 0, 6640, 1528, 0, 5760, 5400} - * len = 8 - * scscalar = 1 - * scvec = 1 - * scret = 1 - * ret = {-16384, -13624, -16384, -9744, -14856, -16384, -10624, -10984} - */ -void v_q_sub_scalar(const INT_T* const vec, INT_T scalar, ITER_T len, - INT_T* const ret, SCALE_T scvec, SCALE_T scscalar, SCALE_T scret); +void q15_v_scalar_sub(Q15_T scalar, const Q15_T* vec, ITER_T len, Q15_T* ret, + SCALE_T scscalar, SCALE_T scvec, SCALE_T scret); /** * @brief Compute the multiplication of a scalar to every element of a vector. * @param[in] scalar the input scalar to be multiplied @@ -220,8 +228,8 @@ void v_q_sub_scalar(const INT_T* const vec, INT_T scalar, ITER_T len, * scvec = 256 * ret = {16261, 13521, 16261, 9670, 14744, 16261, 10544, 10901} */ -void v_q_scalar_mul(INT_T scalar, const INT_T* const vec, ITER_T len, - INT_T* const ret, SCALE_T scscalar, SCALE_T scvec); +void q15_v_scalar_mul(Q15_T scalar, const Q15_T* vec, ITER_T len, Q15_T* ret, + SCALE_T scscalar, SCALE_T scvec); /** * @brief Finds the index of largest element in a vector. * @param[in] vec pointer to input vector @@ -229,149 +237,37 @@ void v_q_scalar_mul(INT_T scalar, const INT_T* const vec, ITER_T len, * @param[out] ret pointer variable storing the index of the largest element in the vector * @return none * @example vec = {12, 24, 54, 1, 2, 10} + * len = 6 * *ret = 2 */ -void v_q_argmax(const INT_T* const vec, ITER_T len, ITER_T* const ret); -/** - * @brief Replace any negative element present in the vector withs zero. - * Note: No saturation is done here, and hence, the output might overflow with a large input. - * @param[in, out] vec pointer to vector on which element-wise ReLU operation is to be applied - * @param[in] len length of the input vector - * @return none - * @example vec = {1324, -5453, 3454, -3435, 8789} - * len = 4 - * vec = {1324, 0, 3454, 0, 8789} - */ -void v_q_relu(INT_T* const vec, ITER_T len); -/** - * @brief Computes exponentiation of all elements in the vec (interpreted as a floating-point value) to the base e and stores the result in ret. - * Note: No saturation is done here, and hence, the output might overflow with a large input. - * @param[in] vec pointer to vector whose exponential scaling is to be performed - * @param[in] len length of the vector - * @param[in] scvec scaling factor for input vector - * @param[in] scret scaling factor for output vector - * @param[out] ret pointer to the output vector - * @return none - * @example formula = exp((float)vec_{i} / scvec) * scret - * vec = {13, 54, 34, 35, 87} - * len = 5 - * scvec = 8 - * scret = 8 - * ret = {40, 6832, 560, 635, 29493} - */ -void v_q_exp(const INT_T* const vec, ITER_T len, INT_T* const ret, - SCALE_T scvec, SCALE_T scret); +void q15_v_argmax(const Q15_T* const vec, ITER_T len, ITER_T* const ret); /** * @brief Performs element-wise up-scaling on a vector. - * @param[in, out] vec pointer to the vector on which up-scaling is to be performed + * @param[in] vec pointer to the vector on which up-scaling is to be performed * @param[in] len length of the vector + * @param[out] ret pointer to the output vector * @param[in] scvec scaling factor of the vector * @return none * @example vec = {423, -987, -2342, 1232} * len = 4 * scvec = 10 - * mat = {4230, -9870, -23420, 12320} + * ret = {4230, -9870, -23420, 12320} */ -void v_q_scale_up(INT_T* const vec, ITER_T len, SCALE_T scvec); +void q15_v_scale_up(const Q15_T* vec, ITER_T len, Q15_T* ret, SCALE_T scvec); /** * @brief Performs element-wise down-scaling on a vector. - * @param[in, out] vec pointer to the vector on which down-scaling is to be performed + * @param[in] vec pointer to the vector on which down-scaling is to be performed * @param[in] len length of the vector + * @param[out] ret pointer to the output vector * @param[in] scvec scaling factor of the vector * @return none * @example vec = {4232, -9879, -2342, 1232} * len = 4 * scvec = 37 - * mat = {114, -267, -63, 33} + * ret = {114, -267, -63, 33} */ -void v_q_scale_down(INT_T* const vec, ITER_T len, SCALE_T scvec); +void q15_v_scale_down(const Q15_T* vec, ITER_T len, Q15_T* ret, SCALE_T scvec); -/** - * @brief Performs the transpose on the input matrix. - * @param[in] mat pointer to the input matrix which is to be transposed - * @param[in] nrows number of rows of output matrix - * @param[in] ncols number of columns of output matrix - * @param[out] ret pointer to the output matrix which will hold the transpose - * @return none - * @example mat = { {1, 2}, - * {4, 5} } - * ret = { {1, 4}, - * {2, 5} } - * - * @example mat = { {1, 2, 3}, - * {4, 5, 6} } - * ret = { {1, 4}, - * {2, 5}, - * {3, 6} } - */ -void m_q_transpose(const INT_T* const mat, ITER_T nrows, ITER_T ncols, - INT_T* const ret); -/** - * @brief Performs the row-order or the column-order reversal of the 2-D input matrix. - * @param[in] mat pointer to the (row / column-major) input matrix on which reversal is to be performed - * @param[in] nrows number of rows of the input matrix - * @param[in] ncols number of columns of the input matrix - * @param[in] axis axis of reversal; 0 for reversal along rows and 1 for reversal along columns - * @param[out] mat_out pointer to the output matrix - * @return none - * @example mat = { {1, 2}, - * {4, 5} } - * nrows = 2 - * ncols = 2 - * axis = 0 - * ret = { {4, 5}, - * {1, 2} } - */ -void m_q_reverse(const INT_T* const mat, ITER_T nrows, ITER_T ncols, - ITER_T axis, INT_T* const ret); -/** - * @brief Performs the column-wise addition of a bias term to the input matrix. - * dim(mat) = dim(ret) = [nrows][ncols]; dim(vec) = [ncols]. - * @param[in] mat pointer to the input matrix on which addition is to be performed - * @param[in] vec pointer to the bias vector which is to be added - * @param[in] nrows number of rows of the input matrix - * @param[in] ncols number of columns of the input matrix - * @param[out] ret pointer to the output matrix - * @param[in] scmat scaling factor for the input matrix - * @param[in] scvec scaling factor for the bias vector - * @param[in] scret scaling factor for the output matrix - * @return none - * @example mat = {1324, 5453, 3454, 3435, 8789, 3411, 5412, 8934} - * vec = {8452, 2341, 9383, 2353} - * nrows = 4 - * ncols = 2 - * ret = {2775, 3311, 4072, 2305, 6507, 2290, 5051, 5055} - * scmat = 1 - * scvec = 2 - * scret = 2 - */ -void m_q_add_vec(const INT_T* const mat, const INT_T* const vec, - ITER_T nrows, ITER_T ncols, INT_T* const ret, - SCALE_T scmat, SCALE_T scvec, SCALE_T scret); -/** - * @brief Performs the column-wise subtraction of a bias term from the input matrix. - * dim(mat) = dim(ret) = [nrows][ncols]; dim(vec) = [ncols]. - * @param[in] mat pointer to the input matrix from which subtraction is to be performed - * @param[in] vec pointer to the bias vector which is to be subtracted - * @param[in] nrows number of rows of the input matrix - * @param[in] ncols number of columns of the input matrix - * @param[out] ret pointer to the output matrix - * @param[in] scmat scaling factor for the input matrix - * @param[in] scvec scaling factor for the bias vector - * @param[in] scret scaling factor for the output matrix - * @return none - * @example mat = {1324, 5453, 3454, 3435, 8789, 3411, 5412, 8934} - * vec = {8452, 2341, 9383, 2353} - * nrows = 4 - * ncols = 2 - * ret = {-1451, 2141, -618, 1129, 2281, 1120, 361, 3879} - * scmat = 1 - * scvec = 2 - * scret = 2 - */ -void m_q_sub_vec(const INT_T* const mat, const INT_T* const vec, - ITER_T nrows, ITER_T ncols, INT_T* const ret, - SCALE_T scmat, SCALE_T scvec, SCALE_T scret); /** * @brief Performs the matrix multiplication of a matrix and a vector. * @param[in] mat pointer to input matrix in row-major order @@ -402,147 +298,156 @@ void m_q_sub_vec(const INT_T* const mat, const INT_T* const vec, * H2 = 0 * ret = {-425, -169, -3534, 524, -2739, 87, 52, 292} */ -void m_q_mulvec(const INT_T* const mat, const INT_T* const vec, ITER_T nrows, - ITER_T ncols, INT_T* const ret, SCALE_T scmat, SCALE_T scvec, - SCALE_T H1, SCALE_T H2); -/** - * @brief Performs sparse matrix multiplication of a matrix and a vector. - * col_indices and mat_values combined are a sparse representation; dim(vec) = [ndims]. - * mat_values[i] is the i^th non-zero value of the input matrix, and col_indices[i] encodes the location of mat_values[i]. - * Number of zeroes before col_indices[i] : row of mat_values[i] - * col_indices[i - l] where l is the number of zeroes before col_indices[i]: column of mat_values[i] - * @param[in] col_indices pointer to input matrix which stores the column indices of non-zero values of matrix A - * @param[in] mat_values pointer to input matrix which stores the non-zero values of matrix A - * @param[in] vec pointer to the input vector - * @param[in] ndims dimension of the multiplication vector - * @param[out] ret pointer to the output vector - * @param[in] scmat scale factor of the input matrix - * @param[in] scvec scale factor of the input vector - * @param[in] scret scale factor of the output matrix - * @return none - * @example mat = { {10, 20, 30, 40, 50, 60, 70, 0, 0, 0, 0, 0, 0, 0}, - * {0, 80, 0, 90, 0, 100, 0, 110, 0, 120, 0, 130, 0, 140} } - * col_indices = {1, 2, 3, 4, 5, 6, 7, 0, 2, 4, 6, 8, 10, 12, 14, 0} - * mat_values = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140} - * vec = {1, 2} - * ndims = 2 - * scmat = 1 - * scvec = 2 - * scret = 4 - * ret = {1, 22, 3, 27, 6, 32, 8, 27, 0, 30, 0, 32, 0, 35} - */ -void m_q_sparse_mulvec(const ITER_T* const col_indices, const INT_T* const mat_values, - const INT_T* const vec, ITER_T ndims, INT_T* const ret, - SCALE_T scmat, SCALE_T scvec, SCALE_T scret); +void q15xq7_q15_m_mulvec(const Q15_T* mat, const Q7_T* const vec, ITER_T nrows, + ITER_T ncols, Q15_T* ret, SCALE_T scmat, + SCALE_T scvec, SCALE_T H1, SCALE_T H2); +void q15_m_mulvec(const Q15_T* mat, const Q15_T* const vec, ITER_T nrows, + ITER_T ncols, Q15_T* ret, SCALE_T scmat, SCALE_T scvec, + SCALE_T H1, SCALE_T H2); /** - * @brief Performs the channel-wise addition of a bias term to the input tensor. - * dim(mat) = dim(ret) = [nbatches][nrows][ncols][nchannels]; dim(vec) = [nchannels]. - * @param[in] mat pointer to the input tensor on which addition is to be performed - * @param[in] vec pointer to the bias vector which is to be added + * @brief Performs the element-wise addition of two input tensors. + * dim(ten1) = dim(ten2) = [nbatches][nrows][ncols][nchannels] + * @param[in] ten1 pointer to the first input tensor + * @param[in] ten2 pointer to the second input tensor * @param[in] nbatches number of batches of the input tensor * @param[in] nrows number of rows of the input tensor * @param[in] ncols number of columns of the input tensor * @param[in] nchannels number of channels of the input tensor * @param[out] ret pointer to the output tensor - * @param[in] scmat scaling factor for the input tensor - * @param[in] scvec scaling factor for the bias vector + * @param[in] scten1 scaling factor for the first input tensor + * @param[in] scten2 scaling factor for the second input tensor * @param[in] scret scaling factor for the output tensor * @return none - * @example mat = { { {1324, 5453}, {3454, 3435} }, + * @example ten1 = { { {1324, 5453}, {3454, 3435} }, * { {8789, 3411}, {5412, 8934} } }, * { { {6895, 1211}, {6790, 5425} }, * { {8976, 4539}, {9348, 9321} } } - * vec = {8452, 2341} - * nrows = 4 + * ten2 = { { {1324, 5453}, {3454, 3435} }, + * { {8789, 3411}, {5412, 8934} } }, + * { { {6895, 1211}, {6790, 5425} }, + * { {8976, 4539}, {9348, 9321} } } + * nbatches = 2 + * nrows = 2 * ncols = 2 - * ret = { { {2775, 3311}, {3840, 2302} }, - * { {6507, 2290}, {4819, 5052} } }, - * { { {5560, 1190}, {5508, 3297} }, - * { {6601, 2854}, {6787, 5245} } } - * scmat = 1 - * scvec = 2 - * scret = 2 + * nchannels = 2 + * scten1 = 2 + * scten2 = 2 + * scret = 1 + * ret = { { {1324, 5452}, {3454, 3434} }, + * { {8788, 3410}, {5412, 8934} } }, + * { { {6894, 1210}, {6790, 5424} }, + * { {8976, 4538}, {9348, 9320} } } */ -void t_q_add_vec(const INT_T* const mat, const INT_T* const vec, - ITER_T nbatches, ITER_T nrows, ITER_T ncols, - ITER_T nchannels, INT_T* const ret, SCALE_T scmat, - SCALE_T scvec, SCALE_T scret); +void q7_t_add(const Q7_T* ten1, const Q7_T* ten2, ITER_T nbatches, + ITER_T nrows, ITER_T ncols, ITER_T nchannels, Q7_T* ret, + SCALE_T scten1, SCALE_T scten2, SCALE_T scret); +void q15_t_add(const Q15_T* ten1, const Q15_T* ten2, ITER_T nbatches, + ITER_T nrows, ITER_T ncols, ITER_T nchannels, Q15_T* ret, + SCALE_T scten1, SCALE_T scten2, SCALE_T scret); /** - * @brief Performs the channel-wise subtraction of a bias term from the input tensor. - * dim(mat) = dim(ret) = [nbatches][nrows][ncols][nchannels]; dim(vec) = [nchannels]. - * @param[in] mat pointer to the input tensor from which subtraction is to be performed - * @param[in] vec pointer to the bias vector which is to be subtracted + * @brief Performs the channel-wise addition of a bias term to the input tensor. + * dim(ten) = dim(ret) = [nbatches][nrows][ncols][nchannels]; dim(vec) = [nchannels]. + * @param[in] ten pointer to the input tensor on which addition is to be performed + * @param[in] vec pointer to the bias vector which is to be added * @param[in] nbatches number of batches of the input tensor * @param[in] nrows number of rows of the input tensor * @param[in] ncols number of columns of the input tensor * @param[in] nchannels number of channels of the input tensor * @param[out] ret pointer to the output tensor - * @param[in] scmat scaling factor for the input tensor + * @param[in] scten scaling factor for the input tensor * @param[in] scvec scaling factor for the bias vector * @param[in] scret scaling factor for the output tensor * @return none - * @example mat = { { {1324, 5453}, {3454, 3435} }, + * @example ten = { { {1324, 5453}, {3454, 3435} }, * { {8789, 3411}, {5412, 8934} } }, * { { {6895, 1211}, {6790, 5425} }, * { {8976, 4539}, {9348, 9321} } } * vec = {8452, 2341} - * nrows = 4 + * nbatches = 2 + * nrows = 2 * ncols = 2 - * ret = { { {-1451, 2141}, {-386, 1132} }, - * { {2281, 1120}, {593, 3882} } }, - * { { {1334, 20}, {1282, 2127} }, - * { {2375, 1684}, {2561, 4075} } } - * scmat = 1 + * nchannels = 2 + * scten = 1 * scvec = 2 * scret = 2 + * ret = { { {2775, 3311}, {4072, 2305} }, + * { {6507, 2290}, {5051, 5055} } }, + * { { {5560, 1190}, {5740, 3300} }, + * { {6601, 2854}, {7019, 5248} } } */ -void t_q_sub_vec(const INT_T* const ten, const INT_T* const vec, - ITER_T nbatches, ITER_T nrows, ITER_T ncols, - ITER_T nchannels, INT_T* const ret, SCALE_T scmat, - SCALE_T scvec, SCALE_T scret); - +void q7xq15_q7_t_add_vec(const Q7_T* ten, const Q15_T* const vec, + ITER_T nbatches, ITER_T nrows, ITER_T ncols, + ITER_T nchannels, Q7_T* ret, SCALE_T scmat, + SCALE_T scvec, SCALE_T scret); +void q15_t_add_vec(const Q15_T* ten, const Q15_T* const vec, ITER_T nbatches, + ITER_T nrows, ITER_T ncols, ITER_T nchannels, Q15_T* ret, + SCALE_T scmat, SCALE_T scvec, SCALE_T scret); /** - * @brief Computes the maxpool operation on the input tensor with the given parameters. - * @param[in] input pointer to the tensor on which max-pooling is to be performed - * @param[out] output pointer to the output tensor - * @param[in] N number of batches of the input tensor - * @param[in] H number of rows of the input tensor - * @param[in] W number of columns of the input tensor - * @param[in] CIn number of channels of the input tensor - * @param[in] HF number of rows of the pooling filter - * @param[in] WF number of columns of the pooling filter - * @param[in] CF number of channels of the pooling filter - * @param[in] COut number of channels of the output tensor - * @param[in] HOut number of rows of the output tensor - * @param[in] WOut number of columns of the output tensor - * @param[in] G number of groups of pooling filters - * @param[in] HPadU padding over the top row - * @param[in] HPadD padding under the bottom row - * @param[in] WPadL padding before the leftmost column - * @param[in] WPadR padding after the rightmost column - * @param[in] HStride stride of the pooling filter along the rows, used for moving the receptive field horizontally within the larger image - * @param[in] WStride stride of the pooling filter along the columns, used for moving the receptive field vertically within the larger image - * @param[in] HDilation dilation of the convolution filter along the rows (number of skipped input rows between two consecutive filter rows is HDilation - 1) - * @param[in] WDilation dilation of the convolution filter along the columns (number of skipped input columns between two consecutive filter rows is WDilation - 1) - * @param[in] scinput scale of the input tensor - * @param[in] scoutput scale of the output tensor + * @brief Replace any negative element present in the tensor with zero and clips positive elements to the limit. + * @param[in] ten pointer to tensor on which element-wise ReLU6 operation is to be applied + * @param[in] nbatches number of batches of the input tensor + * @param[in] nrows number of rows of the input tensor + * @param[in] ncols number of columns of the input tensor + * @param[in] nchannels number of channels of the input tensor + * @param[out] ret pointer to the output tensor + * @param[in] limit upper threshold of the ReLU operation + * @param[in] div scaling factor for the input tensor + * @param[in] + * @return none + * @example ten = { { {124, 53}, {45, 35} }, + * { {87, -11}, {54, 89} } }, + * { { {95, -12}, {90, 42} }, + * { {76, 39}, {93, 21} } } + * nbatches = 2 + * nrows = 2 + * ncols = 2 + * nchannels = 2 + * limit = 64 + * div = 1 + * ret = { { {64, 53}, {45, 35} }, + * { {64, 0}, {54, 64} } }, + * { { {64, 0}, {64, 42} }, + * { {64, 39}, {64, 21} } } + */ +void q7_t_relu(const Q7_T* ten, ITER_T nbatches, ITER_T nrows, ITER_T ncols, + ITER_T nchannels, Q7_T* ret, Q7_T limit, Q7_T div); +/** + * @brief Computes the L2-Norm for each channel of the input tensor, and divides each number in that channel by it. + * dim(ten) = dim(ret) = [nbatches][nrows][ncols][nchannels]. + * @param[in] ten pointer to tensor on which channel-wise L2-Norm operation is to be applied + * @param[in] nbatches number of batches of the input tensor + * @param[in] nrows number of rows of the input tensor + * @param[in] ncols number of columns of the input tensor + * @param[in] nchannels number of channels of the input tensor + * @param[out] ret pointer to the output tensor + * @param[in] scale_in scale factor of the input tensor + * @param[in] scale_out scale factor of the output tensor * @return none - * @example Please refer the test-case: test_quantized_maxpool() in file: c_reference/tests/utils/test_quantized_utils.c + * @example ten = { { {1324, 5453}, {3454, 3435} }, + * { {8789, 3411}, {5412, 8934} } }, + * { { {6895, 1211}, {6790, 5425} }, + * { {8976, 4539}, {9348, 9321} } } + * nbatches = 2 + * nrows = 2 + * ncols = 2 + * nchannels = 2 + * scale_in = 1 + * scale_out = 1 + * ret = { { {662, 2726}, {1727, 1717} }, + * { {4394, 1705}, {2706, 4467} } }, + * { { {3447, 605}, {3395, 2712} }, + * { {4488, 2269}, {4674, 4660} } } */ -void q_maxpool(const INT_T* const input, INT_T* const output, ITER_T N, - ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, ITER_T WF, ITER_T CF, - ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, S_ITER_T HPadU, - S_ITER_T HPadD, S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, - ITER_T WStride, ITER_T HDilation, ITER_T WDilation, - SCALE_T scinput, SCALE_T scoutput); +void q15_t_l2_norm(const Q15_T* ten, ITER_T nbatches, ITER_T nrows, + ITER_T ncols, ITER_T nchannels, Q15_T* ret, + SCALE_T scale_in, SCALE_T scale_out); /** * @brief Computes the maxpool operation on the input tensor with the given parameters. * @param[in] input pointer to the tensor on which convolution is to be performed * @param[in] filter pointer to the convolutional filter tensor * @param[out] output pointer to the output tensor - * @param[in] treesumBuffer pointer to the buffer for computing TreeSum accumulation * @param[in] N number of batches of the input tensor * @param[in] H number of rows of the input tensor * @param[in] W number of columns of the input tensor @@ -562,20 +467,29 @@ void q_maxpool(const INT_T* const input, INT_T* const output, ITER_T N, * @param[in] WStride stride of the convolution filter along the columns, used for moving the receptive field vertically within the larger image * @param[in] HDilation dilation of the convolution filter along the rows (number of skipped input rows between two consecutive filter rows is HDilation - 1) * @param[in] WDilation dilation of the convolution filter along the columns (number of skipped input columns between two consecutive filter rows is WDilation - 1) - * @param[in] H1 depth parameter for division-by-two used in TreeSum - * @param[in] H2 depth parameter for direct sum used in TreeSum * @param[in] scinput scale of the input tensor * @param[in] scoutput scale of the output tensor + * @param[in] demote scale factor for output variable demotion * @return none - * @example Please refer the test-case: test_quantized_convolution() in file: c_reference/tests/utils/test_quantized_utils.c + * @example Please refer the test-case: test_q15_convolution() in file: c_reference/tests/utils/test_quantized_utils.c */ -void q_convolution(const INT_T* const input, const INT_T* const filter, - INT_T* const output, INTM_T* const treesumBuffer, ITER_T N, - ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, ITER_T WF, - ITER_T CF, ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, - S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, - S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, - ITER_T HDilation, ITER_T WDilation, SCALE_T H1, SCALE_T H2, - SCALE_T scinput, SCALE_T scoutput); +void q7xq15_q7_convolution(const Q7_T* const input, const Q15_T* const filter, + Q7_T* const output, ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, + ITER_T WF, ITER_T CF, ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, + S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, S_ITER_T WPadR, + ITER_T HStride, ITER_T WStride, ITER_T HDilation, ITER_T WDilation, + SCALE_T scinput, SCALE_T scoutput, SCALE_T demote); +void q7xq15_q15_convolution(const Q7_T* const input, const Q15_T* const filter, + Q15_T* const output, ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, + ITER_T WF, ITER_T CF, ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, + S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, S_ITER_T WPadR, + ITER_T HStride, ITER_T WStride, ITER_T HDilation, ITER_T WDilation, + SCALE_T scinput, SCALE_T scoutput, SCALE_T demote); +void q15_convolution(const Q15_T* const input, const Q15_T* const filter, + Q15_T* const output, ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, + ITER_T WF, ITER_T CF, ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, + S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, S_ITER_T WPadR, + ITER_T HStride, ITER_T WStride, ITER_T HDilation, ITER_T WDilation, + SCALE_T scinput, SCALE_T scoutput, SCALE_T demote); #endif diff --git a/c_reference/include/rnnpool.h b/c_reference/include/rnnpool.h index 78a5ee0ee..92eb97306 100644 --- a/c_reference/include/rnnpool.h +++ b/c_reference/include/rnnpool.h @@ -8,7 +8,7 @@ typedef int (*rnn_t)(float* const, unsigned, const float* const, unsigned, unsig /** * @param[in] patch pointer to activation of patch (row, col, channel) - * @param[in] inputDims dimemsion of each input pixel + * @param[in] inputDims dimension of each input pixel * @param[in] patchDim number of rows and columns in a square patch * @param[in] stride stride length in the larger image to get to next row * @param[in] rnn1 function pointer to RNN1 diff --git a/c_reference/models/Makefile b/c_reference/models/Makefile new file mode 100644 index 000000000..30f8665b7 --- /dev/null +++ b/c_reference/models/Makefile @@ -0,0 +1,23 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT license. + +include ../config.mk + +INCLUDE_DIR=../include +IFLAGS = -I $(INCLUDE_DIR) + +all: quantized_face_detection.o quantized_face_detection_fast.o + +quantized_face_detection.o: quantized_face_detection.c + $(CC) -o $@ $(IFLAGS) $(CFLAGS) -c $^ + +quantized_face_detection_fast.o: quantized_face_detection_fast.c + $(CC) -o $@ $(IFLAGS) $(CFLAGS) -c $^ + +.PHONY: clean cleanest + +clean: + rm -f *.o *.gch + +cleanest: clean + rm *~ diff --git a/c_reference/models/q_scut_head_b_face2_model/conv2D.h b/c_reference/models/q_scut_head_b_face2_model/conv2D.h new file mode 100644 index 000000000..cf5f3402b --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/conv2D.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdb4ebbe48e66c33e4459d84291fd8c636234077b2554c7c8b29072ac6679a4b +size 2326 diff --git a/c_reference/models/q_scut_head_b_face2_model/detection1.h b/c_reference/models/q_scut_head_b_face2_model/detection1.h new file mode 100644 index 000000000..225f3c8a8 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/detection1.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6104c317a56f759f2c2cfe37e8be8a38a02b692229ea2c3442f89ac9a07131d2 +size 17307 diff --git a/c_reference/models/q_scut_head_b_face2_model/detection2.h b/c_reference/models/q_scut_head_b_face2_model/detection2.h new file mode 100644 index 000000000..26e9d5536 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/detection2.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a981b8203c4d6fc2f3954540622999be0b9a90255f37bacd2051bcf9199fe38 +size 13845 diff --git a/c_reference/models/q_scut_head_b_face2_model/detection3.h b/c_reference/models/q_scut_head_b_face2_model/detection3.h new file mode 100644 index 000000000..e2a1ca3b4 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/detection3.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba59a98f86232092b1714eddea89ba038e976d7635696e84bfb96af1612c9516 +size 36234 diff --git a/c_reference/models/q_scut_head_b_face2_model/detection4.h b/c_reference/models/q_scut_head_b_face2_model/detection4.h new file mode 100644 index 000000000..e99e74c86 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/detection4.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a217cc43da8f2629226a564f686e364a0dff4c62fbc9f3c536a0e7058f06074 +size 45773 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv1.h b/c_reference/models/q_scut_head_b_face2_model/mbconv1.h new file mode 100644 index 000000000..5297bfa00 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv1.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c40bb65feb28647f34b94cbe14ce1a53e611e1c804936cdd634f1c13c1ae9527 +size 89286 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv10.h b/c_reference/models/q_scut_head_b_face2_model/mbconv10.h new file mode 100644 index 000000000..ee3be5ee7 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv10.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4af11136c7f3561c728a4724c3179835c4995e0eafd8ee1b68f22df707fa567 +size 164563 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv11.h b/c_reference/models/q_scut_head_b_face2_model/mbconv11.h new file mode 100644 index 000000000..163778ba2 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv11.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a2b85eba3ff7ef782a39c2c66bd58fb91c069ea22613c5bc79680196c053f92 +size 168478 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv12.h b/c_reference/models/q_scut_head_b_face2_model/mbconv12.h new file mode 100644 index 000000000..fa8db14fb --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv12.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6a034dade1320df28c7eecf55d93398412e10b3b2b93f45fb94e3b449bdee12 +size 193762 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv13.h b/c_reference/models/q_scut_head_b_face2_model/mbconv13.h new file mode 100644 index 000000000..3ff7ba917 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv13.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90ded09801745e31d7455fe0816d9518fd2bdf35ea03eae189d931ed7d6e1d7c +size 294211 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv14.h b/c_reference/models/q_scut_head_b_face2_model/mbconv14.h new file mode 100644 index 000000000..ea2afe25e --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv14.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef1df7abd5574985281da7349f2a1a5fe3e46c31af235dcf61f96f7b17099d62 +size 286489 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv2.h b/c_reference/models/q_scut_head_b_face2_model/mbconv2.h new file mode 100644 index 000000000..4b9e73139 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv2.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d96408c93162ffaecada25031c8b36492b0fa3c28a7f091bd755918fc49d8ab4 +size 34285 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv3.h b/c_reference/models/q_scut_head_b_face2_model/mbconv3.h new file mode 100644 index 000000000..05da2d37f --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv3.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7d7603fccc7d113873d990ab19198e6cc848ac0ce8a6aaf930cd904c0b73442 +size 34166 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv4.h b/c_reference/models/q_scut_head_b_face2_model/mbconv4.h new file mode 100644 index 000000000..9d467cc34 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv4.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f46379585c46886367c2c0fad75f7c569ccdc551c055dcb8b5d9407419a3934 +size 34183 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv5.h b/c_reference/models/q_scut_head_b_face2_model/mbconv5.h new file mode 100644 index 000000000..5ad798477 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv5.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5fa64516ebd6fe6a2a33b32243e3499a5788d143b1a0b8e360865c95c21385 +size 34990 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv6.h b/c_reference/models/q_scut_head_b_face2_model/mbconv6.h new file mode 100644 index 000000000..f55a95e6b --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv6.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4a0a2711f5667c839fd78a78ab8a0cdb7f58c85b0cc035e3d29789edc95533e +size 34907 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv7.h b/c_reference/models/q_scut_head_b_face2_model/mbconv7.h new file mode 100644 index 000000000..6e3b1c2dc --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv7.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7a2d1542fae40fbf29ebdf096568fb3a0e887606f0712f36df398c572302997 +size 34846 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv8.h b/c_reference/models/q_scut_head_b_face2_model/mbconv8.h new file mode 100644 index 000000000..8c5b5ca7f --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv8.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ac15c0eca663f9885b8af29b49dbb9b6ce251e38d0d5c1e489a27ecb7b52d89 +size 34147 diff --git a/c_reference/models/q_scut_head_b_face2_model/mbconv9.h b/c_reference/models/q_scut_head_b_face2_model/mbconv9.h new file mode 100644 index 000000000..4c7864976 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/mbconv9.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf1cf04fb4eb81c6fbf7c0975202cfffa37c5a0d8be3796e24aad901af88f397 +size 61103 diff --git a/c_reference/models/q_scut_head_b_face2_model/rnn1.h b/c_reference/models/q_scut_head_b_face2_model/rnn1.h new file mode 100644 index 000000000..e441b706c --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/rnn1.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3386605f719f98078e9dd47e74353a08ab2d57d57a226b5e9663850a6d2bcb8 +size 5833 diff --git a/c_reference/models/q_scut_head_b_face2_model/rnn2.h b/c_reference/models/q_scut_head_b_face2_model/rnn2.h new file mode 100644 index 000000000..069311a66 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face2_model/rnn2.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c26d12688e8264c0580b83b0c3043007a8872e855235d24d858926512ca4d890 +size 6997 diff --git a/c_reference/models/q_scut_head_b_face3_model/conv2D.h b/c_reference/models/q_scut_head_b_face3_model/conv2D.h new file mode 100644 index 000000000..dc0dbc09c --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/conv2D.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cc331f321b9354f17589e0171b2487429edbaacd301004a3bcfaa07e3801bd0 +size 2312 diff --git a/c_reference/models/q_scut_head_b_face3_model/detection1.h b/c_reference/models/q_scut_head_b_face3_model/detection1.h new file mode 100644 index 000000000..8394f0c57 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/detection1.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:115877fd8a8df191ee4593081b6f11f4b642b35173e62764f41dbf137170b633 +size 16857 diff --git a/c_reference/models/q_scut_head_b_face3_model/detection2.h b/c_reference/models/q_scut_head_b_face3_model/detection2.h new file mode 100644 index 000000000..ecdb79691 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/detection2.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ba6dfe812362537c63a433f2edca259ae29267addf418c81e3d3ea81c610225 +size 36036 diff --git a/c_reference/models/q_scut_head_b_face3_model/detection3.h b/c_reference/models/q_scut_head_b_face3_model/detection3.h new file mode 100644 index 000000000..45d023ab6 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/detection3.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b707754f688e5e044658bf281e0f4869aee3be2e31862be24095a94f1bfbeb59 +size 47660 diff --git a/c_reference/models/q_scut_head_b_face3_model/mbconv1.h b/c_reference/models/q_scut_head_b_face3_model/mbconv1.h new file mode 100644 index 000000000..b3774594c --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/mbconv1.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c40a3680ea23f046c65c96af07672c492ae74133971dd7a92929ec73d259a6a8 +size 88774 diff --git a/c_reference/models/q_scut_head_b_face3_model/mbconv2.h b/c_reference/models/q_scut_head_b_face3_model/mbconv2.h new file mode 100644 index 000000000..4a285426e --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/mbconv2.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55ff0e58582cab4aa778236c18c2b86429aa2d19386f27a9d3f3b1aaeea857cb +size 61711 diff --git a/c_reference/models/q_scut_head_b_face3_model/mbconv3.h b/c_reference/models/q_scut_head_b_face3_model/mbconv3.h new file mode 100644 index 000000000..26a3fcb79 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/mbconv3.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10048d16b4621ee2b0cd870e29fb61eff8b910231e529f5392a565f4187c3acf +size 170523 diff --git a/c_reference/models/q_scut_head_b_face3_model/mbconv4.h b/c_reference/models/q_scut_head_b_face3_model/mbconv4.h new file mode 100644 index 000000000..4905417be --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/mbconv4.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9dc049c5599a3d3d9b13e302824ec7c7d1cb9cb3a6dae991343a65abc2ffc6d +size 191750 diff --git a/c_reference/models/q_scut_head_b_face3_model/rnn1.h b/c_reference/models/q_scut_head_b_face3_model/rnn1.h new file mode 100644 index 000000000..edb98f650 --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/rnn1.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40d453b1415418d36529cc645885ab3ce220de744826d32b5563464bf09a6570 +size 5853 diff --git a/c_reference/models/q_scut_head_b_face3_model/rnn2.h b/c_reference/models/q_scut_head_b_face3_model/rnn2.h new file mode 100644 index 000000000..7f95502bc --- /dev/null +++ b/c_reference/models/q_scut_head_b_face3_model/rnn2.h @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3b5c16018b7dffcab15060f1f13e592b07487b77765213e64ebb31e366c2ef6 +size 6941 diff --git a/c_reference/models/quantized_face_detection.c b/c_reference/models/quantized_face_detection.c new file mode 100644 index 000000000..150d4640c --- /dev/null +++ b/c_reference/models/quantized_face_detection.c @@ -0,0 +1,407 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +#include + +#include "quantized_face_detection.h" +#include "quantized_utils.h" +#include "quantized_fastgrnn.h" +#include "quantized_rnnpool.h" +#include "quantized_mbconv.h" + +#include "q_scut_head_b_face2_model/conv2D.h" +#include "q_scut_head_b_face2_model/rnn1.h" +#include "q_scut_head_b_face2_model/rnn2.h" +#include "q_scut_head_b_face2_model/mbconv1.h" +#include "q_scut_head_b_face2_model/mbconv2.h" +#include "q_scut_head_b_face2_model/mbconv3.h" +#include "q_scut_head_b_face2_model/mbconv4.h" +#include "q_scut_head_b_face2_model/detection1.h" +#include "q_scut_head_b_face2_model/mbconv5.h" +#include "q_scut_head_b_face2_model/mbconv6.h" +#include "q_scut_head_b_face2_model/mbconv7.h" +#include "q_scut_head_b_face2_model/mbconv8.h" +#include "q_scut_head_b_face2_model/detection2.h" +#include "q_scut_head_b_face2_model/mbconv9.h" +#include "q_scut_head_b_face2_model/mbconv10.h" +#include "q_scut_head_b_face2_model/mbconv11.h" +#include "q_scut_head_b_face2_model/detection3.h" +#include "q_scut_head_b_face2_model/mbconv12.h" +#include "q_scut_head_b_face2_model/mbconv13.h" +#include "q_scut_head_b_face2_model/mbconv14.h" +#include "q_scut_head_b_face2_model/detection4.h" + +void q_face_detection(char* const mem_buf) { + // Conv2D Sub-Pipeline + q7xq15_q7_convolution((Q7_T*)mem_buf, CBR1F, (Q7_T*)(mem_buf + 76800), + CONV2D_N, CBR1F_H, CBR1F_W, CBR1F_CIN, CBR1F_HF, CBR1F_WF, CBR1F_CF, + CONV2D_COUT, CONV2D_HOUT, CONV2D_WOUT, CBR1F_G, CBR1F_HPADL, CBR1F_HPADR, + CBR1F_WPADL, CBR1F_WPADR, CBR1F_HSTRIDE, CBR1F_WSTRIDE, CBR1F_HDILATION, + CBR1F_WDILATION, CBR1F_Scinput, CBR1F_Scoutput, CBR1F_Demote); + + q7xq15_q7_t_add_vec((Q7_T*)(mem_buf + 76800), CBR1B, CONV2D_N, CONV2D_HOUT, + CONV2D_WOUT, CONV2D_COUT, (Q7_T*)mem_buf, CBR1B_Scten, CBR1B_Scvec, + CBR1B_Scret); + + q7xq15_q7_convolution((Q7_T*)mem_buf, CBR1W, (Q7_T*)mem_buf, CONV2D_N, + CONV2D_HOUT, CONV2D_WOUT, CONV2D_COUT, CBR1W_HF, CBR1W_WF, CBR1W_CF, + CBR1W_COUT, CONV2D_HOUT, CONV2D_WOUT, CBR1W_G, CBR1W_HPADL, CBR1W_HPADR, + CBR1W_WPADL, CBR1W_WPADR, CBR1W_HSTRIDE, CBR1W_WSTRIDE, CBR1W_HDILATION, + CBR1W_WDILATION, CBR1W_Scinput, CBR1W_Scoutput, CBR1W_Demote); + + q7_t_relu((Q7_T*)mem_buf, CONV2D_N, CONV2D_HOUT, CONV2D_WOUT, CONV2D_COUT, + (Q7_T*)(mem_buf + 76800), CONV2D_Limit, CONV2D_Div); + + Q7_T* mem_buf_offset_q7 = (Q7_T*)mem_buf; + Q15_T* mem_buf_offset_q15 = (Q15_T*)mem_buf; + + // RNNPool Sub-Pipeline + memset(mem_buf, 0, sizeof(Q7_T) * 76800); + memset((mem_buf + 153600), 0, sizeof(Q15_T)); + memset((mem_buf + 153602), 0, sizeof(Q15_T)); + + for (ITER_T patch_x = 0; (patch_x < 29); patch_x++) { + for (ITER_T patch_y = 0; (patch_y < 39); patch_y++) { + q7xq15_q15_rnnpool_block((Q7_T*)(mem_buf + 76800 + ((2560 * patch_x) + (16 * patch_y))), + INPUT_CHANNELS, PATCH_DIM, CONV2D_WOUT, q7xq15_q15_fastgrnn, HIDDEN_DIM1, + (const void*)(&RNN1_PARAMS), (void*)(&RNN1_BUFFERS), + (const void*)(&RNN1_SCALES), q15_fastgrnn, HIDDEN_DIM2, + (const void*)(&RNN2_PARAMS), (void*)(&RNN2_BUFFERS), + (const void*)(&RNN2_SCALES), (Q15_T*)(mem_buf + 153750), + (Q15_T*)(mem_buf + 153900), ShR1, ShL1, ShR2, ShL2); + + for (ITER_T i = 0; i < 64; i++) { + mem_buf_offset_q7[patch_x * 2560 + patch_y * 64 + i] = (Q7_T)(mem_buf_offset_q15[76875 + i]); + } + } + } + + memcpy(&mem_buf_offset_q7[29 * 2560], &mem_buf_offset_q7[28 * 2560], + 39 * 64 * sizeof(Q7_T)); + for (ITER_T i = 0; i < 30; i++) { + memcpy(&mem_buf_offset_q7[39 * 64 + i * 2560], + &mem_buf_offset_q7[38 * 64 + i * 2560], 64 * sizeof(Q7_T)); + } + + // MBConv Sub-Pipeline + // MBConv Layer 1 + q7xq15_q15_mbconv_block((Q7_T*)mem_buf, L1_F1, L1_W1, L1_B1, L1_F2, L1_W2, + L1_B2, L1_F3, L1_W3, L1_B3, (Q15_T*)(mem_buf + 76800), + (Q15_T*)(mem_buf + 153600), (Q15_T*)(mem_buf + 184500), L1_N, L1_H, L1_W, + L1_CIN, L1_CTEMP, L1_HF, L1_WF, L1_COUT, L1_HOUT, L1_WOUT, L1_HPADL, + L1_HPADR, L1_WPADL, L1_WPADR, L1_HSTRIDE, L1_WSTRIDE, L1_Limit1, L1_Limit2, + L1_ShRU1, L1_ShRX1, L1_ShRU2, L1_ShRX2, L1_ShRU3, L1_ShRW3, L1_ShLU1, + L1_ShLX1, L1_ShLU2, L1_ShLX2, L1_ShLU3, L1_ShLW3); + + // MBConv Layer 2 + q15_mbconv_block((Q15_T*)(mem_buf + 76800), L2_F1, L2_W1, L2_B1, L2_F2, + L2_W2, L2_B2, L2_F3, L2_W3, L2_B3, (Q15_T*)mem_buf, + (Q15_T*)(mem_buf + 153600), (Q15_T*)(mem_buf + 169050), L2_N, L2_H, L2_W, + L2_CIN, L2_CTEMP, L2_HF, L2_WF, L2_COUT, L2_HOUT, L2_WOUT, L2_HPADL, + L2_HPADR, L2_WPADL, L2_WPADR, L2_HSTRIDE, L2_WSTRIDE, L2_Limit1, L2_Limit2, + L2_ShRU1, L2_ShRX1, L2_ShRU2, L2_ShRX2, L2_ShRU3, L2_ShRW3, L2_ShLU1, + L2_ShLX1, L2_ShLU2, L2_ShLX2, L2_ShLU3, L2_ShLW3); + + // MBConv1 + MBConv2 + q15_t_add((Q15_T*)(mem_buf + 76800), (Q15_T*)mem_buf, L2_N, L2_HOUT, L2_WOUT, + L2_COUT, (Q15_T*)(mem_buf + 76800), L2_Scten1, L2_Scten2, L2_Scret); + + // MBConv Layer 3 + q15_mbconv_block((Q15_T*)(mem_buf + 76800), L3_F1, L3_W1, L3_B1, L3_F2, + L3_W2, L3_B2, L3_F3, L3_W3, L3_B3, (Q15_T*)mem_buf, + (Q15_T*)(mem_buf + 153600), (Q15_T*)(mem_buf + 169050), L3_N, L3_H, L3_W, + L3_CIN, L3_CTEMP, L3_HF, L3_WF, L3_COUT, L3_HOUT, L3_WOUT, L3_HPADL, + L3_HPADR, L3_WPADL, L3_WPADR, L3_HSTRIDE, L3_WSTRIDE, L3_Limit1, L3_Limit2, + L3_ShRU1, L3_ShRX1, L3_ShRU2, L3_ShRX2, L3_ShRU3, L3_ShRW3, L3_ShLU1, + L3_ShLX1, L3_ShLU2, L3_ShLX2, L3_ShLU3, L3_ShLW3); + + // MBConv1 + MBConv2 + MBConv3 + q15_t_add((Q15_T*)(mem_buf + 76800), (Q15_T*)mem_buf, L3_N, L3_HOUT, L3_WOUT, + L3_COUT, (Q15_T*)(mem_buf + 76800), L3_Scten1, L3_Scten2, L3_Scret); + + // MBConv Layer 4 + q15_mbconv_block((Q15_T*)(mem_buf + 76800), L4_F1, L4_W1, L4_B1, L4_F2, + L4_W2, L4_B2, L4_F3, L4_W3, L4_B3, (Q15_T*)mem_buf, + (Q15_T*)(mem_buf + 153600), (Q15_T*)(mem_buf + 169050), L4_N, L4_H, L4_W, + L4_CIN, L4_CTEMP, L4_HF, L4_WF, L4_COUT, L4_HOUT, L4_WOUT, L4_HPADL, + L4_HPADR, L4_WPADL, L4_WPADR, L4_HSTRIDE, L4_WSTRIDE, L4_Limit1, L4_Limit2, + L4_ShRU1, L4_ShRX1, L4_ShRU2, L4_ShRX2, L4_ShRU3, L4_ShRW3, L4_ShLU1, + L4_ShLX1, L4_ShLU2, L4_ShLX2, L4_ShLU3, L4_ShLW3); + + // MBConv1 + MBConv2 + MBConv3 + MBConv4 + q15_t_add((Q15_T*)(mem_buf + 76800), (Q15_T*)mem_buf, L4_N, L4_HOUT, L4_WOUT, + L4_COUT, (Q15_T*)(mem_buf + 76800), L4_Scten1, L4_Scten2, L4_Scret); + + // Detection Layer 1 Sub-Pipeline + q15_t_l2_norm((Q15_T*)(mem_buf + 76800), L4_N, L4_HOUT, L4_WOUT, L4_COUT, + (Q15_T*)mem_buf, D1_ScaleIn, D1_ScaleOut); + + q15_convolution((Q15_T*)mem_buf, D1NW, (Q15_T*)mem_buf, L4_N, L4_HOUT, + L4_WOUT, L4_COUT, D1NW_HF, D1NW_WF, D1NW_CF, D1NW_COUT, L4_HOUT, L4_WOUT, + D1NW_G, D1NW_HPADL, D1NW_HPADR, D1NW_WPADL, D1NW_WPADR, D1NW_HSTRIDE, + D1NW_WSTRIDE, D1NW_HDILATION, D1NW_WDILATION, D1NW_Scinput, D1NW_Scoutput, + D1NW_Demote); + + q15_convolution((Q15_T*)mem_buf, D1CW, (Q15_T*)(mem_buf + 153600), L4_N, + L4_HOUT, L4_WOUT, D1NW_COUT * D1NW_G, D1CW_HF, D1CW_WF, D1CW_CF, D1CW_COUT, + L4_HOUT, L4_WOUT, D1CW_G, D1CW_HPADL, D1CW_HPADR, D1CW_WPADL, D1CW_WPADR, + D1CW_HSTRIDE, D1CW_WSTRIDE, D1CW_HDILATION, D1CW_WDILATION, D1CW_Scinput, + D1CW_Scoutput, D1CW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 153600), D1CB, L4_N, L4_HOUT, L4_WOUT, + D1CW_COUT, (Q15_T*)(mem_buf + 172800), D1CB_Scten, D1CB_Scvec, D1CB_Scret); + + q15_convolution((Q15_T*)mem_buf, D1LW, (Q15_T*)(mem_buf + 153600), L4_N, + L4_HOUT, L4_WOUT, D1NW_COUT * D1NW_G, D1LW_HF, D1LW_WF, D1LW_CF, D1LW_COUT, + L4_HOUT, L4_WOUT, D1LW_G, D1LW_HPADL, D1LW_HPADR, D1LW_WPADL, D1LW_WPADR, + D1LW_HSTRIDE, D1LW_WSTRIDE, D1LW_HDILATION, D1LW_WDILATION, D1LW_Scinput, + D1LW_Scoutput, D1LW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 153600), D1LB, L4_N, L4_HOUT, L4_WOUT, + D1LW_COUT, (Q15_T*)(mem_buf + 153600), D1LB_Scten, D1LB_Scvec, D1LB_Scret); + + memset((mem_buf_offset_q15 + 81600), 0, sizeof(Q15_T) * 2400); + memset(mem_buf_offset_q15, 0, sizeof(Q15_T) * 1); + memset((mem_buf_offset_q15 + 1), 0, sizeof(Q15_T) * 1); + + for (ITER_T i = 0; i < 30; i++) { + for (ITER_T j = 0; j < 40; j++) { + for (ITER_T k = 0; k < 3; k++) { + mem_buf_offset_q15[9 + k] = mem_buf_offset_q15[86400 + (i * 160 + j * 4 + k)]; + } + + ITER_T index; + q15_v_argmax(&mem_buf_offset_q15[9], 3, &index); + + mem_buf_offset_q15[81600 + (i * 80 + j * 2)] = mem_buf_offset_q15[86400 + (i * 160 + j * 4 + index)]; + mem_buf_offset_q15[81600 + (i * 80 + j * 2 + 1)] = mem_buf_offset_q15[86400 + (i * 160 + j * 4 + 3)]; + } + } + + // MBConv Layer 5 + q15_mbconv_block((Q15_T*)(mem_buf + 76800), L5_F1, L5_W1, L5_B1, L5_F2, + L5_W2, L5_B2, L5_F3, L5_W3, L5_B3, (Q15_T*)mem_buf, + (Q15_T*)(mem_buf + 172800), (Q15_T*)(mem_buf + 168300), L5_N, L5_H, L5_W, + L5_CIN, L5_CTEMP, L5_HF, L5_WF, L5_COUT, L5_HOUT, L5_WOUT, L5_HPADL, + L5_HPADR, L5_WPADL, L5_WPADR, L5_HSTRIDE, L5_WSTRIDE, L5_Limit1, L5_Limit2, + L5_ShRU1, L5_ShRX1, L5_ShRU2, L5_ShRX2, L5_ShRU3, L5_ShRW3, L5_ShLU1, + L5_ShLX1, L5_ShLU2, L5_ShLX2, L5_ShLU3, L5_ShLW3); + + // MBConv1 + MBConv2 + MBConv3 + MBConv4 + MBConv5 + q15_t_add((Q15_T*)(mem_buf + 76800), (Q15_T*)mem_buf, L5_N, L5_HOUT, L5_WOUT, + L5_COUT, (Q15_T*)(mem_buf + 76800), L5_Scten1, L5_Scten2, L5_Scret); + + // MBConv Layer 6 + q15_mbconv_block((Q15_T*)(mem_buf + 76800), L6_F1, L6_W1, L6_B1, L6_F2, + L6_W2, L6_B2, L6_F3, L6_W3, L6_B3, (Q15_T*)mem_buf, + (Q15_T*)(mem_buf + 172800), (Q15_T*)(mem_buf + 168300), L6_N, L6_H, L6_W, + L6_CIN, L6_CTEMP, L6_HF, L6_WF, L6_COUT, L6_HOUT, L6_WOUT, L6_HPADL, + L6_HPADR, L6_WPADL, L6_WPADR, L6_HSTRIDE, L6_WSTRIDE, L6_Limit1, L6_Limit2, + L6_ShRU1, L6_ShRX1, L6_ShRU2, L6_ShRX2, L6_ShRU3, L6_ShRW3, L6_ShLU1, + L6_ShLX1, L6_ShLU2, L6_ShLX2, L6_ShLU3, L6_ShLW3); + + // MBConv1 + MBConv2 + MBConv3 + MBConv4 + MBConv5 + MBConv6 + q15_t_add((Q15_T*)(mem_buf + 76800), (Q15_T*)mem_buf, L6_N, L6_HOUT, L6_WOUT, + L6_COUT, (Q15_T*)(mem_buf + 76800), L6_Scten1, L6_Scten2, L6_Scret); + + // MBConv Layer 7 + q15_mbconv_block((Q15_T*)(mem_buf + 76800), L7_F1, L7_W1, L7_B1, L7_F2, + L7_W2, L7_B2, L7_F3, L7_W3, L7_B3, (Q15_T*)mem_buf, + (Q15_T*)(mem_buf + 172800), (Q15_T*)(mem_buf + 168300), L7_N, L7_H, L7_W, + L7_CIN, L7_CTEMP, L7_HF, L7_WF, L7_COUT, L7_HOUT, L7_WOUT, L7_HPADL, + L7_HPADR, L7_WPADL, L7_WPADR, L7_HSTRIDE, L7_WSTRIDE, L7_Limit1, L7_Limit2, + L7_ShRU1, L7_ShRX1, L7_ShRU2, L7_ShRX2, L7_ShRU3, L7_ShRW3, L7_ShLU1, + L7_ShLX1, L7_ShLU2, L7_ShLX2, L7_ShLU3, L7_ShLW3); + + // MBConv1 + MBConv2 + MBConv3 + MBConv4 + MBConv5 + MBConv6 + MBConv7 + q15_t_add((Q15_T*)(mem_buf + 76800), (Q15_T*)mem_buf, L7_N, L7_HOUT, L7_WOUT, + L7_COUT, (Q15_T*)(mem_buf + 76800), L7_Scten1, L7_Scten2, L7_Scret); + + // MBConv Layer 8 + q15_mbconv_block((Q15_T*)(mem_buf + 76800), L8_F1, L8_W1, L8_B1, L8_F2, + L8_W2, L8_B2, L8_F3, L8_W3, L8_B3, (Q15_T*)mem_buf, + (Q15_T*)(mem_buf + 172800), (Q15_T*)(mem_buf + 168300), L8_N, L8_H, L8_W, + L8_CIN, L8_CTEMP, L8_HF, L8_WF, L8_COUT, L8_HOUT, L8_WOUT, L8_HPADL, + L8_HPADR, L8_WPADL, L8_WPADR, L8_HSTRIDE, L8_WSTRIDE, L8_Limit1, L8_Limit2, + L8_ShRU1, L8_ShRX1, L8_ShRU2, L8_ShRX2, L8_ShRU3, L8_ShRW3, L8_ShLU1, + L8_ShLX1, L8_ShLU2, L8_ShLX2, L8_ShLU3, L8_ShLW3); + + // MBConv1 + MBConv2 + MBConv3 + MBConv4 + MBConv5 + MBConv6 + MBConv7 + MBConv8 + q15_t_add((Q15_T*)(mem_buf + 76800), (Q15_T*)mem_buf, L8_N, L8_HOUT, L8_WOUT, + L8_COUT, (Q15_T*)(mem_buf + 76800), L8_Scten1, L8_Scten2, L8_Scret); + + // Detection Layer 2 Sub-Pipeline + q15_t_l2_norm((Q15_T*)(mem_buf + 76800), L8_N, L8_HOUT, L8_WOUT, L8_COUT, + (Q15_T*)mem_buf, D2_ScaleIn, D2_ScaleOut); + + q15_convolution((Q15_T*)mem_buf, D2NW, (Q15_T*)mem_buf, L8_N, L8_HOUT, + L8_WOUT, L8_COUT, D2NW_HF, D2NW_WF, D2NW_CF, D2NW_COUT, L8_HOUT, L8_WOUT, + D2NW_G, D2NW_HPADL, D2NW_HPADR, D2NW_WPADL, D2NW_WPADR, D2NW_HSTRIDE, + D2NW_WSTRIDE, D2NW_HDILATION, D2NW_WDILATION, D2NW_Scinput, D2NW_Scoutput, + D2NW_Demote); + + q15_convolution((Q15_T*)mem_buf, D2CW, (Q15_T*)(mem_buf + 168000), L8_N, + L8_HOUT, L8_WOUT, D2NW_COUT * D2NW_G, D2CW_HF, D2CW_WF, D2CW_CF, D2CW_COUT, + L8_HOUT, L8_WOUT, D2CW_G, D2CW_HPADL, D2CW_HPADR, D2CW_WPADL, D2CW_WPADR, + D2CW_HSTRIDE, D2CW_WSTRIDE, D2CW_HDILATION, D2CW_WDILATION, D2CW_Scinput, + D2CW_Scoutput, D2CW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 168000), D2CB, L8_N, L8_HOUT, L8_WOUT, + D2CW_COUT, (Q15_T*)(mem_buf + 168000), D2CB_Scten, D2CB_Scvec, D2CB_Scret); + + q15_convolution((Q15_T*)mem_buf, D2LW, (Q15_T*)(mem_buf + 172800), L8_N, + L8_HOUT, L8_WOUT, D2NW_COUT * D2NW_G, D2LW_HF, D2LW_WF, D2LW_CF, D2LW_COUT, + L8_HOUT, L8_WOUT, D2LW_G, D2LW_HPADL, D2LW_HPADR, D2LW_WPADL, D2LW_WPADR, + D2LW_HSTRIDE, D2LW_WSTRIDE, D2LW_HDILATION, D2LW_WDILATION, D2LW_Scinput, + D2LW_Scoutput, D2LW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 172800), D2LB, L8_N, L8_HOUT, L8_WOUT, + D2LW_COUT, (Q15_T*)(mem_buf + 172800), D2LB_Scten, D2LB_Scvec, D2LB_Scret); + + // MBConv Layer 9 + q15_mbconv_block((Q15_T*)(mem_buf + 76800), L9_F1, L9_W1, L9_B1, L9_F2, + L9_W2, L9_B2, L9_F3, L9_W3, L9_B3, (Q15_T*)mem_buf, + (Q15_T*)(mem_buf + 57600), (Q15_T*)(mem_buf + 73050), L9_N, L9_H, L9_W, + L9_CIN, L9_CTEMP, L9_HF, L9_WF, L9_COUT, L9_HOUT, L9_WOUT, L9_HPADL, + L9_HPADR, L9_WPADL, L9_WPADR, L9_HSTRIDE, L9_WSTRIDE, L9_Limit1, L9_Limit2, + L9_ShRU1, L9_ShRX1, L9_ShRU2, L9_ShRX2, L9_ShRU3, L9_ShRW3, L9_ShLU1, + L9_ShLX1, L9_ShLU2, L9_ShLX2, L9_ShLU3, L9_ShLW3); + + // MBConv Layer 10 + q15xq7_q15_mbconv_block((Q15_T*)mem_buf, L10_F1, L10_W1, L10_B1, L10_F2, + L10_W2, L10_B2, L10_F3, L10_W3, L10_B3, (Q15_T*)(mem_buf + 96000), + (Q15_T*)(mem_buf + 72961), (Q15_T*)(mem_buf + 58800), L10_N, L10_H, L10_W, + L10_CIN, L10_CTEMP, L10_HF, L10_WF, L10_COUT, L10_HOUT, L10_WOUT, + L10_HPADL, L10_HPADR, L10_WPADL, L10_WPADR, L10_HSTRIDE, L10_WSTRIDE, + L10_Limit1, L10_Limit2, L10_ShRU1, L10_ShRX1, L10_ShRU2, L10_ShRX2, + L10_ShRU3, L10_ShRW3, L10_ShLU1, L10_ShLX1, L10_ShLU2, L10_ShLX2, + L10_ShLU3, L10_ShLW3); + + // MBConv9 + MBConv10 + q15_t_add((Q15_T*)mem_buf, (Q15_T*)(mem_buf + 96000), L10_N, L10_HOUT, + L10_WOUT, L10_COUT, (Q15_T*)mem_buf, L10_Scten1, L10_Scten2, L10_Scret); + + // MBConv Layer 11 + q15xq7_q15_mbconv_block((Q15_T*)mem_buf, L11_F1, L11_W1, L11_B1, L11_F2, + L11_W2, L11_B2, L11_F3, L11_W3, L11_B3, (Q15_T*)(mem_buf + 96000), + (Q15_T*)(mem_buf + 72961), (Q15_T*)(mem_buf + 58800), L11_N, L11_H, L11_W, + L11_CIN, L11_CTEMP, L11_HF, L11_WF, L11_COUT, L11_HOUT, L11_WOUT, + L11_HPADL, L11_HPADR, L11_WPADL, L11_WPADR, L11_HSTRIDE, L11_WSTRIDE, + L11_Limit1, L11_Limit2, L11_ShRU1, L11_ShRX1, L11_ShRU2, L11_ShRX2, + L11_ShRU3, L11_ShRW3, L11_ShLU1, L11_ShLX1, L11_ShLU2, L11_ShLX2, + L11_ShLU3, L11_ShLW3); + + // MBConv9 + MBConv10 + MBConv11 + q15_t_add((Q15_T*)mem_buf, (Q15_T*)(mem_buf + 96000), L11_N, L11_HOUT, + L11_WOUT, L11_COUT, (Q15_T*)mem_buf, L11_Scten1, L11_Scten2, L11_Scret); + + // Detection Layer 3 Sub-Pipeline + q15_t_l2_norm((Q15_T*)mem_buf, L11_N, L11_HOUT, L11_WOUT, L11_COUT, + (Q15_T*)(mem_buf + 96000), D3_ScaleIn, D3_ScaleOut); + + q15_convolution((Q15_T*)(mem_buf + 96000), D3NW, (Q15_T*)(mem_buf + 96000), + L11_N, L11_HOUT, L11_WOUT, L11_COUT, D3NW_HF, D3NW_WF, D3NW_CF, D3NW_COUT, + L11_HOUT, L11_WOUT, D3NW_G, D3NW_HPADL, D3NW_HPADR, D3NW_WPADL, D3NW_WPADR, + D3NW_HSTRIDE, D3NW_WSTRIDE, D3NW_HDILATION, D3NW_WDILATION, D3NW_Scinput, + D3NW_Scoutput, D3NW_Demote); + + q15_convolution((Q15_T*)(mem_buf + 96000), D3CW, (Q15_T*)(mem_buf + 61200), + L11_N, L11_HOUT, L11_WOUT, D3NW_COUT * D3NW_G, D3CW_HF, D3CW_WF, D3CW_CF, + D3CW_COUT, L11_HOUT, L11_WOUT, D3CW_G, D3CW_HPADL, D3CW_HPADR, D3CW_WPADL, + D3CW_WPADR, D3CW_HSTRIDE, D3CW_WSTRIDE, D3CW_HDILATION, D3CW_WDILATION, + D3CW_Scinput, D3CW_Scoutput, D3CW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 61200), D3CB, L11_N, L11_HOUT, L11_WOUT, + D3CW_COUT, (Q15_T*)(mem_buf + 57600), D3CB_Scten, D3CB_Scvec, D3CB_Scret); + + q15_convolution((Q15_T*)(mem_buf + 96000), D3LW, (Q15_T*)(mem_buf + 60000), + L11_N, L11_HOUT, L11_WOUT, D3NW_COUT * D3NW_G, D3LW_HF, D3LW_WF, D3LW_CF, + D3LW_COUT, L11_HOUT, L11_WOUT, D3LW_G, D3LW_HPADL, D3LW_HPADR, D3LW_WPADL, + D3LW_WPADR, D3LW_HSTRIDE, D3LW_WSTRIDE, D3LW_HDILATION, D3LW_WDILATION, + D3LW_Scinput, D3LW_Scoutput, D3LW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 60000), D3LB, L11_N, L11_HOUT, L11_WOUT, + D3LW_COUT, (Q15_T*)(mem_buf + 60000), D3LB_Scten, D3LB_Scvec, D3LB_Scret); + + // MBConv Layer 12 + q15xq7_q7_mbconv_block((Q15_T*)mem_buf, L12_F1, L12_W1, L12_B1, L12_F2, + L12_W2, L12_B2, L12_F3, L12_W3, L12_B3, (Q7_T*)(mem_buf + 76800), + (Q15_T*)(mem_buf + 115200), (Q15_T*)(mem_buf + 62400), L12_N, L12_H, L12_W, + L12_CIN, L12_CTEMP, L12_HF, L12_WF, L12_COUT, L12_HOUT, L12_WOUT, + L12_HPADL, L12_HPADR, L12_WPADL, L12_WPADR, L12_HSTRIDE, L12_WSTRIDE, + L12_Limit1, L12_Limit2, L12_ShRU1, L12_ShRX1, L12_ShRU2, L12_ShRX2, + L12_ShRU3, L12_ShRW3, L12_ShLU1, L12_ShLX1, L12_ShLU2, L12_ShLX2, + L12_ShLU3, L12_ShLW3); + + // MBConv Layer 13 + q7_mbconv_block((Q7_T*)(mem_buf + 76800), L13_F1, L13_W1, L13_B1, L13_F2, + L13_W2, L13_B2, L13_F3, L13_W3, L13_B3, (Q7_T*)mem_buf, + (Q7_T*)(mem_buf + 38400), (Q7_T*)(mem_buf + 54600), L13_N, L13_H, L13_W, + L13_CIN, L13_CTEMP, L13_HF, L13_WF, L13_COUT, L13_HOUT, L13_WOUT, + L13_HPADL, L13_HPADR, L13_WPADL, L13_WPADR, L13_HSTRIDE, L13_WSTRIDE, + L13_Limit1, L13_Limit2, L13_ShRU1, L13_ShRX1, L13_ShRU2, L13_ShRX2, + L13_ShRU3, L13_ShRW3, L13_ShLU1, L13_ShLX1, L13_ShLU2, L13_ShLX2, + L13_ShLU3, L13_ShLW3); + + // MBConv12 + MBConv13 + q7_t_add((Q7_T*)(mem_buf + 76800), (Q7_T*)mem_buf, L13_N, L13_HOUT, L13_WOUT, + L13_COUT, (Q7_T*)(mem_buf + 76800), L13_Scten1, L13_Scten2, L13_Scret); + + // MBConv Layer 14 + q7_mbconv_block((Q7_T*)(mem_buf + 76800), L14_F1, L14_W1, L14_B1, L14_F2, + L14_W2, L14_B2, L14_F3, L14_W3, L14_B3, (Q7_T*)mem_buf, + (Q7_T*)(mem_buf + 38400), (Q7_T*)(mem_buf + 54600), L14_N, L14_H, L14_W, + L14_CIN, L14_CTEMP, L14_HF, L14_WF, L14_COUT, L14_HOUT, L14_WOUT, + L14_HPADL, L14_HPADR, L14_WPADL, L14_WPADR, L14_HSTRIDE, L14_WSTRIDE, + L14_Limit1, L14_Limit2, L14_ShRU1, L14_ShRX1, L14_ShRU2, L14_ShRX2, + L14_ShRU3, L14_ShRW3, L14_ShLU1, L14_ShLX1, L14_ShLU2, L14_ShLX2, + L14_ShLU3, L14_ShLW3); + + // MBConv12 + MBConv13 + MBConv14 + q7_t_add((Q7_T*)(mem_buf + 76800), (Q7_T*)mem_buf, L14_N, L14_HOUT, L14_WOUT, + L14_COUT, (Q7_T*)(mem_buf + 76800), L14_Scten1, L14_Scten2, L14_Scret); + + // Detection Layer 4 Sub-Pipeline + q7xq15_q7_convolution((Q7_T*)(mem_buf + 76800), D4CW, + (Q7_T*)(mem_buf + 4800), L14_N, L14_HOUT, L14_WOUT, L14_COUT, D4CW_HF, + D4CW_WF, D4CW_CF, D4CW_COUT, L14_HOUT, L14_WOUT, D4CW_G, D4CW_HPADL, + D4CW_HPADR, D4CW_WPADL, D4CW_WPADR, D4CW_HSTRIDE, D4CW_WSTRIDE, + D4CW_HDILATION, D4CW_WDILATION, D4CW_Scinput, + D4CW_Scoutput, D4CW_Demote); + + q7xq15_q7_t_add_vec((Q7_T*)(mem_buf + 4800), D4CB, L14_N, L14_HOUT, + L14_WOUT, D4CW_COUT, (Q7_T*)mem_buf, D4CB_Scten, D4CB_Scvec, D4CB_Scret); + + q7xq15_q15_convolution((Q7_T*)(mem_buf + 76800), D4LW, + (Q15_T*)(mem_buf + 2400), L14_N, L14_HOUT, L14_WOUT, L14_COUT, D4LW_HF, + D4LW_WF, D4LW_CF, D4LW_COUT, L14_HOUT, L14_WOUT, D4LW_G, D4LW_HPADL, + D4LW_HPADR, D4LW_WPADL, D4LW_WPADR, D4LW_HSTRIDE, D4LW_WSTRIDE, + D4LW_HDILATION, D4LW_WDILATION, D4LW_Scinput, D4LW_Scoutput, D4LW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 2400), D4LB, L14_N, L14_HOUT, L14_WOUT, D4LW_COUT, + (Q15_T*)(mem_buf + 2400), D4LB_Scten, D4LB_Scvec, D4LB_Scret); + + // Re-ordering the outputs + memset((mem_buf_offset_q15 + 38400), 0, sizeof(Q15_T) * 18000); + memcpy(&mem_buf_offset_q15[38400], &mem_buf_offset_q15[81600], 2400 * sizeof(Q15_T)); + + for (ITER_T i = 0; i < 2400; i++) { + mem_buf_offset_q15[38400 + (i + 2400)] = (mem_buf_offset_q15[84000 + i] / 2); + } + + for (ITER_T i = 0; i < 600; i++) { + mem_buf_offset_q15[38400 + (i + 4800)] = (mem_buf_offset_q15[28800 + i] / 2); + } + + for (ITER_T i = 0; i < 600; i++) { + mem_buf_offset_q15[38400 + (i + 5400)] = (((Q15_T)mem_buf_offset_q7[i]) << 7); + } + + memcpy(&mem_buf_offset_q15[38400 + 6000], &mem_buf_offset_q15[76800], 4800 * sizeof(Q15_T)); + memcpy(&mem_buf_offset_q15[38400 + 10800], &mem_buf_offset_q15[86400], 4800 * sizeof(Q15_T)); + memcpy(&mem_buf_offset_q15[38400 + 15600], &mem_buf_offset_q15[30000], 1200 * sizeof(Q15_T)); + + for (ITER_T i = 0; (i < 1200); i++) { + mem_buf_offset_q15[38400 + (i + 16800)] = (mem_buf_offset_q15[1200 + i] / 2); + } +} diff --git a/c_reference/models/quantized_face_detection.h b/c_reference/models/quantized_face_detection.h new file mode 100644 index 000000000..7cecdd696 --- /dev/null +++ b/c_reference/models/quantized_face_detection.h @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +#ifndef __QUANTIZED_FACE_DETECTION_H__ +#define __QUANTIZED_FACE_DETECTION_H__ + +/** + * @brief Routine for running the entire face detection model pipeline. + * @param[in, out] mem_buf pointer to the singleton memory buffer for input, intermediate computations and output, used for fragmentation invariance + * @return none + * @example + */ +void q_face_detection(char* const mem_buf); + +#endif diff --git a/c_reference/models/quantized_face_detection_fast.c b/c_reference/models/quantized_face_detection_fast.c new file mode 100644 index 000000000..25c868f2d --- /dev/null +++ b/c_reference/models/quantized_face_detection_fast.c @@ -0,0 +1,233 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +#include + +#include "quantized_face_detection_fast.h" +#include "quantized_utils.h" +#include "quantized_fastgrnn.h" +#include "quantized_rnnpool.h" +#include "quantized_mbconv.h" + +#include "q_scut_head_b_face3_model/conv2D.h" +#include "q_scut_head_b_face3_model/rnn1.h" +#include "q_scut_head_b_face3_model/rnn2.h" +#include "q_scut_head_b_face3_model/mbconv1.h" +#include "q_scut_head_b_face3_model/detection1.h" +#include "q_scut_head_b_face3_model/mbconv2.h" +#include "q_scut_head_b_face3_model/detection2.h" +#include "q_scut_head_b_face3_model/mbconv3.h" +#include "q_scut_head_b_face3_model/mbconv4.h" +#include "q_scut_head_b_face3_model/detection3.h" + +void q_face_detection_fast(char* const mem_buf) { + // Conv2D Sub-Pipeline + q7xq15_q7_convolution((Q7_T*)mem_buf, CBR1F, (Q7_T*)(mem_buf + 76800), + CONV2D_N, CBR1F_H, CBR1F_W, CBR1F_CIN, CBR1F_HF, CBR1F_WF, CBR1F_CF, + CONV2D_COUT, CONV2D_HOUT, CONV2D_WOUT, CBR1F_G, CBR1F_HPADL, CBR1F_HPADR, + CBR1F_WPADL, CBR1F_WPADR, CBR1F_HSTRIDE, CBR1F_WSTRIDE, CBR1F_HDILATION, + CBR1F_WDILATION, CBR1F_Scinput, CBR1F_Scoutput, CBR1F_Demote); + + q7xq15_q7_t_add_vec((Q7_T*)(mem_buf + 76800), CBR1B, CONV2D_N, CONV2D_HOUT, + CONV2D_WOUT, CONV2D_COUT, (Q7_T*)mem_buf, CBR1B_Scten, CBR1B_Scvec, + CBR1B_Scret); + + q7xq15_q7_convolution((Q7_T*)mem_buf, CBR1W, (Q7_T*)mem_buf, CONV2D_N, + CONV2D_HOUT, CONV2D_WOUT, CONV2D_COUT, CBR1W_HF, CBR1W_WF, CBR1W_CF, + CBR1W_COUT, CONV2D_HOUT, CONV2D_WOUT, CBR1W_G, CBR1W_HPADL, CBR1W_HPADR, + CBR1W_WPADL, CBR1W_WPADR, CBR1W_HSTRIDE, CBR1W_WSTRIDE, CBR1W_HDILATION, + CBR1W_WDILATION, CBR1W_Scinput, CBR1W_Scoutput, CBR1W_Demote); + + q7_t_relu((Q7_T*)mem_buf, CONV2D_N, CONV2D_HOUT, CONV2D_WOUT, CONV2D_COUT, + (Q7_T*)(mem_buf + 76800), CONV2D_Limit, CONV2D_Div); + + Q7_T* mem_buf_offset_q7 = (Q7_T*)mem_buf; + Q15_T* mem_buf_offset_q15 = (Q15_T*)mem_buf; + + // RNNPool Sub-Pipeline + memset(mem_buf, 0, sizeof(Q7_T) * 19200); + memset((mem_buf + 19200), 0, sizeof(Q15_T)); + memset((mem_buf + 19202), 0, sizeof(Q15_T)); + + for (ITER_T patchX = 0; patchX < 14; patchX++) { + for (ITER_T patchY = 0; patchY < 19; patchY++) { + q7xq15_q15_rnnpool_block((Q7_T*)(mem_buf + 76800 + ((5120 * patchX) + (32 * patchY))), + INPUT_CHANNELS, PATCH_DIM, CONV2D_WOUT, q7xq15_q15_fastgrnn, HIDDEN_DIM1, + (const void*)(&RNN1_PARAMS), (void*)(&RNN1_BUFFERS), + (const void*)(&RNN1_SCALES), q15_fastgrnn, HIDDEN_DIM2, + (const void*)(&RNN2_PARAMS), (void*)(&RNN2_BUFFERS), + (const void*)(&RNN2_SCALES), (Q15_T*)(mem_buf + 19204), + (Q15_T*)(mem_buf + 21252), ShR1, ShL1, ShR2, ShL2); + + for (ITER_T i = 0; i < 64; i++) { + mem_buf_offset_q7[patchX * 1280 + patchY * 64 + i] = (Q7_T)(mem_buf_offset_q15[9602 + i]); + } + } + } + + memcpy(&mem_buf_offset_q7[14 * 1280], &mem_buf_offset_q7[13 * 1280], + 19 * 64 * sizeof(Q7_T)); + for (ITER_T i = 0; i < 15; i++) { + memcpy(&mem_buf_offset_q7[19 * 64 + i * 1280], + &mem_buf_offset_q7[18 * 64 + i * 1280], 64 * sizeof(Q7_T)); + } + + // MBConv Sub-Pipeline + // MBConv Layer 1 + q7xq15_q15_mbconv_block((Q7_T*)mem_buf, L1_F1, L1_W1, L1_B1, L1_F2, L1_W2, + L1_B2, L1_F3, L1_W3, L1_B3, (Q15_T*)(mem_buf + 19200), + (Q15_T*)(mem_buf + 38400), (Q15_T*)(mem_buf + 54272), L1_N, L1_H, L1_W, + L1_CIN, L1_CTEMP, L1_HF, L1_WF, L1_COUT, L1_HOUT, L1_WOUT, L1_HPADL, + L1_HPADR, L1_WPADL, L1_WPADR, L1_HSTRIDE, L1_WSTRIDE, L1_Limit1, L1_Limit2, + L1_ShRU1, L1_ShRX1, L1_ShRU2, L1_ShRX2, L1_ShRU3, L1_ShRW3, L1_ShLU1, + L1_ShLX1, L1_ShLU2, L1_ShLX2, L1_ShLU3, L1_ShLW3); + + // Detection Layer 1 Sub-Pipeline + q15_t_l2_norm((Q15_T*)(mem_buf + 19200), L1_N, L1_HOUT, L1_WOUT, L1_COUT, + (Q15_T*)(mem_buf + 38400), D1_ScaleIn, D1_ScaleOut); + + q15_convolution((Q15_T*)(mem_buf + 38400), D1NW, (Q15_T*)(mem_buf + 38400), + L1_N, L1_HOUT, L1_WOUT, L1_COUT, D1NW_HF, D1NW_WF, D1NW_CF, D1NW_COUT, + L1_HOUT, L1_WOUT, D1NW_G, D1NW_HPADL, D1NW_HPADR, D1NW_WPADL, D1NW_WPADR, + D1NW_HSTRIDE, D1NW_WSTRIDE, D1NW_HDILATION, D1NW_WDILATION, D1NW_Scinput, + D1NW_Scoutput, D1NW_Demote); + + q15_convolution((Q15_T*)(mem_buf + 38400), D1CW, (Q15_T*)mem_buf, L1_N, + L1_HOUT, L1_WOUT, D1NW_COUT * D1NW_G, D1CW_HF, D1CW_WF, D1CW_CF, D1CW_COUT, + L1_HOUT, L1_WOUT, D1CW_G, D1CW_HPADL, D1CW_HPADR, D1CW_WPADL, D1CW_WPADR, + D1CW_HSTRIDE, D1CW_WSTRIDE, D1CW_HDILATION, D1CW_WDILATION, D1CW_Scinput, + D1CW_Scoutput, D1CW_Demote); + + q15_t_add_vec((Q15_T*)mem_buf, D1CB, L1_N, L1_HOUT, L1_WOUT, + D1CW_COUT, (Q15_T*)mem_buf, D1CB_Scten, D1CB_Scvec, D1CB_Scret); + + q15_convolution((Q15_T*)(mem_buf + 38400), D1LW, (Q15_T*)(mem_buf + 2400), + L1_N, L1_HOUT, L1_WOUT, D1NW_COUT * D1NW_G, D1LW_HF, D1LW_WF, D1LW_CF, + D1LW_COUT, L1_HOUT, L1_WOUT, D1LW_G, D1LW_HPADL, D1LW_HPADR, D1LW_WPADL, + D1LW_WPADR, D1LW_HSTRIDE, D1LW_WSTRIDE, D1LW_HDILATION, D1LW_WDILATION, + D1LW_Scinput, D1LW_Scoutput, D1LW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 2400), D1LB, L1_N, L1_HOUT, L1_WOUT, + D1LW_COUT, (Q15_T*)(mem_buf + 2400), D1LB_Scten, D1LB_Scvec, D1LB_Scret); + + memset((mem_buf_offset_q15 + 2400), 0, sizeof(Q15_T) * 600); + memset(mem_buf_offset_q15 + 3000, 0, sizeof(Q15_T) * 1); + memset((mem_buf_offset_q15 + 3001), 0, sizeof(Q15_T) * 1); + + for (ITER_T i = 0; i < 15; i++) { + for (ITER_T j = 0; j < 20; j++) { + for (ITER_T k = 0; k < 3; k++) { + mem_buf_offset_q15[3005 + k] = mem_buf_offset_q15[(i * 80 + j * 4 + k)]; + } + + ITER_T index; + q15_v_argmax(&mem_buf_offset_q15[3005], 3, &index); + + mem_buf_offset_q15[2400 + (i * 40 + j * 2)] = mem_buf_offset_q15[(i * 80 + j * 4 + index)]; + mem_buf_offset_q15[2400 + (i * 40 + j * 2 + 1)] = mem_buf_offset_q15[(i * 80 + j * 4 + 3)]; + } + } + + // MBConv Layer 2 + q15_mbconv_block((Q15_T*)(mem_buf + 19200), L2_F1, L2_W1, L2_B1, L2_F2, + L2_W2, L2_B2, L2_F3, L2_W3, L2_B3, (Q15_T*)(mem_buf + 38400), + (Q15_T*)(mem_buf + 6000), (Q15_T*)(mem_buf + 256), L2_N, L2_H, L2_W, + L2_CIN, L2_CTEMP, L2_HF, L2_WF, L2_COUT, L2_HOUT, L2_WOUT, L2_HPADL, + L2_HPADR, L2_WPADL, L2_WPADR, L2_HSTRIDE, L2_WSTRIDE, L2_Limit1, L2_Limit2, + L2_ShRU1, L2_ShRX1, L2_ShRU2, L2_ShRX2, L2_ShRU3, L2_ShRW3, L2_ShLU1, + L2_ShLX1, L2_ShLU2, L2_ShLX2, L2_ShLU3, L2_ShLW3); + + // Detection Layer 2 Sub-Pipeline + q15_t_l2_norm((Q15_T*)(mem_buf + 38400), L2_N, L2_HOUT, L2_WOUT, L2_COUT, + (Q15_T*)(mem_buf + 96000), D2_ScaleIn, D2_ScaleOut); + + q15_convolution((Q15_T*)(mem_buf + 96000), D2NW, (Q15_T*)(mem_buf + 96000), + L2_N, L2_HOUT, L2_WOUT, L2_COUT, D2NW_HF, D2NW_WF, D2NW_CF, D2NW_COUT, + L2_HOUT, L2_WOUT, D2NW_G, D2NW_HPADL, D2NW_HPADR, D2NW_WPADL, D2NW_WPADR, + D2NW_HSTRIDE, D2NW_WSTRIDE, D2NW_HDILATION, D2NW_WDILATION, D2NW_Scinput, + D2NW_Scoutput, D2NW_Demote); + + q15_convolution((Q15_T*)(mem_buf + 96000), D2CW, (Q15_T*)mem_buf, L2_N, + L2_HOUT, L2_WOUT, D2NW_COUT * D2NW_G, D2CW_HF, D2CW_WF, D2CW_CF, D2CW_COUT, + L2_HOUT, L2_WOUT, D2CW_G, D2CW_HPADL, D2CW_HPADR, D2CW_WPADL, D2CW_WPADR, + D2CW_HSTRIDE, D2CW_WSTRIDE, D2CW_HDILATION, D2CW_WDILATION, D2CW_Scinput, + D2CW_Scoutput, D2CW_Demote); + + q15_t_add_vec((Q15_T*)mem_buf, D2CB, L2_N, L2_HOUT, L2_WOUT, + D2CW_COUT, (Q15_T*)mem_buf, D2CB_Scten, D2CB_Scvec, D2CB_Scret); + + q15_convolution((Q15_T*)(mem_buf + 96000), D2LW, (Q15_T*)(mem_buf + 9456), + L2_N, L2_HOUT, L2_WOUT, D2NW_COUT * D2NW_G, D2LW_HF, D2LW_WF, D2LW_CF, + D2LW_COUT, L2_HOUT, L2_WOUT, D2LW_G, D2LW_HPADL, D2LW_HPADR, D2LW_WPADL, + D2LW_WPADR, D2LW_HSTRIDE, D2LW_WSTRIDE, D2LW_HDILATION, D2LW_WDILATION, + D2LW_Scinput, D2LW_Scoutput, D2LW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 9456), D2LB, L2_N, L2_HOUT, L2_WOUT, + D2LW_COUT, (Q15_T*)(mem_buf + 6000), D2LB_Scten, D2LB_Scvec, D2LB_Scret); + + // MBConv Layer 3 + q15xq7_q15_mbconv_block((Q15_T*)(mem_buf + 38400), L3_F1, L3_W1, L3_B1, + L3_F2, L3_W2, L3_B2, L3_F3, L3_W3, L3_B3, (Q15_T*)(mem_buf + 96000), + (Q15_T*)(mem_buf + 8400), (Q15_T*)(mem_buf + 1968), L3_N, L3_H, L3_W, + L3_CIN, L3_CTEMP, L3_HF, L3_WF, L3_COUT, L3_HOUT, L3_WOUT, L3_HPADL, + L3_HPADR, L3_WPADL, L3_WPADR, L3_HSTRIDE, L3_WSTRIDE, L3_Limit1, L3_Limit2, + L3_ShRU1, L3_ShRX1, L3_ShRU2, L3_ShRX2, L3_ShRU3, L3_ShRW3, L3_ShLU1, + L3_ShLX1, L3_ShLU2, L3_ShLX2, L3_ShLU3, L3_ShLW3); + + // MBConv2 + MBConv3 + q15_t_add((Q15_T*)(mem_buf + 38400), (Q15_T*)(mem_buf + 96000), L3_N, L3_HOUT, + L3_WOUT, L3_COUT, (Q15_T*)(mem_buf + 8400), L3_Scten1, L3_Scten2, L3_Scret); + + // MBConv Layer 4 + q15xq7_q15_mbconv_block((Q15_T*)(mem_buf + 8400), L4_F1, L4_W1, L4_B1, L4_F2, + L4_W2, L4_B2, L4_F3, L4_W3, L4_B3, (Q15_T*)(mem_buf + 66000), + (Q15_T*)(mem_buf + 142800), (Q15_T*)(mem_buf + 1968), L4_N, L4_H, L4_W, + L4_CIN, L4_CTEMP, L4_HF, L4_WF, L4_COUT, L4_HOUT, L4_WOUT, L4_HPADL, + L4_HPADR, L4_WPADL, L4_WPADR, L4_HSTRIDE, L4_WSTRIDE, L4_Limit1, L4_Limit2, + L4_ShRU1, L4_ShRX1, L4_ShRU2, L4_ShRX2, L4_ShRU3, L4_ShRW3, L4_ShLU1, + L4_ShLX1, L4_ShLU2, L4_ShLX2, L4_ShLU3, L4_ShLW3); + + // Detection Layer 3 Sub-Pipeline + q15_t_l2_norm((Q15_T*)(mem_buf + 66000), L4_N, L4_HOUT, L4_WOUT, L4_COUT, + (Q15_T*)(mem_buf + 8400), D3_ScaleIn, D3_ScaleOut); + + q15_convolution((Q15_T*)(mem_buf + 8400), D3NW, (Q15_T*)(mem_buf + 8400), + L4_N, L4_HOUT, L4_WOUT, L4_COUT, D3NW_HF, D3NW_WF, D3NW_CF, D3NW_COUT, + L4_HOUT, L4_WOUT, D3NW_G, D3NW_HPADL, D3NW_HPADR, D3NW_WPADL, D3NW_WPADR, + D3NW_HSTRIDE, D3NW_WSTRIDE, D3NW_HDILATION, D3NW_WDILATION, D3NW_Scinput, + D3NW_Scoutput, D3NW_Demote); + + q15_convolution((Q15_T*)(mem_buf + 8400), D3CW, (Q15_T*)(mem_buf + 89808), + L4_N, L4_HOUT, L4_WOUT, D3NW_COUT * D3NW_G, D3CW_HF, D3CW_WF, D3CW_CF, + D3CW_COUT, L4_HOUT, L4_WOUT, D3CW_G, D3CW_HPADL, D3CW_HPADR, D3CW_WPADL, + D3CW_WPADR, D3CW_HSTRIDE, D3CW_WSTRIDE, D3CW_HDILATION, D3CW_WDILATION, + D3CW_Scinput, D3CW_Scoutput, D3CW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 89808), D3CB, L4_N, L4_HOUT, L4_WOUT, + D3CW_COUT, (Q15_T*)(mem_buf + 85200), D3CB_Scten, D3CB_Scvec, D3CB_Scret); + + q15_convolution((Q15_T*)(mem_buf + 8400), D3LW, (Q15_T*)(mem_buf + 91008), + L4_N, L4_HOUT, L4_WOUT, D3NW_COUT * D3NW_G, D3LW_HF, D3LW_WF, D3LW_CF, + D3LW_COUT, L4_HOUT, L4_WOUT, D3LW_G, D3LW_HPADL, D3LW_HPADR, D3LW_WPADL, + D3LW_WPADR, D3LW_HSTRIDE, D3LW_WSTRIDE, D3LW_HDILATION, D3LW_WDILATION, + D3LW_Scinput, D3LW_Scoutput, D3LW_Demote); + + q15_t_add_vec((Q15_T*)(mem_buf + 91008), D3LB, L4_N, L4_HOUT, L4_WOUT, + D3LW_COUT, (Q15_T*)(mem_buf + 8400), D3LB_Scten, D3LB_Scvec, D3LB_Scret); + + // Re-ordering the outputs + memset((mem_buf_offset_q15 + 5400), 0, sizeof(Q15_T) * 5400); + memcpy(&mem_buf_offset_q15[5400], &mem_buf_offset_q15[2400], 600 * sizeof(Q15_T)); + + for (ITER_T i = 0; i < 600; i++) { + mem_buf_offset_q15[5400 + (i + 600)] = (mem_buf_offset_q15[i] / 2); + } + + memcpy(&mem_buf_offset_q15[5400 + 1200], &mem_buf_offset_q15[42600], 600 * sizeof(Q15_T)); + memcpy(&mem_buf_offset_q15[5400 + 1800], &mem_buf_offset_q15[1200], 1200 * sizeof(Q15_T)); + memcpy(&mem_buf_offset_q15[5400 + 3000], &mem_buf_offset_q15[3000], 1200 * sizeof(Q15_T)); + + for (ITER_T i = 0; i < 1200; i++) { + mem_buf_offset_q15[5400 + (i + 4200)] = (mem_buf_offset_q15[4200 + i] / 2); + } +} diff --git a/c_reference/models/quantized_face_detection_fast.h b/c_reference/models/quantized_face_detection_fast.h new file mode 100644 index 000000000..b7b676c26 --- /dev/null +++ b/c_reference/models/quantized_face_detection_fast.h @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +#ifndef __QUANTIZED_FACE_DETECTION_FAST_H__ +#define __QUANTIZED_FACE_DETECTION_FAST_H__ + +/** + * @brief Routine for running the entire face detection model pipeline. + * @param[in, out] mem_buf pointer to the singleton memory buffer for input, intermediate computations and output, used for fragmentation invariance + * @return none + * @example + */ +void q_face_detection_fast(char* const mem_buf); + +#endif diff --git a/c_reference/src/quantized_fastgrnn.c b/c_reference/src/quantized_fastgrnn.c index 1108bba55..95357db11 100644 --- a/c_reference/src/quantized_fastgrnn.c +++ b/c_reference/src/quantized_fastgrnn.c @@ -3,13 +3,13 @@ #include "quantized_fastgrnn.h" -int q_fastgrnn_lr(INT_T* const hiddenState, ITER_T hiddenDims, - const INT_T* const input, ITER_T inputDims, ITER_T steps, - const void* params, void* buffers, const void *scales, - int backward, int normalize) { - const Q_FastGRNN_LR_Params* tparams = (const Q_FastGRNN_LR_Params*)params; - Q_FastGRNN_LR_Buffers* tbuffers = (Q_FastGRNN_LR_Buffers*)buffers; - const Q_FastGRNN_LR_Scales* tscales = (const Q_FastGRNN_LR_Scales*)scales; +int q15_fastgrnn_lr(Q15_T* const hiddenState, ITER_T hiddenDims, + const Q15_T* const input, ITER_T inputDims, ITER_T steps, const void* params, + void* buffers, const void *scales, int backward, int normalize) { + + const Q15_FastGRNN_LR_Params* tparams = (const Q15_FastGRNN_LR_Params*)params; + Q15_FastGRNN_LR_Buffers* tbuffers = (Q15_FastGRNN_LR_Buffers*)buffers; + const Q15_FastGRNN_LR_Scales* tscales = (const Q15_FastGRNN_LR_Scales*)scales; if (tbuffers->preComp1 == 0) return ERR_PRECOMP_NOT_INIT; if (tbuffers->preComp2 == 0) return ERR_PRECOMP_NOT_INIT; @@ -25,75 +25,158 @@ int q_fastgrnn_lr(INT_T* const hiddenState, ITER_T hiddenDims, if (normalize) { // This diverges from the original implementation because of // impracticality of scaled addition beyond 0, 1, and -1 multipliers - v_q_sub(input + offset * inputDims, tparams->mean + offset * inputDims, - inputDims, tbuffers->normFeatures, tscales->input, - tscales->mean, tscales->meanSub); + q15_v_sub(input + offset * inputDims, tparams->mean + offset * inputDims, + inputDims, tbuffers->normFeatures, tscales->input, tscales->mean, + tscales->meanSub); // Assuming the stdDev values are stored in inverse form - v_q_hadamard(tparams->stdDev + offset * inputDims, tbuffers->normFeatures, - inputDims, tbuffers->normFeatures, tscales->stdDev, - tscales->normFeaturesHDStdDev); + q15_v_hadamard(tparams->stdDev + offset * inputDims, + tbuffers->normFeatures, inputDims, tbuffers->normFeatures, + tscales->stdDev, tscales->normFeaturesHDStdDev); + } + else { + for (ITER_T d = 0; d < inputDims; ++d) { + tbuffers->normFeatures[d] = input[offset * inputDims + d]; + } + } + + // Process the new input and previous hidden state + q15_m_mulvec(tparams->W1, tbuffers->normFeatures, tparams->wRank, + inputDims, tbuffers->tempLRW, tscales->W1, tscales->normFeaturesMVW1, + tscales->H1W1, tscales->H2W1); + q15_m_mulvec(tparams->W2, tbuffers->tempLRW, hiddenDims, tparams->wRank, + tbuffers->preComp1, tscales->W2, tscales->tempLRW, tscales->H1W2, + tscales->H2W2); + q15_m_mulvec(tparams->U1, hiddenState, tparams->uRank, hiddenDims, + tbuffers->tempLRU, tscales->U1, tscales->hiddenStateMVU1,tscales->H1U1, + tscales->H2U1); + q15_m_mulvec(tparams->U2, tbuffers->tempLRU, hiddenDims, tparams->uRank, + tbuffers->preComp2, tscales->U2, tscales->tempLRU, tscales->H1U2, + tscales->H2U2); + q15_v_add(tbuffers->preComp1, tbuffers->preComp2, hiddenDims, + tbuffers->preComp1, tscales->mV2AddMV4, tscales->mV4AddMV2, + tscales->mV2AddMV4Out, tscales->mV2AddMV4Demote); + + // Apply the gate to generate the new hidden state + q15_v_add(tbuffers->preComp1, tparams->Bg, hiddenDims, tbuffers->preComp2, + tscales->pC1AddBg, tscales->Bg, tscales->pC1AddBgOut, + tscales->pC1AddBgDemote); + q15_v_sigmoid(tbuffers->preComp2, hiddenDims, tbuffers->preComp2, + tscales->div, tscales->add, tscales->sigmoidLimit, + tscales->sigmoidScaleIn, tscales->sigmoidScaleOut, + tscales->useTableSigmoid); + q15_v_add(tbuffers->preComp1, tparams->Bh, hiddenDims, tbuffers->preComp1, + tscales->pC1AddBh, tscales->Bh, tscales->pC1AddBhOut, + tscales->pC1AddBhDemote); + q15_v_tanh(tbuffers->preComp1, hiddenDims, tbuffers->preComp1, + tscales->tanhScaleIn, tscales->tanhScaleOut, tscales->useTableTanH); + q15_v_hadamard(tbuffers->preComp2, hiddenState, hiddenDims, + tbuffers->preComp3, tscales->gateHDHiddenState, + tscales->hiddenStateHDGate); + q15_v_scalar_sub(tscales->qOne, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->qOneScale, tscales->qOneSubGate, + tscales->qOneSubGateOut); + q15_v_scalar_mul(tparams->sigmoid_zeta, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->sigmoidZeta, + tscales->sigmoidZetaMulQOneSubGate); + q15_v_scalar_add(tparams->sigmoid_nu, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->sigmoidNu, tscales->sigmoidNuAddQOneSubGate, + tscales->sigmoidNuAddQOneSubGateOut); + q15_v_hadamard(tbuffers->preComp2, tbuffers->preComp1, hiddenDims, + tbuffers->preComp1, tscales->sigmoidNuAddQOneSubGateHDUpdate, + tscales->updateHDSigmoidNuAddQOneSubGate); + q15_v_add(tbuffers->preComp3, tbuffers->preComp1, hiddenDims, hiddenState, + tscales->pC3AddPC1, tscales->pC1AddPC3, tscales->hiddenStateOut, + tscales->hiddenStateDemote); + } + return 0; +} + +int q7xq15_q15_fastgrnn(Q15_T* const hiddenState, ITER_T hiddenDims, + const Q7_T* const input, ITER_T inputDims, ITER_T steps, const void* params, + void* buffers, const void* scales, int backward, int normalize) { + + const Q7xQ15_FastGRNN_Params* tparams = (const Q7xQ15_FastGRNN_Params*)params; + Q7xQ15_FastGRNN_Buffers* tbuffers = (Q7xQ15_FastGRNN_Buffers*)buffers; + const Q15_FastGRNN_Scales* tscales = (const Q15_FastGRNN_Scales*)scales; + + if (tbuffers->preComp1 == 0) return ERR_PRECOMP_NOT_INIT; + if (tbuffers->preComp2 == 0) return ERR_PRECOMP_NOT_INIT; + if (tbuffers->preComp3 == 0) return ERR_PRECOMP_NOT_INIT; + if (tbuffers->normFeatures == 0) return ERR_NORMFEATURES_NOT_INIT; + + for (ITER_T t = 0; t < steps; t++) { + // Normalize the features + ITER_T offset = backward ? steps - 1 - t : t; + if (normalize) { + // This diverges from the original implementation because of + // impracticality of scaled addition beyond 0, 1, and -1 multipliers + q7_v_sub(input + offset * inputDims, tparams->mean + offset * inputDims, + inputDims, tbuffers->normFeatures, tscales->input, tscales->mean, + tscales->meanSub); + // Assuming stdDev values are stored in inverse form + q7_v_hadamard(tparams->stdDev + offset * inputDims, + tbuffers->normFeatures, inputDims, tbuffers->normFeatures, + tscales->stdDev, tscales->normFeaturesHDStdDev); } else { - for (ITER_T d = 0; d < inputDims; ++d) + for (ITER_T d = 0; d < inputDims; ++d) { tbuffers->normFeatures[d] = input[offset * inputDims + d]; + } } // Process the new input and previous hidden state - m_q_mulvec(tparams->W1, tbuffers->normFeatures, tparams->wRank, inputDims, - tbuffers->tempLRW, tscales->W1, tscales->normFeaturesMVW1, tscales->H1W1, - tscales->H2W1); - m_q_mulvec(tparams->W2, tbuffers->tempLRW, hiddenDims, tparams->wRank, - tbuffers->preComp1, tscales->W2, tscales->tempLRW, tscales->H1W2, - tscales->H2W2); - m_q_mulvec(tparams->U1, hiddenState, tparams->uRank, hiddenDims, - tbuffers->tempLRU, tscales->U1, tscales->hiddenStateMVU1, tscales->H1U1, - tscales->H2U1); - m_q_mulvec(tparams->U2, tbuffers->tempLRU, hiddenDims, tparams->uRank, - tbuffers->preComp2, tscales->U2, tscales->tempLRU, tscales->H1U2, - tscales->H2U2); - v_q_add(tbuffers->preComp1, tbuffers->preComp2, hiddenDims, - tbuffers->preComp1, tscales->mV2AddMV4, tscales->mV4AddMV2, - tscales->mV2AddMV4Out); + q15xq7_q15_m_mulvec(tparams->W, tbuffers->normFeatures, hiddenDims, + inputDims, tbuffers->preComp1, tscales->W, tscales->normFeaturesMVW, + tscales->H1W, tscales->H2W); + q15_m_mulvec(tparams->U, hiddenState, hiddenDims, hiddenDims, + tbuffers->preComp2, tscales->U, tscales->hiddenStateMVU, tscales->H1U, + tscales->H2U); + q15_v_add(tbuffers->preComp1, tbuffers->preComp2, hiddenDims, + tbuffers->preComp1, tscales->mV1AddMV2, tscales->mV2AddMV1, + tscales->mV1AddMV2Out, tscales->mV1AddMV2Demote); // Apply the gate to generate the new hidden state - v_q_add(tbuffers->preComp1, tparams->Bg, hiddenDims, tbuffers->preComp2, - tscales->pC1AddBg, tscales->Bg, tscales->pC1AddBgOut); - v_q_sigmoid(tbuffers->preComp2, hiddenDims, tbuffers->preComp2, tscales->div, - tscales->add, tscales->sigmoidLimit, tscales->sigmoidScaleIn, - tscales->sigmoidScaleOut); - v_q_add(tbuffers->preComp1, tparams->Bh, hiddenDims, tbuffers->preComp1, - tscales->pC1AddBh, tscales->Bh, tscales->pC1AddBhOut); - v_q_tanh(tbuffers->preComp1, hiddenDims, tbuffers->preComp1, - tscales->tanhScaleIn, tscales->tanhScaleOut); - v_q_hadamard(tbuffers->preComp2, hiddenState, hiddenDims, tbuffers->preComp3, - tscales->gateHDHiddenState, tscales->hiddenStateHDGate); - v_q_scalar_sub(tscales->qOne, tbuffers->preComp2, hiddenDims, - tbuffers->preComp2, tscales->qOneScale, tscales->qOneSubGate, - tscales->qOneSubGateOut); - v_q_scalar_mul(tparams->sigmoid_zeta, tbuffers->preComp2, hiddenDims, - tbuffers->preComp2, tscales->sigmoidZeta, - tscales->sigmoidZetaMulQOneSubGate); - v_q_scalar_add(tparams->sigmoid_nu, tbuffers->preComp2, hiddenDims, - tbuffers->preComp2, tscales->sigmoidNu, - tscales->sigmoidNuAddQOneSubGate, - tscales->sigmoidNuAddQOneSubGateOut); - v_q_hadamard(tbuffers->preComp2, tbuffers->preComp1, hiddenDims, - tbuffers->preComp1, tscales->sigmoidNuAddQOneSubGateHDUpdate, - tscales->updateHDSigmoidNuAddQOneSubGate); - v_q_add(tbuffers->preComp3, tbuffers->preComp1, hiddenDims, hiddenState, - tscales->pC3AddPC1, tscales->pC1AddPC3, tscales->hiddenStateOut); + q15_v_add(tbuffers->preComp1, tparams->Bg, hiddenDims, tbuffers->preComp2, + tscales->pC1AddBg, tscales->Bg, tscales->pC1AddBgOut, + tscales->pC1AddBgDemote); + q15_v_sigmoid(tbuffers->preComp2, hiddenDims, tbuffers->preComp2, + tscales->div, tscales->add, tscales->sigmoidLimit, + tscales->sigmoidScaleIn, tscales->sigmoidScaleOut, + tscales->useTableSigmoid); + q15_v_add(tbuffers->preComp1, tparams->Bh, hiddenDims, tbuffers->preComp1, + tscales->pC1AddBh, tscales->Bh, tscales->pC1AddBhOut, + tscales->pC1AddBhDemote); + q15_v_tanh(tbuffers->preComp1, hiddenDims, tbuffers->preComp1, + tscales->tanhScaleIn, tscales->tanhScaleOut, tscales->useTableTanH); + q15_v_hadamard(tbuffers->preComp2, hiddenState, hiddenDims, + tbuffers->preComp3, tscales->gateHDHiddenState, + tscales->hiddenStateHDGate); + q15_v_scalar_sub(tscales->qOne, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->qOneScale, tscales->qOneSubGate, + tscales->qOneSubGateOut); + q15_v_scalar_mul(tparams->sigmoid_zeta, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->sigmoidZeta, + tscales->sigmoidZetaMulQOneSubGate); + q15_v_scalar_add(tparams->sigmoid_nu, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->sigmoidNu, tscales->sigmoidNuAddQOneSubGate, + tscales->sigmoidNuAddQOneSubGateOut); + q15_v_hadamard(tbuffers->preComp2, tbuffers->preComp1, hiddenDims, + tbuffers->preComp1, tscales->sigmoidNuAddQOneSubGateHDUpdate, + tscales->updateHDSigmoidNuAddQOneSubGate); + q15_v_add(tbuffers->preComp3, tbuffers->preComp1, hiddenDims, hiddenState, + tscales->pC3AddPC1, tscales->pC1AddPC3, tscales->hiddenStateOut, + tscales->hiddenStateDemote); } return 0; } -int q_fastgrnn(INT_T* const hiddenState, ITER_T hiddenDims, - const INT_T* const input, ITER_T inputDims, ITER_T steps, - const void* params, void* buffers, const void* scales, - int backward, int normalize) { +int q15_fastgrnn(Q15_T* const hiddenState, ITER_T hiddenDims, + const Q15_T* const input, ITER_T inputDims, ITER_T steps, const void* params, + void* buffers, const void* scales, int backward, int normalize) { - const Q_FastGRNN_Params* tparams = (const Q_FastGRNN_Params*)params; - Q_FastGRNN_Buffers* tbuffers = (Q_FastGRNN_Buffers*)buffers; - const Q_FastGRNN_Scales* tscales = (const Q_FastGRNN_Scales*)scales; + const Q15_FastGRNN_Params* tparams = (const Q15_FastGRNN_Params*)params; + Q15_FastGRNN_Buffers* tbuffers = (Q15_FastGRNN_Buffers*)buffers; + const Q15_FastGRNN_Scales* tscales = (const Q15_FastGRNN_Scales*)scales; if (tbuffers->preComp1 == 0) return ERR_PRECOMP_NOT_INIT; if (tbuffers->preComp2 == 0) return ERR_PRECOMP_NOT_INIT; @@ -106,57 +189,62 @@ int q_fastgrnn(INT_T* const hiddenState, ITER_T hiddenDims, if (normalize) { // This diverges from the original implementation because of // impracticality of scaled addition beyond 0, 1, and -1 multipliers - v_q_sub(input + offset * inputDims, tparams->mean + offset * inputDims, - inputDims, tbuffers->normFeatures, tscales->input, - tscales->mean, tscales->meanSub); + q15_v_sub(input + offset * inputDims, tparams->mean + offset * inputDims, + inputDims, tbuffers->normFeatures, tscales->input, tscales->mean, + tscales->meanSub); // Assuming stdDev values are stored in inverse form - v_q_hadamard(tparams->stdDev + offset * inputDims, tbuffers->normFeatures, - inputDims, tbuffers->normFeatures, tscales->stdDev, - tscales->normFeaturesHDStdDev); + q15_v_hadamard(tparams->stdDev + offset * inputDims, + tbuffers->normFeatures, inputDims, tbuffers->normFeatures, + tscales->stdDev, tscales->normFeaturesHDStdDev); } else { - for (ITER_T d = 0; d < inputDims; ++d) + for (ITER_T d = 0; d < inputDims; ++d) { tbuffers->normFeatures[d] = input[offset * inputDims + d]; + } } // Process the new input and previous hidden state - m_q_mulvec(tparams->W, tbuffers->normFeatures, hiddenDims, inputDims, - tbuffers->preComp1, tscales->W, tscales->normFeaturesMVW, tscales->H1W, - tscales->H2W); - m_q_mulvec(tparams->U, hiddenState, hiddenDims, hiddenDims, - tbuffers->preComp2, tscales->U, tscales->hiddenStateMVU, tscales->H1U, - tscales->H2U); - v_q_add(tbuffers->preComp1, tbuffers->preComp2, hiddenDims, - tbuffers->preComp1, tscales->mV1AddMV2, tscales->mV2AddMV1, - tscales->mV1AddMV2Out); + q15_m_mulvec(tparams->W, tbuffers->normFeatures, hiddenDims, inputDims, + tbuffers->preComp1, tscales->W, tscales->normFeaturesMVW, tscales->H1W, + tscales->H2W); + q15_m_mulvec(tparams->U, hiddenState, hiddenDims, hiddenDims, + tbuffers->preComp2, tscales->U, tscales->hiddenStateMVU, tscales->H1U, + tscales->H2U); + q15_v_add(tbuffers->preComp1, tbuffers->preComp2, hiddenDims, + tbuffers->preComp1, tscales->mV1AddMV2, tscales->mV2AddMV1, + tscales->mV1AddMV2Out, tscales->mV1AddMV2Demote); // Apply the gate to generate the new hidden state - v_q_add(tbuffers->preComp1, tparams->Bg, hiddenDims, tbuffers->preComp2, - tscales->pC1AddBg, tscales->Bg, tscales->pC1AddBgOut); - v_q_sigmoid(tbuffers->preComp2, hiddenDims, tbuffers->preComp2, tscales->div, - tscales->add, tscales->sigmoidLimit, tscales->sigmoidScaleIn, - tscales->sigmoidScaleOut); - v_q_add(tbuffers->preComp1, tparams->Bh, hiddenDims, tbuffers->preComp1, - tscales->pC1AddBh, tscales->Bh, tscales->pC1AddBhOut); - v_q_tanh(tbuffers->preComp1, hiddenDims, tbuffers->preComp1, - tscales->tanhScaleIn, tscales->tanhScaleOut); - v_q_hadamard(tbuffers->preComp2, hiddenState, hiddenDims, tbuffers->preComp3, - tscales->gateHDHiddenState, tscales->hiddenStateHDGate); - v_q_scalar_sub(tscales->qOne, tbuffers->preComp2, hiddenDims, - tbuffers->preComp2, tscales->qOneScale, tscales->qOneSubGate, - tscales->qOneSubGateOut); - v_q_scalar_mul(tparams->sigmoid_zeta, tbuffers->preComp2, hiddenDims, - tbuffers->preComp2, tscales->sigmoidZeta, - tscales->sigmoidZetaMulQOneSubGate); - v_q_scalar_add(tparams->sigmoid_nu, tbuffers->preComp2, hiddenDims, - tbuffers->preComp2, tscales->sigmoidNu, - tscales->sigmoidNuAddQOneSubGate, - tscales->sigmoidNuAddQOneSubGateOut); - v_q_hadamard(tbuffers->preComp2, tbuffers->preComp1, hiddenDims, - tbuffers->preComp1, tscales->sigmoidNuAddQOneSubGateHDUpdate, - tscales->updateHDSigmoidNuAddQOneSubGate); - v_q_add(tbuffers->preComp3, tbuffers->preComp1, hiddenDims, hiddenState, - tscales->pC3AddPC1, tscales->pC1AddPC3, tscales->hiddenStateOut); + q15_v_add(tbuffers->preComp1, tparams->Bg, hiddenDims, tbuffers->preComp2, + tscales->pC1AddBg, tscales->Bg, tscales->pC1AddBgOut, + tscales->pC1AddBgDemote); + q15_v_sigmoid(tbuffers->preComp2, hiddenDims, tbuffers->preComp2, + tscales->div, tscales->add, tscales->sigmoidLimit, + tscales->sigmoidScaleIn, tscales->sigmoidScaleOut, + tscales->useTableSigmoid); + q15_v_add(tbuffers->preComp1, tparams->Bh, hiddenDims, tbuffers->preComp1, + tscales->pC1AddBh, tscales->Bh, tscales->pC1AddBhOut, + tscales->pC1AddBhDemote); + q15_v_tanh(tbuffers->preComp1, hiddenDims, tbuffers->preComp1, + tscales->tanhScaleIn, tscales->tanhScaleOut, tscales->useTableTanH); + q15_v_hadamard(tbuffers->preComp2, hiddenState, hiddenDims, + tbuffers->preComp3, tscales->gateHDHiddenState, + tscales->hiddenStateHDGate); + q15_v_scalar_sub(tscales->qOne, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->qOneScale, tscales->qOneSubGate, + tscales->qOneSubGateOut); + q15_v_scalar_mul(tparams->sigmoid_zeta, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->sigmoidZeta, + tscales->sigmoidZetaMulQOneSubGate); + q15_v_scalar_add(tparams->sigmoid_nu, tbuffers->preComp2, hiddenDims, + tbuffers->preComp2, tscales->sigmoidNu, tscales->sigmoidNuAddQOneSubGate, + tscales->sigmoidNuAddQOneSubGateOut); + q15_v_hadamard(tbuffers->preComp2, tbuffers->preComp1, hiddenDims, + tbuffers->preComp1, tscales->sigmoidNuAddQOneSubGateHDUpdate, + tscales->updateHDSigmoidNuAddQOneSubGate); + q15_v_add(tbuffers->preComp3, tbuffers->preComp1, hiddenDims, hiddenState, + tscales->pC3AddPC1, tscales->pC1AddPC3, tscales->hiddenStateOut, + tscales->hiddenStateDemote); } return 0; } diff --git a/c_reference/src/quantized_mbconv.c b/c_reference/src/quantized_mbconv.c index ac6d64720..b123f506c 100644 --- a/c_reference/src/quantized_mbconv.c +++ b/c_reference/src/quantized_mbconv.c @@ -3,57 +3,603 @@ #include "quantized_mbconv.h" -void q_mbconv_block(const INT_T* const input, const INT_T* const filter1, - const INT_T* const BN1W, const INT_T* const BN1B, const INT_T* const filter2, - const INT_T* const BN2W, const INT_T* const BN2B, const INT_T* const filter3, - const INT_T* const BN3W, const INT_T* const BN3B, INT_T* const output, - INT_T* const convBuffer1, INT_T* const convBuffer2, INTM_T* const treesumBuffer, +void q7_mbconv_block(const Q7_T* const input, const Q7_T* const filter1, + const Q7_T* const BN1W, const Q7_T* const BN1B, const Q7_T* const filter2, + const Q7_T* const BN2W, const Q7_T* const BN2B, const Q7_T* const filter3, + const Q7_T* const BN3W, const Q7_T* const BN3B, Q7_T* const output, + Q7_T* const convBuffer1, Q7_T* const convBuffer2, ITER_T N, ITER_T H, + ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, ITER_T COut, + ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, + S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q15_T limit1, Q15_T limit2, + SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, SCALE_T shrU3, + SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, SCALE_T shlX2, + SCALE_T shlU3, SCALE_T shlW3) { + S_ITER_T HOffsetFL = (HF - 1) >> 1; + S_ITER_T WOffsetFL = (WF - 1) >> 1; + S_ITER_T HOffsetFR = HF >> 1; + S_ITER_T WOffsetFR = WF >> 1; + + S_ITER_T HOffsetL = HOffsetFL - HPadU; + S_ITER_T WOffsetL = WOffsetFL - WPadL; + S_ITER_T HOffsetR = HOffsetFR - HPadD; + S_ITER_T WOffsetR = WOffsetFR - WPadR; + + ITER_T HOffsetIn = W * CIn; + ITER_T NOffsetIn = H * HOffsetIn; + ITER_T HOffsetC1 = W * CTemp; + ITER_T GOffsetF = HF * WF; + ITER_T HOffsetOut = WOut * COut; + ITER_T NOffsetOut = HOut * HOffsetOut; + + Q31_T sum; + for (ITER_T n = 0; n < N; n++) { + ITER_T NIndexIn = n * NOffsetIn; + ITER_T NIndexOut = n * NOffsetOut; + ITER_T margin = 0; + if ((S_ITER_T)HF - HPadU - (S_ITER_T)HStride > 0) { + margin = (ITER_T)((S_ITER_T)HF - HPadU - (S_ITER_T)HStride); + } + + for (ITER_T i = 0; i < margin; i++) { + ITER_T HIndexIn = i * HOffsetIn + NIndexIn; + ITER_T HIndexC1 = i * HOffsetC1; + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q7_T* convBuffer1_offset = ((Q7_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q7_T* input_offset = (Q7_T*)input + WIndexIn; + Q7_T* filter1_offset = (Q7_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + } + + #ifdef SHIFT + Q15_T x = (((Q15_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q15_T)BN1W[k])); + #else + Q15_T x = (((Q15_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q15_T)BN1W[k])); + #endif + x = q15_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif + } + } + } + + ITER_T hout = 0; + for (S_ITER_T h = HOffsetL; h < (S_ITER_T)H - HOffsetR; hout++, h += (S_ITER_T)HStride) { + ITER_T HIndexOut = hout * HOffsetOut + NIndexOut; + for (ITER_T i = 0; i < HStride; i++) { + ITER_T iRed = (i + margin + hout * HStride) % HF; + ITER_T iFull = i + margin + hout * HStride; + ITER_T HIndexC1 = iRed * HOffsetC1; + ITER_T HIndexIn = iFull * HOffsetIn + NIndexIn; + if (iFull < H){ + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q7_T* convBuffer1_offset = ((Q7_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q7_T* input_offset = (Q7_T*)input + WIndexIn; + Q7_T* filter1_offset = (Q7_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q15_T)*input_offset++) * ((Q15_T)*filter1_offset); + filter1_offset += CTemp; + } + + #ifdef SHIFT + Q15_T x = (((Q15_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q15_T)BN1W[k])); + #else + Q15_T x = (((Q15_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q15_T)BN1W[k])); + #endif + x = q15_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif + } + } + } else { + Q7_T* convBuffer1_offset = (Q7_T*)convBuffer1 + HIndexC1; + for (ITER_T j = 0; j < W; j++) { + Q7_T* BN1B_offset = (Q7_T*)BN1B; + Q7_T* BN1W_offset = (Q7_T*)BN1W; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + Q15_T w = q15_relu(((Q15_T)*BN1B_offset++) * ((Q15_T)*BN1W_offset++), limit1); + Q15_T x = q15_relu(((Q15_T)*BN1B_offset++) * ((Q15_T)*BN1W_offset++), limit1); + Q15_T y = q15_relu(((Q15_T)*BN1B_offset++) * ((Q15_T)*BN1W_offset++), limit1); + Q15_T z = q15_relu(((Q15_T)*BN1B_offset++) * ((Q15_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + *convBuffer1_offset++ = ((y << shlX1) >> shrX1); + *convBuffer1_offset++ = ((z << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + *convBuffer1_offset++ = ((x * shlX1) / shrX1); + *convBuffer1_offset++ = ((y * shlX1) / shrX1); + *convBuffer1_offset++ = ((z * shlX1) / shrX1); + #endif + } + #endif + + while (temp_channels--) { + Q15_T w = q15_relu(((Q15_T)*BN1B_offset++) * ((Q15_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + #endif + } + } + } + } + + ITER_T wout = 0; + for (S_ITER_T w = WOffsetL; w < ((S_ITER_T)W) - WOffsetR; wout++, w += ((S_ITER_T)WStride)) { + Q7_T* output_offset = ((Q7_T*)output) + wout * COut + HIndexOut; + for (ITER_T g = 0; g < CTemp; g++) { + sum = 0; + ITER_T GIndexF = g * GOffsetF; + for (S_ITER_T hf = -HOffsetFL; hf <= HOffsetFR; hf++) { + S_ITER_T hindex = h + hf; + if ((hindex < 0) || (hindex >= (S_ITER_T)H)){ + continue; + } + ITER_T HIndexC1 = (((ITER_T)hindex) % HF) * HOffsetC1 + g; + ITER_T HIndexF = ((ITER_T)(hf + HOffsetFL)) * WF + GIndexF; + for (S_ITER_T wf = -WOffsetFL; wf <= WOffsetFR; wf++) { + S_ITER_T windex = w + wf; + if ((windex < 0) || (windex >= (S_ITER_T)W)) { + continue; + } else { + sum += ((Q15_T)convBuffer1[HIndexC1 + ((ITER_T)windex) * CTemp]) * + ((Q15_T)filter2[HIndexF + ((ITER_T)(wf + WOffsetFL))]); + } + } + } + + #ifdef SHIFT + Q15_T x = (((Q15_T)(((sum << shlU2) >> shrU2) + BN2B[g])) * + ((Q15_T)BN2W[g])); + #else + Q15_T x = (((Q15_T)((sum * shlU2) / shrU2 + BN2B[g])) * + ((Q15_T)BN2W[g])); + #endif + x = q15_relu(x, limit2); + #ifdef SHIFT + convBuffer2[g] = ((x << shlX2) >> shrX2); + #else + convBuffer2[g] = (x * shlX2) / shrX2; + #endif + } + + for (ITER_T i = 0; i < COut; i++) { + sum = 0; + Q7_T* convBuffer2_offset = (Q7_T*)convBuffer2; + Q7_T* filter3_offset = (Q7_T*)filter3 + i; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + sum += ((Q15_T)*convBuffer2_offset++) * ((Q15_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q15_T)*convBuffer2_offset++) * ((Q15_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q15_T)*convBuffer2_offset++) * ((Q15_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q15_T)*convBuffer2_offset++) * ((Q15_T)*filter3_offset); + filter3_offset += COut; + } + #endif + + while (temp_channels--) { + sum += ((Q15_T)*convBuffer2_offset++) * ((Q15_T)*filter3_offset); + filter3_offset += COut; + } + + #ifdef SHIFT + *output_offset++ = (((((Q15_T)(((sum << shlU3) >> shrU3) + BN3B[i])) * + ((Q15_T) BN3W[i])) << shlW3) >> shrW3); + #else + *output_offset++ = ((((Q15_T)((sum * shlU3) / shrU3 + BN3B[i])) * + ((Q15_T) BN3W[i])) * shlW3) / shrW3; + #endif + } + } + } + } +} + +void q7xq15_q15_mbconv_block(const Q7_T* const input, + const Q15_T* const filter1, const Q15_T* const BN1W, const Q15_T* const BN1B, + const Q15_T* const filter2, const Q15_T* const BN2W, const Q15_T* const BN2B, + const Q15_T* const filter3, const Q15_T* const BN3W, const Q15_T* const BN3B, + Q15_T* const output, Q15_T* const convBuffer1, Q15_T* const convBuffer2, ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, ITER_T COut, ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, - S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, SCALE_T depth1, - SCALE_T depth2, SCALE_T depth3, INTM_T limit1, INTM_T limit2, L_SCALE_T shrU1, - L_SCALE_T shrB1, L_SCALE_T shrX1, L_SCALE_T shrU2, L_SCALE_T shrB2, - L_SCALE_T shrX2, L_SCALE_T shrU3, L_SCALE_T shrB3, L_SCALE_T shrW3, - L_SCALE_T shlU1, L_SCALE_T shlB1, L_SCALE_T shlX1, L_SCALE_T shlU2, - L_SCALE_T shlB2, L_SCALE_T shlX2, L_SCALE_T shlU3, L_SCALE_T shlB3, - L_SCALE_T shlW3) { - - S_ITER_T HOffsetL = ((S_ITER_T)((HF - 1) >> 1)) - HPadU; - S_ITER_T WOffsetL = ((S_ITER_T)((WF - 1) >> 1)) - WPadL; - S_ITER_T HOffsetR = ((S_ITER_T)(HF >> 1)) - HPadD; - S_ITER_T WOffsetR = ((S_ITER_T)(WF >> 1)) - WPadR; + S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q31_T limit1, + Q31_T limit2, SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, + SCALE_T shrU3, SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, + SCALE_T shlX2, SCALE_T shlU3, SCALE_T shlW3) { + S_ITER_T HOffsetFL = (HF - 1) >> 1; + S_ITER_T WOffsetFL = (WF - 1) >> 1; + S_ITER_T HOffsetFR = HF >> 1; + S_ITER_T WOffsetFR = WF >> 1; + S_ITER_T HOffsetL = HOffsetFL - HPadU; + S_ITER_T WOffsetL = WOffsetFL - WPadL; + S_ITER_T HOffsetR = HOffsetFR - HPadD; + S_ITER_T WOffsetR = WOffsetFR - WPadR; + + ITER_T HOffsetIn = W * CIn; + ITER_T NOffsetIn = H * HOffsetIn; + ITER_T HOffsetC1 = W * CTemp; + ITER_T GOffsetF = HF * WF; + ITER_T HOffsetOut = WOut * COut; + ITER_T NOffsetOut = HOut * HOffsetOut; + + Q31_T sum; for (ITER_T n = 0; n < N; n++) { - ITER_T margin = 0, nstart = 0; + ITER_T NIndexIn = n * NOffsetIn; + ITER_T NIndexOut = n * NOffsetOut; + ITER_T margin = 0; if ((S_ITER_T)HF - HPadU - (S_ITER_T)HStride > 0) { margin = (ITER_T)((S_ITER_T)HF - HPadU - (S_ITER_T)HStride); } - if (HPadU < 0) { - // nstart will always be zero unless HPadU is negative. - nstart = (ITER_T)(-HPadU); + + for (ITER_T i = 0; i < margin; i++) { + ITER_T HIndexIn = i * HOffsetIn + NIndexIn; + ITER_T HIndexC1 = i * HOffsetC1; + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q15_T* convBuffer1_offset = ((Q15_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q7_T* input_offset = (Q7_T*)input + WIndexIn; + Q15_T* filter1_offset = (Q15_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q31_T)BN1W[k])); + #else + Q31_T x = (((Q31_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q31_T)BN1W[k])); + #endif + x = q31_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif + } + } + } + + ITER_T hout = 0; + for (S_ITER_T h = HOffsetL; h < (S_ITER_T)H - HOffsetR; hout++, h += (S_ITER_T)HStride) { + ITER_T HIndexOut = hout * HOffsetOut + NIndexOut; + for (ITER_T i = 0; i < HStride; i++) { + ITER_T iRed = (i + margin + hout * HStride) % HF; + ITER_T iFull = i + margin + hout * HStride; + ITER_T HIndexC1 = iRed * HOffsetC1; + ITER_T HIndexIn = iFull * HOffsetIn + NIndexIn; + if (iFull < H){ + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q15_T* convBuffer1_offset = ((Q15_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q7_T* input_offset = (Q7_T*)input + WIndexIn; + Q15_T* filter1_offset = (Q15_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q31_T)BN1W[k])); + #else + Q31_T x = (((Q31_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q31_T)BN1W[k])); + #endif + x = q31_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif + } + } + } else { + Q15_T* convBuffer1_offset = (Q15_T*)convBuffer1 + HIndexC1; + for (ITER_T j = 0; j < W; j++) { + Q15_T* BN1B_offset = (Q15_T*)BN1B; + Q15_T* BN1W_offset = (Q15_T*)BN1W; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + Q31_T w = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T x = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T y = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T z = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + *convBuffer1_offset++ = ((y << shlX1) >> shrX1); + *convBuffer1_offset++ = ((z << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + *convBuffer1_offset++ = ((x * shlX1) / shrX1); + *convBuffer1_offset++ = ((y * shlX1) / shrX1); + *convBuffer1_offset++ = ((z * shlX1) / shrX1); + #endif + } + #endif + + while (temp_channels--) { + Q15_T w = q15_relu(((Q15_T)*BN1B_offset++) * ((Q15_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + #endif + } + } + } + } + + ITER_T wout = 0; + for (S_ITER_T w = WOffsetL; w < ((S_ITER_T)W) - WOffsetR; wout++, w += ((S_ITER_T)WStride)) { + Q15_T* output_offset = ((Q15_T*)output) + wout * COut + HIndexOut; + for (ITER_T g = 0; g < CTemp; g++) { + sum = 0; + ITER_T GIndexF = g * GOffsetF; + for (S_ITER_T hf = -HOffsetFL; hf <= HOffsetFR; hf++) { + S_ITER_T hindex = h + hf; + if ((hindex < 0) || (hindex >= (S_ITER_T)H)){ + continue; + } + ITER_T HIndexC1 = (((ITER_T)hindex) % HF) * HOffsetC1 + g; + ITER_T HIndexF = ((ITER_T)(hf + HOffsetFL)) * WF + GIndexF; + for (S_ITER_T wf = -WOffsetFL; wf <= WOffsetFR; wf++) { + S_ITER_T windex = w + wf; + if ((windex < 0) || (windex >= (S_ITER_T)W)) { + continue; + } else { + sum += ((Q31_T)convBuffer1[HIndexC1 + ((ITER_T)windex) * CTemp]) * + ((Q31_T)filter2[HIndexF + ((ITER_T)(wf + WOffsetFL))]); + } + } + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU2) >> shrU2) + BN2B[g])) * + ((Q31_T)BN2W[g])); + #else + Q31_T x = (((Q31_T)((sum * shlU2) / shrU2 + BN2B[g])) * + ((Q31_T)BN2W[g])); + #endif + x = q31_relu(x, limit2); + #ifdef SHIFT + convBuffer2[g] = ((x << shlX2) >> shrX2); + #else + convBuffer2[g] = (x * shlX2) / shrX2; + #endif + } + + for (ITER_T i = 0; i < COut; i++) { + sum = 0; + Q15_T* convBuffer2_offset = (Q15_T*)convBuffer2; + Q15_T* filter3_offset = (Q15_T*)filter3 + i; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + } + #endif + + while (temp_channels--) { + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + } + + #ifdef SHIFT + *output_offset++ = (((((Q31_T)(((sum << shlU3) >> shrU3) + BN3B[i])) * + ((Q31_T) BN3W[i])) << shlW3) >> shrW3); + #else + *output_offset++ = ((((Q31_T)((sum * shlU3) / shrU3 + BN3B[i])) * + ((Q31_T) BN3W[i])) * shlW3) / shrW3; + #endif + } + } + } + } +} + +void q15xq7_q7_mbconv_block(const Q15_T* const input, + const Q7_T* const filter1, const Q7_T* const BN1W, const Q15_T* const BN1B, + const Q7_T* const filter2, const Q7_T* const BN2W, const Q15_T* const BN2B, + const Q7_T* const filter3, const Q7_T* const BN3W, const Q15_T* const BN3B, + Q7_T* const output, Q15_T* const convBuffer1, Q15_T* const convBuffer2, + ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, + ITER_T COut, ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, + S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q31_T limit1, + Q31_T limit2, SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, + SCALE_T shrU3, SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, + SCALE_T shlX2, SCALE_T shlU3, SCALE_T shlW3) { + S_ITER_T HOffsetFL = (HF - 1) >> 1; + S_ITER_T WOffsetFL = (WF - 1) >> 1; + S_ITER_T HOffsetFR = HF >> 1; + S_ITER_T WOffsetFR = WF >> 1; + + S_ITER_T HOffsetL = HOffsetFL - HPadU; + S_ITER_T WOffsetL = WOffsetFL - WPadL; + S_ITER_T HOffsetR = HOffsetFR - HPadD; + S_ITER_T WOffsetR = WOffsetFR - WPadR; + + ITER_T HOffsetIn = W * CIn; + ITER_T NOffsetIn = H * HOffsetIn; + ITER_T HOffsetC1 = W * CTemp; + ITER_T GOffsetF = HF * WF; + ITER_T HOffsetOut = WOut * COut; + ITER_T NOffsetOut = HOut * HOffsetOut; + + Q31_T sum; + for (ITER_T n = 0; n < N; n++) { + ITER_T NIndexIn = n * NOffsetIn; + ITER_T NIndexOut = n * NOffsetOut; + ITER_T margin = 0; + if ((S_ITER_T)HF - HPadU - (S_ITER_T)HStride > 0) { + margin = (ITER_T)((S_ITER_T)HF - HPadU - (S_ITER_T)HStride); } - for (ITER_T i = nstart; i < margin; i++) { + for (ITER_T i = 0; i < margin; i++) { + ITER_T HIndexIn = i * HOffsetIn + NIndexIn; + ITER_T HIndexC1 = i * HOffsetC1; for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q15_T* convBuffer1_offset = ((Q15_T*)convBuffer1) + j * CTemp + HIndexC1; for (ITER_T k = 0; k < CTemp; k++) { - for (ITER_T l = 0; l < CIn; l++) { - treesumBuffer[l] = ((INTM_T)input[n * H * W * CIn + i * W * CIn + j * CIn + l]) * - ((INTM_T)filter1[l * CTemp + k]); + sum = 0; + Q15_T* input_offset = (Q15_T*)input + WIndexIn; + Q7_T* filter1_offset = (Q7_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; } - v_q_treesum(treesumBuffer, CIn, depth1, 0); #ifdef SHIFT - INTM_T x = (((INTM_T)(((treesumBuffer[0] << shlU1) >> shrU1) + ((BN1B[k] << shlB1) >> shrB1))) * - ((INTM_T)BN1W[k])); + Q31_T x = (((Q31_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q31_T)BN1W[k])); #else - INTM_T x = (((INTM_T)((treesumBuffer[0] * shlU1) / shrU1 + (BN1B[k] * shlB1) / shrB1)) * - ((INTM_T)BN1W[k])); + Q31_T x = (((Q31_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q31_T)BN1W[k])); #endif - x = q_relu(x, limit1); + x = q31_relu(x, limit1); #ifdef SHIFT - convBuffer1[i * W * CTemp + j * CTemp + k] = ((x << shlX1) >> shrX1); + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); #else - convBuffer1[i * W * CTemp + j * CTemp + k] = (x * shlX1) / shrX1; + *convBuffer1_offset++ = (x * shlX1) / shrX1; #endif } } @@ -61,63 +607,646 @@ void q_mbconv_block(const INT_T* const input, const INT_T* const filter1, ITER_T hout = 0; for (S_ITER_T h = HOffsetL; h < (S_ITER_T)H - HOffsetR; hout++, h += (S_ITER_T)HStride) { + ITER_T HIndexOut = hout * HOffsetOut + NIndexOut; for (ITER_T i = 0; i < HStride; i++) { - for (ITER_T j = 0; j < W; j++) { - for (ITER_T k = 0; k < CTemp; k++) { - ITER_T iRed = (i + margin + hout * HStride) % HF; - ITER_T iFull = i + margin + hout * HStride; - for (ITER_T l = 0; l < CIn; l++) { - if (iFull < H) { - treesumBuffer[l] = ((INTM_T)input[n * H * W * CIn + iFull * W * CIn + j * CIn + l]) * - ((INTM_T)filter1[l * CTemp + k]); + ITER_T iRed = (i + margin + hout * HStride) % HF; + ITER_T iFull = i + margin + hout * HStride; + ITER_T HIndexC1 = iRed * HOffsetC1; + ITER_T HIndexIn = iFull * HOffsetIn + NIndexIn; + if (iFull < H){ + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q15_T* convBuffer1_offset = ((Q15_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q15_T* input_offset = (Q15_T*)input + WIndexIn; + Q7_T* filter1_offset = (Q7_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q31_T)BN1W[k])); + #else + Q31_T x = (((Q31_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q31_T)BN1W[k])); + #endif + x = q31_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif + } + } + } else { + Q15_T* convBuffer1_offset = (Q15_T*)convBuffer1 + HIndexC1; + for (ITER_T j = 0; j < W; j++) { + Q15_T* BN1B_offset = (Q15_T*)BN1B; + Q7_T* BN1W_offset = (Q7_T*)BN1W; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + Q31_T w = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T x = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T y = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T z = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + *convBuffer1_offset++ = ((y << shlX1) >> shrX1); + *convBuffer1_offset++ = ((z << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + *convBuffer1_offset++ = ((x * shlX1) / shrX1); + *convBuffer1_offset++ = ((y * shlX1) / shrX1); + *convBuffer1_offset++ = ((z * shlX1) / shrX1); + #endif + } + #endif + + while (temp_channels--) { + Q31_T w = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + #endif + } + } + } + } + + ITER_T wout = 0; + for (S_ITER_T w = WOffsetL; w < ((S_ITER_T)W) - WOffsetR; wout++, w += ((S_ITER_T)WStride)) { + Q7_T* output_offset = ((Q7_T*)output) + wout * COut + HIndexOut; + for (ITER_T g = 0; g < CTemp; g++) { + sum = 0; + ITER_T GIndexF = g * GOffsetF; + for (S_ITER_T hf = -HOffsetFL; hf <= HOffsetFR; hf++) { + S_ITER_T hindex = h + hf; + if ((hindex < 0) || (hindex >= (S_ITER_T)H)){ + continue; + } + ITER_T HIndexC1 = (((ITER_T)hindex) % HF) * HOffsetC1 + g; + ITER_T HIndexF = ((ITER_T)(hf + HOffsetFL)) * WF + GIndexF; + for (S_ITER_T wf = -WOffsetFL; wf <= WOffsetFR; wf++) { + S_ITER_T windex = w + wf; + if ((windex < 0) || (windex >= (S_ITER_T)W)) { + continue; } else { - treesumBuffer[l] = 0; + sum += ((Q31_T)convBuffer1[HIndexC1 + ((ITER_T)windex) * CTemp]) * + ((Q31_T)filter2[HIndexF + ((ITER_T)(wf + WOffsetFL))]); + } + } + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU2) >> shrU2) + BN2B[g])) * + ((Q31_T)BN2W[g])); + #else + Q31_T x = (((Q31_T)((sum * shlU2) / shrU2 + BN2B[g])) * + ((Q31_T)BN2W[g])); + #endif + x = q31_relu(x, limit2); + #ifdef SHIFT + convBuffer2[g] = ((x << shlX2) >> shrX2); + #else + convBuffer2[g] = (x * shlX2) / shrX2; + #endif + } + + for (ITER_T i = 0; i < COut; i++) { + sum = 0; + Q15_T* convBuffer2_offset = (Q15_T*)convBuffer2; + Q7_T* filter3_offset = (Q7_T*)filter3 + i; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + } + #endif + + while (temp_channels--) { + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + } + + #ifdef SHIFT + *output_offset++ = (((((Q31_T)(((sum << shlU3) >> shrU3) + BN3B[i])) * + ((Q31_T) BN3W[i])) << shlW3) >> shrW3); + #else + *output_offset++ = ((((Q31_T)((sum * shlU3) / shrU3 + BN3B[i])) * + ((Q31_T) BN3W[i])) * shlW3) / shrW3; + #endif + } + } + } + } +} + +void q15xq7_q15_mbconv_block(const Q15_T* const input, + const Q7_T* const filter1, const Q7_T* const BN1W, const Q15_T* const BN1B, + const Q7_T* const filter2, const Q7_T* const BN2W, const Q15_T* const BN2B, + const Q7_T* const filter3, const Q7_T* const BN3W, const Q15_T* const BN3B, + Q15_T* const output, Q15_T* const convBuffer1, Q15_T* const convBuffer2, + ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, + ITER_T COut, ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, + S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q31_T limit1, + Q31_T limit2, SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, + SCALE_T shrU3, SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, + SCALE_T shlX2, SCALE_T shlU3, SCALE_T shlW3) { + S_ITER_T HOffsetFL = (HF - 1) >> 1; + S_ITER_T WOffsetFL = (WF - 1) >> 1; + S_ITER_T HOffsetFR = HF >> 1; + S_ITER_T WOffsetFR = WF >> 1; + + S_ITER_T HOffsetL = HOffsetFL - HPadU; + S_ITER_T WOffsetL = WOffsetFL - WPadL; + S_ITER_T HOffsetR = HOffsetFR - HPadD; + S_ITER_T WOffsetR = WOffsetFR - WPadR; + + ITER_T HOffsetIn = W * CIn; + ITER_T NOffsetIn = H * HOffsetIn; + ITER_T HOffsetC1 = W * CTemp; + ITER_T GOffsetF = HF * WF; + ITER_T HOffsetOut = WOut * COut; + ITER_T NOffsetOut = HOut * HOffsetOut; + + Q31_T sum; + for (ITER_T n = 0; n < N; n++) { + ITER_T NIndexIn = n * NOffsetIn; + ITER_T NIndexOut = n * NOffsetOut; + ITER_T margin = 0; + if ((S_ITER_T)HF - HPadU - (S_ITER_T)HStride > 0) { + margin = (ITER_T)((S_ITER_T)HF - HPadU - (S_ITER_T)HStride); + } + + for (ITER_T i = 0; i < margin; i++) { + ITER_T HIndexIn = i * HOffsetIn + NIndexIn; + ITER_T HIndexC1 = i * HOffsetC1; + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q15_T* convBuffer1_offset = ((Q15_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q15_T* input_offset = (Q15_T*)input + WIndexIn; + Q7_T* filter1_offset = (Q7_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q31_T)BN1W[k])); + #else + Q31_T x = (((Q31_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q31_T)BN1W[k])); + #endif + x = q31_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif + } + } + } + + ITER_T hout = 0; + for (S_ITER_T h = HOffsetL; h < (S_ITER_T)H - HOffsetR; hout++, h += (S_ITER_T)HStride) { + ITER_T HIndexOut = hout * HOffsetOut + NIndexOut; + for (ITER_T i = 0; i < HStride; i++) { + ITER_T iRed = (i + margin + hout * HStride) % HF; + ITER_T iFull = i + margin + hout * HStride; + ITER_T HIndexC1 = iRed * HOffsetC1; + ITER_T HIndexIn = iFull * HOffsetIn + NIndexIn; + if (iFull < H){ + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q15_T* convBuffer1_offset = ((Q15_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q15_T* input_offset = (Q15_T*)input + WIndexIn; + Q7_T* filter1_offset = (Q7_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q31_T)BN1W[k])); + #else + Q31_T x = (((Q31_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q31_T)BN1W[k])); + #endif + x = q31_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif } + } + } else { + Q15_T* convBuffer1_offset = (Q15_T*)convBuffer1 + HIndexC1; + for (ITER_T j = 0; j < W; j++) { + Q15_T* BN1B_offset = (Q15_T*)BN1B; + Q7_T* BN1W_offset = (Q7_T*)BN1W; + ITER_T temp_channels = CTemp; - v_q_treesum(treesumBuffer, CIn, depth1, 0); - #ifdef SHIFT - INTM_T x = (((INTM_T)(((treesumBuffer[0] << shlU1) >> shrU1) + ((BN1B[k] << shlB1) >> shrB1))) * - ((INTM_T)BN1W[k])); - #else - INTM_T x = (((INTM_T)((treesumBuffer[0] * shlU1) / shrU1 + (BN1B[k] * shlB1) / shrB1)) * - ((INTM_T)BN1W[k])); + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + Q31_T w = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T x = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T y = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T z = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + *convBuffer1_offset++ = ((y << shlX1) >> shrX1); + *convBuffer1_offset++ = ((z << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + *convBuffer1_offset++ = ((x * shlX1) / shrX1); + *convBuffer1_offset++ = ((y * shlX1) / shrX1); + *convBuffer1_offset++ = ((z * shlX1) / shrX1); + #endif + } #endif - x = q_relu(x, limit1); - #ifdef SHIFT - convBuffer1[iRed * W * CTemp + j * CTemp + k] = ((x << shlX1) >> shrX1); - #else - convBuffer1[iRed * W * CTemp + j * CTemp + k] = (x * shlX1) / shrX1; + + while (temp_channels--) { + Q31_T w = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + #endif + } + } + } + } + + ITER_T wout = 0; + for (S_ITER_T w = WOffsetL; w < ((S_ITER_T)W) - WOffsetR; wout++, w += ((S_ITER_T)WStride)) { + Q15_T* output_offset = ((Q15_T*)output) + wout * COut + HIndexOut; + for (ITER_T g = 0; g < CTemp; g++) { + sum = 0; + ITER_T GIndexF = g * GOffsetF; + for (S_ITER_T hf = -HOffsetFL; hf <= HOffsetFR; hf++) { + S_ITER_T hindex = h + hf; + if ((hindex < 0) || (hindex >= (S_ITER_T)H)){ + continue; + } + ITER_T HIndexC1 = (((ITER_T)hindex) % HF) * HOffsetC1 + g; + ITER_T HIndexF = ((ITER_T)(hf + HOffsetFL)) * WF + GIndexF; + for (S_ITER_T wf = -WOffsetFL; wf <= WOffsetFR; wf++) { + S_ITER_T windex = w + wf; + if ((windex < 0) || (windex >= (S_ITER_T)W)) { + continue; + } else { + sum += ((Q31_T)convBuffer1[HIndexC1 + ((ITER_T)windex) * CTemp]) * + ((Q31_T)filter2[HIndexF + ((ITER_T)(wf + WOffsetFL))]); + } + } + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU2) >> shrU2) + BN2B[g])) * + ((Q31_T)BN2W[g])); + #else + Q31_T x = (((Q31_T)((sum * shlU2) / shrU2 + BN2B[g])) * + ((Q31_T)BN2W[g])); + #endif + x = q31_relu(x, limit2); + #ifdef SHIFT + convBuffer2[g] = ((x << shlX2) >> shrX2); + #else + convBuffer2[g] = (x * shlX2) / shrX2; + #endif + } + + for (ITER_T i = 0; i < COut; i++) { + sum = 0; + Q15_T* convBuffer2_offset = (Q15_T*)convBuffer2; + Q7_T* filter3_offset = (Q7_T*)filter3 + i; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + } + #endif + + while (temp_channels--) { + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + } + + #ifdef SHIFT + *output_offset++ = (((((Q31_T)(((sum << shlU3) >> shrU3) + BN3B[i])) * + ((Q31_T) BN3W[i])) << shlW3) >> shrW3); + #else + *output_offset++ = ((((Q31_T)((sum * shlU3) / shrU3 + BN3B[i])) * + ((Q31_T) BN3W[i])) * shlW3) / shrW3; + #endif + } + } + } + } +} + +void q15_mbconv_block(const Q15_T* const input, const Q15_T* const filter1, + const Q15_T* const BN1W, const Q15_T* const BN1B, const Q15_T* const filter2, + const Q15_T* const BN2W, const Q15_T* const BN2B, const Q15_T* const filter3, + const Q15_T* const BN3W, const Q15_T* const BN3B, Q15_T* const output, + Q15_T* const convBuffer1, Q15_T* const convBuffer2, ITER_T N, ITER_T H, + ITER_T W, ITER_T CIn, ITER_T CTemp, ITER_T HF, ITER_T WF, ITER_T COut, + ITER_T HOut, ITER_T WOut, S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, + S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, Q31_T limit1, Q31_T limit2, + SCALE_T shrU1, SCALE_T shrX1, SCALE_T shrU2, SCALE_T shrX2, SCALE_T shrU3, + SCALE_T shrW3, SCALE_T shlU1, SCALE_T shlX1, SCALE_T shlU2, SCALE_T shlX2, + SCALE_T shlU3, SCALE_T shlW3) { + S_ITER_T HOffsetFL = (HF - 1) >> 1; + S_ITER_T WOffsetFL = (WF - 1) >> 1; + S_ITER_T HOffsetFR = HF >> 1; + S_ITER_T WOffsetFR = WF >> 1; + + S_ITER_T HOffsetL = HOffsetFL - HPadU; + S_ITER_T WOffsetL = WOffsetFL - WPadL; + S_ITER_T HOffsetR = HOffsetFR - HPadD; + S_ITER_T WOffsetR = WOffsetFR - WPadR; + + ITER_T HOffsetIn = W * CIn; + ITER_T NOffsetIn = H * HOffsetIn; + ITER_T HOffsetC1 = W * CTemp; + ITER_T GOffsetF = HF * WF; + ITER_T HOffsetOut = WOut * COut; + ITER_T NOffsetOut = HOut * HOffsetOut; + + Q63_T sum; + for (ITER_T n = 0; n < N; n++) { + ITER_T NIndexIn = n * NOffsetIn; + ITER_T NIndexOut = n * NOffsetOut; + ITER_T margin = 0; + if ((S_ITER_T)HF - HPadU - (S_ITER_T)HStride > 0) { + margin = (ITER_T)((S_ITER_T)HF - HPadU - (S_ITER_T)HStride); + } + + for (ITER_T i = 0; i < margin; i++) { + ITER_T HIndexIn = i * HOffsetIn + NIndexIn; + ITER_T HIndexC1 = i * HOffsetC1; + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q15_T* convBuffer1_offset = ((Q15_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q15_T* input_offset = (Q15_T*)input + WIndexIn; + Q15_T* filter1_offset = (Q15_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q31_T)BN1W[k])); + #else + Q31_T x = (((Q31_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q31_T)BN1W[k])); + #endif + x = q31_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif + } + } + } + + ITER_T hout = 0; + for (S_ITER_T h = HOffsetL; h < (S_ITER_T)H - HOffsetR; hout++, h += (S_ITER_T)HStride) { + ITER_T HIndexOut = hout * HOffsetOut + NIndexOut; + for (ITER_T i = 0; i < HStride; i++) { + ITER_T iRed = (i + margin + hout * HStride) % HF; + ITER_T iFull = i + margin + hout * HStride; + ITER_T HIndexC1 = iRed * HOffsetC1; + ITER_T HIndexIn = iFull * HOffsetIn + NIndexIn; + if (iFull < H){ + for (ITER_T j = 0; j < W; j++) { + ITER_T WIndexIn = j * CIn + HIndexIn; + Q15_T* convBuffer1_offset = ((Q15_T*)convBuffer1) + j * CTemp + HIndexC1; + for (ITER_T k = 0; k < CTemp; k++) { + sum = 0; + Q15_T* input_offset = (Q15_T*)input + WIndexIn; + Q15_T* filter1_offset = (Q15_T*)filter1 + k; + ITER_T in_channels = CIn; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = in_channels >> 2; + in_channels = in_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + #endif + + while (in_channels--) { + sum += ((Q31_T)*input_offset++) * ((Q31_T)*filter1_offset); + filter1_offset += CTemp; + } + + #ifdef SHIFT + Q31_T x = (((Q31_T)(((sum << shlU1) >> shrU1) + BN1B[k])) * + ((Q31_T)BN1W[k])); + #else + Q31_T x = (((Q31_T)((sum * shlU1) / shrU1 + BN1B[k])) * + ((Q31_T)BN1W[k])); + #endif + x = q31_relu(x, limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = (x * shlX1) / shrX1; + #endif + } + } + } else { + Q15_T* convBuffer1_offset = (Q15_T*)convBuffer1 + HIndexC1; + for (ITER_T j = 0; j < W; j++) { + Q15_T* BN1B_offset = (Q15_T*)BN1B; + Q15_T* BN1W_offset = (Q15_T*)BN1W; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + Q31_T w = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T x = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T y = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + Q31_T z = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + *convBuffer1_offset++ = ((x << shlX1) >> shrX1); + *convBuffer1_offset++ = ((y << shlX1) >> shrX1); + *convBuffer1_offset++ = ((z << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + *convBuffer1_offset++ = ((x * shlX1) / shrX1); + *convBuffer1_offset++ = ((y * shlX1) / shrX1); + *convBuffer1_offset++ = ((z * shlX1) / shrX1); + #endif + } #endif + + while (temp_channels--) { + Q31_T w = q31_relu(((Q31_T)*BN1B_offset++) * ((Q31_T)*BN1W_offset++), limit1); + #ifdef SHIFT + *convBuffer1_offset++ = ((w << shlX1) >> shrX1); + #else + *convBuffer1_offset++ = ((w * shlX1) / shrX1); + #endif + } } } } ITER_T wout = 0; for (S_ITER_T w = WOffsetL; w < ((S_ITER_T)W) - WOffsetR; wout++, w += ((S_ITER_T)WStride)) { + Q15_T* output_offset = ((Q15_T*)output) + wout * COut + HIndexOut; for (ITER_T g = 0; g < CTemp; g++) { - ITER_T counter = 0; - for (S_ITER_T hf = -((HF - 1) >> 1); hf <= (HF >> 1); hf++) { - for (S_ITER_T wf = -((WF - 1) >> 1); wf <= (WF >> 1); wf++) { - if (((h + hf) < 0) || ((h + hf) >= (S_ITER_T)H) || ((w + wf) < 0) || ((w + wf) >= (S_ITER_T)W)) { - treesumBuffer[counter] = 0; + sum = 0; + ITER_T GIndexF = g * GOffsetF; + for (S_ITER_T hf = -HOffsetFL; hf <= HOffsetFR; hf++) { + S_ITER_T hindex = h + hf; + if ((hindex < 0) || (hindex >= (S_ITER_T)H)){ + continue; + } + ITER_T HIndexC1 = (((ITER_T)hindex) % HF) * HOffsetC1 + g; + ITER_T HIndexF = ((ITER_T)(hf + HOffsetFL)) * WF + GIndexF; + for (S_ITER_T wf = -WOffsetFL; wf <= WOffsetFR; wf++) { + S_ITER_T windex = w + wf; + if ((windex < 0) || (windex >= (S_ITER_T)W)) { + continue; } else { - treesumBuffer[counter] = ((INTM_T)convBuffer1[(((ITER_T)(h + hf)) % HF) * W * CTemp + ((ITER_T)(w + wf)) * CTemp + g]) * - ((INTM_T)filter2[g * HF * WF + ((ITER_T)(hf + ((HF - 1) >> 1))) * WF + ((ITER_T)(wf + ((WF - 1) >> 1)))]); + sum += ((Q31_T)convBuffer1[HIndexC1 + ((ITER_T)windex) * CTemp]) * + ((Q31_T)filter2[HIndexF + ((ITER_T)(wf + WOffsetFL))]); } - counter++; } } - v_q_treesum(treesumBuffer, HF * WF, depth2, 0); #ifdef SHIFT - INTM_T x = (((INTM_T)(((treesumBuffer[0] << shlU2) >> shrU2) + ((BN2B[g] << shlB2) >> shrB2))) * - ((INTM_T)BN2W[g])); + Q31_T x = (((Q31_T)(((sum << shlU2) >> shrU2) + BN2B[g])) * + ((Q31_T)BN2W[g])); #else - INTM_T x = (((INTM_T)((treesumBuffer[0] * shlU2) / shrU2 + (BN2B[g] * shlB2) / shrB2)) * - ((INTM_T)BN2W[g])); + Q31_T x = (((Q31_T)((sum * shlU2) / shrU2 + BN2B[g])) * + ((Q31_T)BN2W[g])); #endif - x = q_relu(x, limit2); + x = q31_relu(x, limit2); #ifdef SHIFT convBuffer2[g] = ((x << shlX2) >> shrX2); #else @@ -126,19 +1255,37 @@ void q_mbconv_block(const INT_T* const input, const INT_T* const filter1, } for (ITER_T i = 0; i < COut; i++) { - for (ITER_T g = 0; g < CTemp; g++) { - treesumBuffer[g] = ((INTM_T)convBuffer2[g]) * ((INTM_T)filter3[g * COut + i]); + sum = 0; + Q15_T* convBuffer2_offset = (Q15_T*)convBuffer2; + Q15_T* filter3_offset = (Q15_T*)filter3 + i; + ITER_T temp_channels = CTemp; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = temp_channels >> 2; + temp_channels = temp_channels % 4; + while (len_unroll--) { + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; + } + #endif + + while (temp_channels--) { + sum += ((Q31_T)*convBuffer2_offset++) * ((Q31_T)*filter3_offset); + filter3_offset += COut; } - v_q_treesum(treesumBuffer, CTemp, depth3, 0); #ifdef SHIFT - output[n * HOut * WOut * COut + hout * WOut * COut + wout * COut + i] = - (((((INTM_T)(((treesumBuffer[0] << shlU3) >> shrU3) + ((BN3B[i] << shlB3) >> shrB3))) * - ((INTM_T) BN3W[i])) << shlW3) >> shrW3); + *output_offset++ = (((((Q31_T)(((sum << shlU3) >> shrU3) + BN3B[i])) * + ((Q31_T) BN3W[i])) << shlW3) >> shrW3); #else - output[n * HOut * WOut * COut + hout * WOut * COut + wout * COut + i] = - ((((INTM_T)((treesumBuffer[0] * shlU3) / shrU3 + (BN3B[i] * shlB3) / shrB3)) * - ((INTM_T) BN3W[i])) * shlW3) / shrW3; + *output_offset++ = ((((Q31_T)((sum * shlU3) / shrU3 + BN3B[i])) * + ((Q31_T) BN3W[i])) * shlW3) / shrW3; #endif } } diff --git a/c_reference/src/quantized_rnnpool.c b/c_reference/src/quantized_rnnpool.c index 2c138e333..aeef2c4b7 100644 --- a/c_reference/src/quantized_rnnpool.c +++ b/c_reference/src/quantized_rnnpool.c @@ -4,23 +4,75 @@ #include #include "quantized_rnnpool.h" -int q_rnnpool_block(const INT_T* const patch, ITER_T inputDims, ITER_T patchDim, - ITER_T stride, q_rnn_t rnn1, ITER_T hiddenDims1, - const void* rnn1_params, void* rnn1_buffers, - const void* rnn1_scales, q_rnn_t rnn2, - ITER_T hiddenDims2, const void* rnn2_params, - void* rnn2_buffers, const void* rnn2_scales, - INT_T* const output, INT_T* const buffer) { +int q7xq15_q15_rnnpool_block(const Q7_T* const patch, ITER_T inputDims, + ITER_T patchDim, ITER_T stride, q7xq15_q15_rnn_t rnn1, ITER_T hiddenDims1, + const void* rnn1_params, void* rnn1_buffers, const void* rnn1_scales, + q15_rnn_t rnn2, ITER_T hiddenDims2, const void* rnn2_params, + void* rnn2_buffers, const void* rnn2_scales, Q15_T* const output, + Q15_T* const buffer, SCALE_T ShR1, SCALE_T ShL1, SCALE_T ShR2, SCALE_T ShL2) { // Clear the output - memset(output, 0, sizeof(INT_T) * 4 * hiddenDims2); + memset(output, 0, sizeof(Q15_T) * 4 * hiddenDims2); // Horizontal pass over each row with RNN1 - memset(buffer, 0, sizeof(INT_T) * hiddenDims1 * patchDim); + memset(buffer, 0, sizeof(Q15_T) * hiddenDims1 * patchDim); for (ITER_T r = 0; r < patchDim; ++r) { rnn1(buffer + r * hiddenDims1, hiddenDims1, patch + stride * r * inputDims, inputDims, patchDim, rnn1_params, rnn1_buffers, rnn1_scales, 0, 0); } + q15_v_scale_up(buffer, patchDim * hiddenDims1, buffer, ShL1); + q15_v_scale_down(buffer, patchDim * hiddenDims1, buffer, ShR1); + + // Bi-directional vertical pass over the row summaries + rnn2(output, hiddenDims2, buffer, hiddenDims1, patchDim, rnn2_params, + rnn2_buffers, rnn2_scales, 0, 0); + rnn2(output + hiddenDims2, hiddenDims2, buffer, hiddenDims1, patchDim, + rnn2_params, rnn2_buffers, rnn2_scales, 1, 0); + + // Vertical pass over each column with RNN1 + memset(buffer, 0, sizeof(Q15_T) * hiddenDims1 * patchDim); + for (ITER_T c = 0; c < patchDim; ++c) { + for (ITER_T r = 0; r < patchDim; ++r) { + rnn1(buffer + c * hiddenDims1, hiddenDims1, + patch + (stride * r + c) * inputDims, inputDims, 1, rnn1_params, + rnn1_buffers, rnn1_scales, 0, 0); + } + } + + q15_v_scale_up(buffer, patchDim * hiddenDims1, buffer, ShL1); + q15_v_scale_down(buffer, patchDim * hiddenDims1, buffer, ShR1); + + // Bi-directional horizontal pass over the columns summaries + rnn2(output + 2 * hiddenDims2, hiddenDims2, buffer, hiddenDims1, patchDim, + rnn2_params, rnn2_buffers, rnn2_scales, 0, 0); + rnn2(output + 3 * hiddenDims2, hiddenDims2, buffer, hiddenDims1, patchDim, + rnn2_params, rnn2_buffers, rnn2_scales, 1, 0); + + q15_v_scale_up(output, 4 * hiddenDims2, output, ShL2); + q15_v_scale_down(output, 4 * hiddenDims2, output, ShR2); + + return 0; +} + +int q15_rnnpool_block(const Q15_T* const patch, ITER_T inputDims, + ITER_T patchDim, ITER_T stride, q15_rnn_t rnn1, ITER_T hiddenDims1, + const void* rnn1_params, void* rnn1_buffers, const void* rnn1_scales, + q15_rnn_t rnn2, ITER_T hiddenDims2, const void* rnn2_params, + void* rnn2_buffers, const void* rnn2_scales, Q15_T* const output, + Q15_T* const buffer, SCALE_T ShR1, SCALE_T ShL1, SCALE_T ShR2, SCALE_T ShL2) { + // Clear the output + memset(output, 0, sizeof(Q15_T) * 4 * hiddenDims2); + + // Horizontal pass over each row with RNN1 + memset(buffer, 0, sizeof(Q15_T) * hiddenDims1 * patchDim); + for (ITER_T r = 0; r < patchDim; ++r) { + rnn1(buffer + r * hiddenDims1, hiddenDims1, patch + stride * r * inputDims, + inputDims, patchDim, rnn1_params, rnn1_buffers, rnn1_scales, 0, 0); + } + + q15_v_scale_up(buffer, patchDim * hiddenDims1, buffer, ShL1); + q15_v_scale_down(buffer, patchDim * hiddenDims1, buffer, ShR1); + // Bi-directional vertical pass over the row summaries rnn2(output, hiddenDims2, buffer, hiddenDims1, patchDim, rnn2_params, rnn2_buffers, rnn2_scales, 0, 0); @@ -28,7 +80,7 @@ int q_rnnpool_block(const INT_T* const patch, ITER_T inputDims, ITER_T patchDim, rnn2_params, rnn2_buffers, rnn2_scales, 1, 0); // Vertical pass over each column with RNN1 - memset(buffer, 0, sizeof(INT_T) * hiddenDims1 * patchDim); + memset(buffer, 0, sizeof(Q15_T) * hiddenDims1 * patchDim); for (ITER_T c = 0; c < patchDim; ++c) { for (ITER_T r = 0; r < patchDim; ++r) { rnn1(buffer + c * hiddenDims1, hiddenDims1, @@ -37,11 +89,17 @@ int q_rnnpool_block(const INT_T* const patch, ITER_T inputDims, ITER_T patchDim, } } + q15_v_scale_up(buffer, patchDim * hiddenDims1, buffer, ShL1); + q15_v_scale_down(buffer, patchDim * hiddenDims1, buffer, ShR1); + // Bi-directional horizontal pass over the columns summaries rnn2(output + 2 * hiddenDims2, hiddenDims2, buffer, hiddenDims1, patchDim, rnn2_params, rnn2_buffers, rnn2_scales, 0, 0); rnn2(output + 3 * hiddenDims2, hiddenDims2, buffer, hiddenDims1, patchDim, rnn2_params, rnn2_buffers, rnn2_scales, 1, 0); + q15_v_scale_up(output, 4 * hiddenDims2, output, ShL2); + q15_v_scale_down(output, 4 * hiddenDims2, output, ShR2); + return 0; } diff --git a/c_reference/src/quantized_utils.c b/c_reference/src/quantized_utils.c index 225926af2..456e47f59 100644 --- a/c_reference/src/quantized_utils.c +++ b/c_reference/src/quantized_utils.c @@ -1,157 +1,433 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +#include #include "quantized_utils.h" -void v_q_treesum(INTM_T* const vec, ITER_T len, SCALE_T H1, SCALE_T H2) { - ITER_T count = len, depth = 0; - int divbytwo = 1; +void q15_v_add(const Q15_T* vec1, const Q15_T* vec2, ITER_T len, Q15_T* ret, + SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret, SCALE_T demote) { + #ifdef SHIFT + SCALE_T scalevec1 = scvec1 + scret; + SCALE_T scalevec2 = scvec2 + scret; + #else + SCALE_T scalevec1 = scvec1 * scret; + SCALE_T scalevec2 = scvec2 * scret; + #endif - while (depth < (H1 + H2)) { - if (depth >= H1) { - divbytwo = 0; + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = (((*vec1++ >> scalevec1) + (*vec2++ >> scalevec2)) >> demote); + *ret++ = (((*vec1++ >> scalevec1) + (*vec2++ >> scalevec2)) >> demote); + *ret++ = (((*vec1++ >> scalevec1) + (*vec2++ >> scalevec2)) >> demote); + *ret++ = (((*vec1++ >> scalevec1) + (*vec2++ >> scalevec2)) >> demote); + #else + *ret++ = ((*vec1++ / scalevec1) + (*vec2++ / scalevec2)) / demote; + *ret++ = ((*vec1++ / scalevec1) + (*vec2++ / scalevec2)) / demote; + *ret++ = ((*vec1++ / scalevec1) + (*vec2++ / scalevec2)) / demote; + *ret++ = ((*vec1++ / scalevec1) + (*vec2++ / scalevec2)) / demote; + #endif } + #endif - for (ITER_T p = 0; p < ((len >> 1) + 1); p++) { - if (p < (count >> 1)) { - if (divbytwo == 1) { - #ifdef SHIFT - vec[p] = (vec[2 * p] >> 1) + (vec[(2 * p) + 1] >> 1); - #else - vec[p] = vec[2 * p] / 2 + vec[(2 * p) + 1] / 2; - #endif - } else { - vec[p] = vec[2 * p] + vec[(2 * p) + 1]; - } - } else if ((p == (count >> 1)) && ((count & 1) == 1)) { - if (divbytwo == 1) { - #ifdef SHIFT - vec[p] = (vec[2 * p] >> 1); - #else - vec[p] = vec[2 * p] / 2; - #endif - } else { - vec[p] = vec[2 * p]; - } - } else { - vec[p] = 0; - } - } - count = (count + 1) >> 1; - depth++; + while (len--) { + #ifdef SHIFT + *ret++ = (((*vec1++ >> scalevec1) + (*vec2++ >> scalevec2)) >> demote); + #else + *ret++ = ((*vec1++ / scalevec1) + (*vec2++ / scalevec2)) / demote; + #endif } } -void v_q_add(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, - INT_T* const ret, SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret) { - for (ITER_T i = 0; i < len; i++) { +void q7_v_sub(const Q7_T* vec1, const Q7_T* vec2, ITER_T len, Q7_T* ret, + SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret) { + #ifdef SHIFT + SCALE_T scalevec1 = scvec1 + scret; + SCALE_T scalevec2 = scvec2 + scret; + #else + SCALE_T scalevec1 = scvec1 * scret; + SCALE_T scalevec2 = scvec2 * scret; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); + #else + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); + #endif + } + #endif + + while (len--) { #ifdef SHIFT - ret[i] = ((vec1[i] >> (scvec1 + scret)) + (vec2[i] >> (scvec2 + scret))); + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); #else - ret[i] = ((vec1[i] / scvec1) / scret) + ((vec2[i] / scvec2) / scret); + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); #endif } } -void v_q_sub(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, - INT_T* const ret, SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret) { - for (ITER_T i = 0; i < len; i++) { +void q15_v_sub(const Q15_T* vec1, const Q15_T* vec2, ITER_T len, Q15_T* ret, + SCALE_T scvec1, SCALE_T scvec2, SCALE_T scret) { + #ifdef SHIFT + SCALE_T scalevec1 = scvec1 + scret; + SCALE_T scalevec2 = scvec2 + scret; + #else + SCALE_T scalevec1 = scvec1 * scret; + SCALE_T scalevec2 = scvec2 * scret; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); + #else + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); + #endif + } + #endif + + while (len--) { #ifdef SHIFT - ret[i] = ((vec1[i] >> (scvec1 + scret)) - (vec2[i] >> (scvec2 + scret))); + *ret++ = ((*vec1++ >> scalevec1) - (*vec2++ >> scalevec2)); #else - ret[i] = ((vec1[i] / scvec1) / scret) - ((vec2[i] / scvec2) / scret); + *ret++ = ((*vec1++ / scalevec1) - (*vec2++ / scalevec2)); #endif } } -void v_q_hadamard(const INT_T* const vec1, const INT_T* const vec2, ITER_T len, - INT_T* const ret, SCALE_T scvec1, SCALE_T scvec2) { - for (ITER_T i = 0; i < len; i++) { + +void q7_v_hadamard(const Q7_T* vec1, const Q7_T* vec2, ITER_T len, Q7_T* ret, + SCALE_T scvec1, SCALE_T scvec2) { + #ifdef SHIFT + SCALE_T scalevec = scvec1 + scvec2; + #else + SCALE_T scalevec = scvec1 * scvec2; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = (((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) >> scalevec); + *ret++ = (((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) >> scalevec); + *ret++ = (((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) >> scalevec); + *ret++ = (((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) >> scalevec); + #else + *ret++ = ((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) / scalevec; + *ret++ = ((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) / scalevec; + *ret++ = ((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) / scalevec; + *ret++ = ((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) / scalevec; + #endif + } + #endif + + while (len--) { #ifdef SHIFT - ret[i] = ((INTM_T)vec1[i] * (INTM_T)vec2[i]) >> (scvec1 + scvec2); + *ret++ = (((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) >> scalevec); #else - ret[i] = ((((INTM_T)vec1[i] * (INTM_T)vec2[i]) / scvec1) / scvec2); + *ret++ = ((Q15_T)(*vec1++) * (Q15_T)(*vec2++)) / scalevec; #endif } } -void v_q_sigmoid(const INT_T* const vec, ITER_T len, INT_T* const ret, INT_T div, - INT_T add, INT_T sigmoid_limit, SCALE_T scale_in, - SCALE_T scale_out) { - for (ITER_T i = 0; i < len; i++) { - INT_T x = (vec[i] / div) + add; - - if (x >= sigmoid_limit) { - ret[i] = sigmoid_limit << (scale_out - scale_in); - } else if (x <= 0) { - ret[i] = 0; - } else { - ret[i] = x << (scale_out - scale_in); +void q15_v_hadamard(const Q15_T* vec1, const Q15_T* vec2, ITER_T len, + Q15_T* ret, SCALE_T scvec1, SCALE_T scvec2) { + #ifdef SHIFT + SCALE_T scalevec = scvec1 + scvec2; + #else + SCALE_T scalevec = scvec1 * scvec2; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = (((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) >> scalevec); + *ret++ = (((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) >> scalevec); + *ret++ = (((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) >> scalevec); + *ret++ = (((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) >> scalevec); + #else + *ret++ = ((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) / scalevec; + *ret++ = ((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) / scalevec; + *ret++ = ((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) / scalevec; + *ret++ = ((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) / scalevec; + #endif } + #endif + + while (len--) { + #ifdef SHIFT + *ret++ = (((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) >> scalevec); + #else + *ret++ = ((Q31_T)(*vec1++) * (Q31_T)(*vec2++)) / scalevec; + #endif } } -void v_q_tanh(const INT_T* const vec, ITER_T len, INT_T* const ret, - SCALE_T scale_in, SCALE_T scale_out) { - INT_T scale = (1 << scale_in); - for (ITER_T i = 0; i < len; i++) { - if (vec[i] >= scale) { - ret[i] = scale; - } else if (vec[i] <= -scale) { - ret[i] = (-scale); - } else { - ret[i] = vec[i]; +void q15_v_sigmoid(const Q15_T* vec, ITER_T len, Q15_T* ret, Q15_T div, + Q15_T add, Q15_T sigmoid_limit, SCALE_T scale_in, + SCALE_T scale_out, ITER_T use_tables) { + if (use_tables) { + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + Q15_T w = *vec++; + Q15_T x = *vec++; + Q15_T y = *vec++; + Q15_T z = *vec++; + + *ret++ = (w <= 0) ? (Q15_T)((((Q31_T)exp_base_16(w, 1)) << 14) / + ((Q31_T)exp_base_16(w, 1) + (Q31_T)16384)) : + (Q15_T)(((Q31_T)267943936L) / + ((Q31_T)16384 + (Q31_T)exp_base_16(-w, 1))); + *ret++ = (x <= 0) ? (Q15_T)((((Q31_T)exp_base_16(x, 1)) << 14) / + ((Q31_T)exp_base_16(x, 1) + (Q31_T)16384)) : + (Q15_T)(((Q31_T)267943936L) / + ((Q31_T)16384 + (Q31_T)exp_base_16(-x, 1))); + *ret++ = (y <= 0) ? (Q15_T)((((Q31_T)exp_base_16(y, 1)) << 14) / + ((Q31_T)exp_base_16(y, 1) + (Q31_T)16384)) : + (Q15_T)(((Q31_T)267943936L) / + ((Q31_T)16384 + (Q31_T)exp_base_16(-y, 1))); + *ret++ = (z <= 0) ? (Q15_T)((((Q31_T)exp_base_16(z, 1)) << 14) / + ((Q31_T)exp_base_16(z, 1) + (Q31_T)16384)) : + (Q15_T)(((Q31_T)267943936L) / + ((Q31_T)16384 + (Q31_T)exp_base_16(-z, 1))); + } + #endif + + while (len--) { + Q15_T w = *vec++; + *ret++ = (w <= 0) ? (Q15_T)((((Q31_T)exp_base_16(w, 1)) << 14) / + ((Q31_T)exp_base_16(w, 1) + (Q31_T)16384)) : + (Q15_T)(((Q31_T)267943936L) / + ((Q31_T)16384 + (Q31_T)exp_base_16(-w, 1))); + } + } else { + SCALE_T scaleout = (scale_out - scale_in); + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + Q15_T w = (*vec++ / div) + add; + Q15_T x = (*vec++ / div) + add; + Q15_T y = (*vec++ / div) + add; + Q15_T z = (*vec++ / div) + add; + + *ret++ = (w <= 0) ? 0 : (((w >= sigmoid_limit) ? sigmoid_limit : w) << scaleout); + *ret++ = (x <= 0) ? 0 : (((x >= sigmoid_limit) ? sigmoid_limit : x) << scaleout); + *ret++ = (y <= 0) ? 0 : (((y >= sigmoid_limit) ? sigmoid_limit : y) << scaleout); + *ret++ = (z <= 0) ? 0 : (((z >= sigmoid_limit) ? sigmoid_limit : z) << scaleout); + } + #endif + + while (len--) { + Q15_T w = (*vec++ / div) + add; + *ret++ = (w <= 0) ? 0 : (((w >= sigmoid_limit) ? sigmoid_limit : w) << scaleout); } - ret[i] <<= (scale_out - scale_in); } } -void v_q_scalar_add(INT_T scalar, const INT_T* const vec, ITER_T len, - INT_T* const ret, SCALE_T scscalar, SCALE_T scvec, SCALE_T scret) { - for (ITER_T i = 0; i < len; i++) { - #ifdef SHIFT - ret[i] = ((scalar >> (scscalar + scret)) + (vec[i] >> (scvec + scret))); - #else - ret[i] = ((scalar / scscalar) / scret) + ((vec[i] / scvec) / scret); +void q15_v_tanh(const Q15_T* vec, ITER_T len, Q15_T* ret, SCALE_T scale_in, + SCALE_T scale_out, ITER_T use_tables) { + if (use_tables) { + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + Q15_T w = q15_saturate(2 * (*vec++)); + Q15_T x = q15_saturate(2 * (*vec++)); + Q15_T y = q15_saturate(2 * (*vec++)); + Q15_T z = q15_saturate(2 * (*vec++)); + + *ret++ = (w <= 0) ? (Q15_T)((((Q31_T)(exp_base_16(w, 1) - 16384)) << 14) / + (exp_base_16(w, 1) + 16384)) : + (Q15_T)((((Q31_T)(16384 - exp_base_16(-w, 1))) << 14) / + (exp_base_16(-w, 1) + 16384)); + *ret++ = (x <= 0) ? (Q15_T)((((Q31_T)(exp_base_16(x, 1) - 16384)) << 14) / + (exp_base_16(x, 1) + 16384)) : + (Q15_T)((((Q31_T)(16384 - exp_base_16(-x, 1))) << 14) / + (exp_base_16(-x, 1) + 16384)); + *ret++ = (y <= 0) ? (Q15_T)((((Q31_T)(exp_base_16(y, 1) - 16384)) << 14) / + (exp_base_16(y, 1) + 16384)) : + (Q15_T)((((Q31_T)(16384 - exp_base_16(-y, 1))) << 14) / + (exp_base_16(-y, 1) + 16384)); + *ret++ = (z <= 0) ? (Q15_T)((((Q31_T)(exp_base_16(z, 1) - 16384)) << 14) / + (exp_base_16(z, 1) + 16384)) : + (Q15_T)((((Q31_T)(16384 - exp_base_16(-z, 1))) << 14) / + (exp_base_16(-z, 1) + 16384)); + } + #endif + + while (len--) { + Q15_T w = q15_saturate(2 * (*vec++)); + *ret++ = (w <= 0) ? (Q15_T)((((Q31_T)(exp_base_16(w, 1) - 16384)) << 14) / + (exp_base_16(w, 1) + 16384)) : + (Q15_T)((((Q31_T)(16384 - exp_base_16(-w, 1))) << 14) / + (exp_base_16(-w, 1) + 16384)); + } + } else { + SCALE_T scalein = (1 << scale_in); + SCALE_T scaleout = scale_out - scale_in; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + Q15_T w = *vec++; + Q15_T x = *vec++; + Q15_T y = *vec++; + Q15_T z = *vec++; + + *ret++ = ((w >= scalein) ? scalein : ((w <= -scalein) ? (-scalein) : w)) << scaleout; + *ret++ = ((x >= scalein) ? scalein : ((x <= -scalein) ? (-scalein) : x)) << scaleout; + *ret++ = ((y >= scalein) ? scalein : ((y <= -scalein) ? (-scalein) : y)) << scaleout; + *ret++ = ((z >= scalein) ? scalein : ((z <= -scalein) ? (-scalein) : z)) << scaleout; + } #endif + + while (len--) { + Q15_T w = *vec++; + *ret++ = ((w >= scalein) ? scalein : ((w <= -scalein) ? (-scalein) : w)) << scaleout; + } } } -void v_q_scalar_sub(INT_T scalar, const INT_T* const vec, ITER_T len, - INT_T* const ret, SCALE_T scscalar, SCALE_T scvec, SCALE_T scret) { - for (ITER_T i = 0; i < len; i++) { +void q15_v_scalar_add(Q15_T scalar, const Q15_T* vec, ITER_T len, Q15_T* ret, + SCALE_T scscalar, SCALE_T scvec, SCALE_T scret) { + #ifdef SHIFT + SCALE_T scaledscalar = scalar >> (scscalar + scret); + SCALE_T scalevec = scvec + scret; + #else + SCALE_T scaledscalar = scalar / (scscalar * scret); + SCALE_T scalevec = scvec * scret; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = (scaledscalar + (*vec++ >> scalevec)); + *ret++ = (scaledscalar + (*vec++ >> scalevec)); + *ret++ = (scaledscalar + (*vec++ >> scalevec)); + *ret++ = (scaledscalar + (*vec++ >> scalevec)); + #else + *ret++ = (scaledscalar + (*vec++ / scalevec)); + *ret++ = (scaledscalar + (*vec++ / scalevec)); + *ret++ = (scaledscalar + (*vec++ / scalevec)); + *ret++ = (scaledscalar + (*vec++ / scalevec)); + #endif + } + #endif + + while (len--) { #ifdef SHIFT - ret[i] = ((scalar >> (scscalar + scret)) - (vec[i] >> (scvec + scret))); + *ret++ = (scaledscalar + (*vec++ >> scalevec)); #else - ret[i] = ((scalar / scscalar) / scret) - ((vec[i] / scvec) / scret); + *ret++ = (scaledscalar + (*vec++ / scalevec)); #endif } } -void v_q_sub_scalar(const INT_T* const vec, INT_T scalar, ITER_T len, - INT_T* const ret, SCALE_T scvec, SCALE_T scscalar, SCALE_T scret) { - for (ITER_T i = 0; i < len; i++) { +void q15_v_scalar_sub(Q15_T scalar, const Q15_T* vec, ITER_T len, Q15_T* ret, + SCALE_T scscalar, SCALE_T scvec, SCALE_T scret) { + #ifdef SHIFT + SCALE_T scaledscalar = scalar >> (scscalar + scret); + SCALE_T scalevec = scvec + scret; + #else + SCALE_T scaledscalar = scalar / (scscalar * scret); + SCALE_T scalevec = scvec * scret; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = (scaledscalar - (*vec++ >> scalevec)); + *ret++ = (scaledscalar - (*vec++ >> scalevec)); + *ret++ = (scaledscalar - (*vec++ >> scalevec)); + *ret++ = (scaledscalar - (*vec++ >> scalevec)); + #else + *ret++ = (scaledscalar - (*vec++ / scalevec)); + *ret++ = (scaledscalar - (*vec++ / scalevec)); + *ret++ = (scaledscalar - (*vec++ / scalevec)); + *ret++ = (scaledscalar - (*vec++ / scalevec)); + #endif + } + #endif + + while (len--) { #ifdef SHIFT - ret[i] = ((vec[i] >> (scvec + scret)) - (scalar >> (scscalar + scret))); + *ret++ = (scaledscalar - (*vec++ >> scalevec)); #else - ret[i] = ((vec[i] / scvec) / scret) - ((scalar / scscalar) / scret); + *ret++ = (scaledscalar - (*vec++ / scalevec)); #endif } } -void v_q_scalar_mul(INT_T scalar, const INT_T* const vec, ITER_T len, - INT_T* const ret, SCALE_T scscalar, SCALE_T scvec) { - for (ITER_T i = 0; i < len; i++) { +void q15_v_scalar_mul(Q15_T scalar, const Q15_T* vec, ITER_T len, Q15_T* ret, + SCALE_T scscalar, SCALE_T scvec) { + SCALE_T upscalar = scalar; + #ifdef SHIFT + SCALE_T scale = scscalar + scvec; + #else + SCALE_T scale = scscalar * scvec; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = (upscalar * (Q31_T)(*vec++)) >> scale; + *ret++ = (upscalar * (Q31_T)(*vec++)) >> scale; + *ret++ = (upscalar * (Q31_T)(*vec++)) >> scale; + *ret++ = (upscalar * (Q31_T)(*vec++)) >> scale; + #else + *ret++ = (upscalar * (Q31_T)(*vec++)) / scale; + *ret++ = (upscalar * (Q31_T)(*vec++)) / scale; + *ret++ = (upscalar * (Q31_T)(*vec++)) / scale; + *ret++ = (upscalar * (Q31_T)(*vec++)) / scale; + #endif + } + #endif + + while (len--) { #ifdef SHIFT - ret[i] = ((INTM_T)scalar * (INTM_T)vec[i]) >> (scscalar + scvec); + *ret++ = (upscalar * (Q31_T)(*vec++)) >> scale; #else - ret[i] = ((((INTM_T)scalar * (INTM_T)vec[i]) / scscalar) / scvec); + *ret++ = (upscalar * (Q31_T)(*vec++)) / scale; #endif } } -void v_q_argmax(const INT_T* const vec, ITER_T len, ITER_T* const ret) { - INT_T max_value = vec[0]; +void q15_v_argmax(const Q15_T* const vec, ITER_T len, ITER_T* const ret) { + Q15_T max_value = vec[0]; ITER_T max_index = 0; for (ITER_T i = 1; i < len; i++) { @@ -164,254 +440,498 @@ void v_q_argmax(const INT_T* const vec, ITER_T len, ITER_T* const ret) { *ret = max_index; } -void v_q_relu(INT_T* const vec, ITER_T len) { - for (ITER_T i = 0; i < len; i++) { - if (vec[i] < 0) { - vec[i] = 0; +void q15_v_scale_up(const Q15_T* vec, ITER_T len, Q15_T* ret, SCALE_T scvec) { + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*vec++) << scvec); + *ret++ = ((*vec++) << scvec); + *ret++ = ((*vec++) << scvec); + *ret++ = ((*vec++) << scvec); + #else + *ret++ = ((*vec++) * scvec); + *ret++ = ((*vec++) * scvec); + *ret++ = ((*vec++) * scvec); + *ret++ = ((*vec++) * scvec); + #endif } - } -} + #endif -void v_q_exp(const INT_T* const vec, ITER_T len, INT_T* const ret, - SCALE_T scvec, SCALE_T scret) { - for (ITER_T i = 0; i < len; i++) { - ret[i] = ((INT_T)(exp(((float)vec[i]) / scvec) * scret)); - } -} - -void v_q_scale_up(INT_T* const vec, ITER_T len, SCALE_T scvec) { - for (ITER_T i = 0; i < len; i++) { + while (len--) { #ifdef SHIFT - vec[i] <<= scvec; + *ret++ = ((*vec++) << scvec); #else - vec[i] *= scvec; + *ret++ = ((*vec++) * scvec); #endif } } -void v_q_scale_down(INT_T* const vec, ITER_T len, SCALE_T scvec) { - for (ITER_T i = 0; i < len; i++) { +void q15_v_scale_down(const Q15_T* vec, ITER_T len, Q15_T* ret, SCALE_T scvec) { + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*vec++) >> scvec); + *ret++ = ((*vec++) >> scvec); + *ret++ = ((*vec++) >> scvec); + *ret++ = ((*vec++) >> scvec); + #else + *ret++ = ((*vec++) / scvec); + *ret++ = ((*vec++) / scvec); + *ret++ = ((*vec++) / scvec); + *ret++ = ((*vec++) / scvec); + #endif + } + #endif + + while (len--) { #ifdef SHIFT - vec[i] >>= scvec; + *ret++ = ((*vec++) >> scvec); #else - vec[i] /= scvec; + *ret++ = ((*vec++) / scvec); #endif } } -void m_q_transpose(const INT_T* const mat, ITER_T nrows, ITER_T ncols, - INT_T* const ret) { - ITER_T len = nrows * ncols, counter = 0; - for (ITER_T i = 0; i < len; i++) { - if (counter >= len) { - counter -= len - 1; +void q15xq7_q15_m_mulvec(const Q15_T* mat, const Q7_T* const vec, ITER_T nrows, + ITER_T ncols, Q15_T* ret, SCALE_T scmat, + SCALE_T scvec, SCALE_T H1, SCALE_T H2) { + Q31_T sum; + #ifdef SHIFT + SCALE_T scale = scmat + scvec + H1; + #else + SCALE_T scale = scmat * scvec * H1; + #endif + + while (nrows--) { + sum = 0; + ITER_T cols = ncols; + const Q7_T* vec_offset = (const Q7_T*)vec; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = cols >> 2; + cols = cols % 4; + while (len_unroll--) { + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); + } + #endif + + while (cols--) { + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); } - ret[i] = mat[counter]; - counter += nrows; + #ifdef SHIFT + *ret++ = (sum >> scale); + #else + *ret++ = (sum / scale); + #endif } } -void m_q_reverse(const INT_T* const mat, ITER_T nrows, ITER_T ncols, ITER_T axis, - INT_T* const ret) { - ITER_T len = nrows * ncols; +void q15_m_mulvec(const Q15_T* mat, const Q15_T* const vec, ITER_T nrows, + ITER_T ncols, Q15_T* ret, SCALE_T scmat, SCALE_T scvec, + SCALE_T H1, SCALE_T H2) { + Q63_T sum; + #ifdef SHIFT + SCALE_T scale = scmat + scvec + H1; + #else + // Be careful, the below implementation would not work if the denominator + // exceeds the range of Q31_T range. In such a case, cast the denominator + // to int64_t. + SCALE_T scale = scmat * scvec * H1; + #endif - if (axis == 0) { - ITER_T col_counter = 0, row_index = len - ncols; + while (nrows--) { + sum = 0; + ITER_T cols = ncols; + const Q15_T* vec_offset = (const Q15_T*)vec; - for (ITER_T i = 0; i < len; i++) { - if (col_counter >= ncols) { - col_counter = 0; - row_index -= ncols; + #ifdef LOOP_UNROLL + ITER_T len_unroll = cols >> 2; + cols = cols % 4; + while (len_unroll--) { + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); } + #endif - ret[i] = mat[row_index + col_counter]; - col_counter++; + while (cols--) { + sum += (Q31_T)(*mat++) * (Q31_T)(*vec_offset++); } - } else { - S_ITER_T row_counter = ncols - 1; - ITER_T col_index = 0; - - for (ITER_T i = 0; i < len; i++) { - if (row_counter < 0) { - row_counter = ncols - 1; - col_index += ncols; - } - ret[i] = mat[col_index + (ITER_T)row_counter]; - row_counter--; - } + #ifdef SHIFT + *ret++ = (sum >> scale); + #else + *ret++ = (sum / scale); + #endif } } -void m_q_add_vec(const INT_T* const mat, const INT_T* const vec, - ITER_T nrows, ITER_T ncols, INT_T* const ret, - SCALE_T scmat, SCALE_T scvec, SCALE_T scret) { - ITER_T len = nrows * ncols; - for (ITER_T i = 0, w = 0; i < len; i++, w++) { - if (w >= ncols) { - w = 0; +void q7_t_add(const Q7_T* ten1, const Q7_T* ten2, ITER_T nbatches, ITER_T nrows, + ITER_T ncols, ITER_T nchannels, Q7_T* ret, SCALE_T scten1, + SCALE_T scten2, SCALE_T scret) { + ITER_T len = nbatches * nrows * ncols * nchannels; + + #ifdef SHIFT + SCALE_T scaleten1 = scten1 + scret; + SCALE_T scaleten2 = scten2 + scret; + #else + SCALE_T scaleten1 = scten1 * scret; + SCALE_T scaleten2 = scten2 * scret; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); + #else + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); + #endif } + #endif + while (len--) { #ifdef SHIFT - ret[i] = ((mat[i] >> (scmat + scret)) + (vec[w] >> (scvec + scret))); + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); #else - ret[i] = ((mat[i] / scmat) / scret) + ((vec[w] / scvec) / scret); + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); #endif } } -void m_q_sub_vec(const INT_T* const mat, const INT_T* const vec, - ITER_T nrows, ITER_T ncols, INT_T* const ret, - SCALE_T scmat, SCALE_T scvec, SCALE_T scret) { - ITER_T len = nrows * ncols; - for (ITER_T i = 0, w = 0; i < len; i++, w++) { - if (w >= ncols) { - w = 0; +void q15_t_add(const Q15_T* ten1, const Q15_T* ten2, ITER_T nbatches, + ITER_T nrows, ITER_T ncols, ITER_T nchannels, Q15_T* ret, + SCALE_T scten1, SCALE_T scten2, SCALE_T scret) { + ITER_T len = nbatches * nrows * ncols * nchannels; + #ifdef SHIFT + SCALE_T scaleten1 = scten1 + scret; + SCALE_T scaleten2 = scten2 + scret; + #else + SCALE_T scaleten1 = scten1 * scret; + SCALE_T scaleten2 = scten2 * scret; + #endif + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); + #else + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); + #endif } + #endif + while (len--) { #ifdef SHIFT - ret[i] = ((mat[i] >> (scmat + scret)) - (vec[w] >> (scvec + scret))); + *ret++ = ((*ten1++ >> scaleten1) + (*ten2++ >> scaleten2)); #else - ret[i] = ((mat[i] / scmat) / scret) - ((vec[w] / scvec) / scret); + *ret++ = ((*ten1++ / scaleten1) + (*ten2++ / scaleten2)); #endif } } -void m_q_mulvec(const INT_T* const mat, const INT_T* const vec, ITER_T nrows, - ITER_T ncols, INT_T* const ret, SCALE_T scmat, SCALE_T scvec, - SCALE_T H1, SCALE_T H2) { - INTM_T treesumBuffer[ncols]; - for (ITER_T row = 0; row < nrows; row++) { - INT_T* mat_offset = (INT_T*)mat + row * ncols; +void q7xq15_q7_t_add_vec(const Q7_T* ten, const Q15_T* const vec, + ITER_T nbatches, ITER_T nrows, ITER_T ncols, + ITER_T nchannels, Q7_T* ret, SCALE_T scten, + SCALE_T scvec, SCALE_T scret) { + ITER_T len = nbatches * nrows * ncols; + #ifdef SHIFT + SCALE_T scaleten = scten + scret; + SCALE_T scalevec = scvec + scret; + #else + SCALE_T scaleten = scten * scret; + SCALE_T scalevec = scvec * scret; + #endif - for (ITER_T col = 0; col < ncols; col++) { - treesumBuffer[col] = ((INTM_T)(*mat_offset++) * (INTM_T)vec[col]); - } + while (len--) { + ITER_T channels = nchannels; + const Q15_T* vec_offset = (const Q15_T*)vec; - v_q_treesum(&treesumBuffer[0], ncols, H1, H2); - #ifdef SHIFT - ret[row] = (treesumBuffer[0] >> (scmat + scvec)); - #else - ret[row] = ((treesumBuffer[0] / scmat) / scvec); + #ifdef LOOP_UNROLL + ITER_T len_unroll = channels >> 2; + channels = channels % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + #else + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + #endif + } #endif + + while (channels--) { + #ifdef SHIFT + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + #else + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + #endif + } } } -void m_q_sparse_mulvec(const ITER_T* const col_indices, const INT_T* const mat_values, - const INT_T* const vec, ITER_T ndims, INT_T* const ret, - SCALE_T scmat, SCALE_T scvec, SCALE_T scret) { - ITER_T iter_index = 0, iter_value = 0; - for (ITER_T k = 0; k < ndims; k++) { - ITER_T index = col_indices[iter_index]; +void q15_t_add_vec(const Q15_T* ten, const Q15_T* const vec, + ITER_T nbatches, ITER_T nrows, ITER_T ncols, + ITER_T nchannels, Q15_T* ret, SCALE_T scten, + SCALE_T scvec, SCALE_T scret) { + ITER_T len = nbatches * nrows * ncols; + #ifdef SHIFT + SCALE_T scaleten = scten + scret; + SCALE_T scalevec = scvec + scret; + #else + SCALE_T scaleten = scten * scret; + SCALE_T scalevec = scvec * scret; + #endif + + while (len--) { + ITER_T channels = nchannels; + const Q15_T* vec_offset = (const Q15_T*)vec; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = channels >> 2; + channels = channels % 4; + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); + #else + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); + #endif + } + #endif - while (index != 0) { + while (channels--) { #ifdef SHIFT - ret[index - 1] += (((INTM_T)mat_values[iter_value] * (INTM_T)vec[k]) >> (scmat + scvec + scret)); + *ret++ = ((*ten++ >> scaleten) + (*vec_offset++ >> scalevec)); #else - ret[index - 1] += (((INTM_T)mat_values[iter_value] * (INTM_T)vec[k]) / ((INTM_T)scmat * (INTM_T)scvec * (INTM_T)scret)); + *ret++ = ((*ten++ / scaleten) + (*vec_offset++ / scalevec)); #endif - iter_index++; - iter_value++; - index = col_indices[iter_index]; } - - iter_index++; } } -void t_q_add_vec(const INT_T* const mat, const INT_T* const vec, - ITER_T nbatches, ITER_T nrows, ITER_T ncols, - ITER_T nchannels, INT_T* const ret, SCALE_T scmat, - SCALE_T scvec, SCALE_T scret) { +void q7_t_relu(const Q7_T* ten, ITER_T nbatches, ITER_T nrows, ITER_T ncols, + ITER_T nchannels, Q7_T* ret, Q7_T limit, Q7_T div) { ITER_T len = nbatches * nrows * ncols * nchannels; - for (ITER_T i = 0, c = 0; i < len; i++, c++) { - if (c >= nchannels) { - c = 0; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = len >> 2; + len = len % 4; + while (len_unroll--) { + *ret++ = q7_relu(*ten++, limit) / div; + *ret++ = q7_relu(*ten++, limit) / div; + *ret++ = q7_relu(*ten++, limit) / div; + *ret++ = q7_relu(*ten++, limit) / div; } + #endif - #ifdef SHIFT - ret[i] = ((mat[i] >> (scmat + scret)) + (vec[c] >> (scvec + scret))); - #else - ret[i] = ((mat[i] / scmat) / scret) + ((vec[c] / scvec) / scret); - #endif + while (len--) { + *ret++ = q7_relu(*ten++, limit) / div; } } -void t_q_sub_vec(const INT_T* const mat, const INT_T* const vec, - ITER_T nbatches, ITER_T nrows, ITER_T ncols, - ITER_T nchannels, INT_T* const ret, SCALE_T scmat, - SCALE_T scvec, SCALE_T scret) { - ITER_T len = nbatches * nrows * ncols * nchannels; - for (ITER_T i = 0, c = 0; i < len; i++, c++) { - if (c >= nchannels) { - c = 0; +void q15_t_l2_norm(const Q15_T* ten, ITER_T nbatches, ITER_T nrows, + ITER_T ncols, ITER_T nchannels, Q15_T* ret, + SCALE_T scale_in, SCALE_T scale_out) { + ITER_T len = nbatches * nrows * ncols; + #ifndef SHIFT + SCALE_T scdiv = (1 << scale_out); + #endif + + for (ITER_T i = 0; i < len; i++) { + Q31_T sum_square = 0; + ITER_T channels = nchannels; + const Q15_T* ten_offset = ten; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = channels >> 2; + channels = channels % 4; + + while (len_unroll--) { + Q31_T w = *ten_offset++; + Q31_T x = *ten_offset++; + Q31_T y = *ten_offset++; + Q31_T z = *ten_offset++; + + sum_square += ((w * w) >> (2 * scale_out)); + sum_square += ((x * x) >> (2 * scale_out)); + sum_square += ((y * y) >> (2 * scale_out)); + sum_square += ((z * z) >> (2 * scale_out)); + } + #endif + + while (channels--) { + Q31_T w = *ten_offset++; + sum_square += ((w * w) >> (2 * scale_out)); } - #ifdef SHIFT - ret[i] = ((mat[i] >> (scmat + scret)) - (vec[c] >> (scvec + scret))); - #else - ret[i] = ((mat[i] / scmat) / scret) - ((vec[c] / scvec) / scret); + Q15_T inverse_norm_low = 1; + Q15_T inverse_norm_high = (1 << (scale_out - 1)); + Q31_T one = (1 << (-(2 * scale_in + 2))); + + while (inverse_norm_low + 1 < inverse_norm_high) { + Q15_T mid = ((inverse_norm_high + inverse_norm_low) >> 1); + + if ((Q63_T)sum_square * mid * mid > one) { + inverse_norm_high = mid; + } else { + inverse_norm_low = mid; + } + } + + channels = nchannels; + #ifdef LOOP_UNROLL + len_unroll = channels >> 2; + channels = channels % 4; + + while (len_unroll--) { + #ifdef SHIFT + *ret++ = ((*ten++) >> scale_out) * inverse_norm_low; + *ret++ = ((*ten++) >> scale_out) * inverse_norm_low; + *ret++ = ((*ten++) >> scale_out) * inverse_norm_low; + *ret++ = ((*ten++) >> scale_out) * inverse_norm_low; + #else + *ret++ = ((*ten++) / scdiv) * inverse_norm_low; + *ret++ = ((*ten++) / scdiv) * inverse_norm_low; + *ret++ = ((*ten++) / scdiv) * inverse_norm_low; + *ret++ = ((*ten++) / scdiv) * inverse_norm_low; + #endif + } #endif + + while (channels--) { + #ifdef SHIFT + *ret++ = ((*ten++) >> scale_out) * inverse_norm_low; + #else + *ret++ = ((*ten++) / scdiv) * inverse_norm_low; + #endif + } } } -void q_maxpool(const INT_T* const input, INT_T* const output, ITER_T N, - ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, ITER_T WF, ITER_T CF, - ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, S_ITER_T HPadU, - S_ITER_T HPadD, S_ITER_T WPadL, S_ITER_T WPadR, ITER_T HStride, - ITER_T WStride, ITER_T HDilation, ITER_T WDilation, - SCALE_T scinput, SCALE_T scoutput) { - S_ITER_T HOffsetL = ((S_ITER_T)HDilation * (S_ITER_T)((HF - 1) >> 1)) - HPadU; - S_ITER_T WOffsetL = ((S_ITER_T)WDilation * (S_ITER_T)((WF - 1) >> 1)) - WPadL; - S_ITER_T HOffsetR = ((S_ITER_T)HDilation * (S_ITER_T)(HF >> 1)) - HPadD; - S_ITER_T WOffsetR = ((S_ITER_T)WDilation * (S_ITER_T)(WF >> 1)) - WPadR; +void q7xq15_q7_convolution(const Q7_T* const input, const Q15_T* const filter, + Q7_T* const output, ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, + ITER_T WF, ITER_T CF, ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, + S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, S_ITER_T WPadR, + ITER_T HStride, ITER_T WStride, ITER_T HDilation, ITER_T WDilation, + SCALE_T scinput, SCALE_T scoutput, SCALE_T demote) { + S_ITER_T HOffsetFL = ((HF - 1) >> 1); + S_ITER_T HOffsetFR = (HF >> 1); + S_ITER_T WOffsetFL = ((WF - 1) >> 1); + S_ITER_T WOffsetFR = (WF >> 1); + + S_ITER_T HOffsetL = ((S_ITER_T)HDilation * HOffsetFL) - HPadU; + S_ITER_T WOffsetL = ((S_ITER_T)WDilation * WOffsetFL) - WPadL; + S_ITER_T HOffsetR = ((S_ITER_T)HDilation * HOffsetFR) - HPadD; + S_ITER_T WOffsetR = ((S_ITER_T)WDilation * WOffsetFR) - WPadR; ITER_T HOffsetIn = W * CIn; ITER_T NOffsetIn = H * HOffsetIn; + ITER_T WOffsetF = CF * COut; + ITER_T HOffsetF = WF * WOffsetF; + ITER_T GOffsetF = HF * HOffsetF; ITER_T WOffsetOut = (COut * G); ITER_T HOffsetOut = WOut * WOffsetOut; ITER_T NOffsetOut = HOut * HOffsetOut; + + Q31_T sum; + #ifdef SHIFT + SCALE_T scale = scinput + scoutput + demote; + #else + SCALE_T scale = scinput * scoutput * demote; + #endif for (ITER_T n = 0; n < N; n++) { ITER_T hout = 0; ITER_T NIndexIn = n * NOffsetIn; ITER_T NIndexOut = n * NOffsetOut; for (S_ITER_T h = HOffsetL; h < (S_ITER_T)H - HOffsetR; h += (S_ITER_T)HStride, hout++) { ITER_T wout = 0; - ITER_T HIndexOut = hout * HOffsetOut; + ITER_T HIndexOut = hout * HOffsetOut + NIndexOut; for (S_ITER_T w = WOffsetL; w < (S_ITER_T)W - WOffsetR; w += (S_ITER_T)WStride, wout++) { - ITER_T WIndexOut = wout * WOffsetOut; + ITER_T WIndexOut = wout * WOffsetOut + HIndexOut; for (ITER_T g = 0; g < G; g++) { - ITER_T CIndexIn = g * CF; - ITER_T CIndexOut = g * COut; + ITER_T CIndexIn = g * CF + NIndexIn; + ITER_T GIndexF = g * GOffsetF; + Q7_T* output_offset = ((Q7_T*)output) + g * COut + WIndexOut; for (ITER_T c = 0; c < COut; c++) { - INT_T max = INT_TMIN; - for (S_ITER_T hf = -((HF - 1) >> 1); hf <= (HF >> 1); hf++) { + sum = 0; + for (S_ITER_T hf = -HOffsetFL; hf <= HOffsetFR; hf++) { S_ITER_T hoffset = h + ((S_ITER_T)HDilation * hf); - ITER_T HIndexIn = ((ITER_T)hoffset) * HOffsetIn; - for (S_ITER_T wf = -((WF - 1) >> 1); wf <= (WF >> 1); wf++) { + if ((hoffset < 0) || (hoffset >= (S_ITER_T)H)) { + continue; + } + ITER_T HIndexIn = ((ITER_T)hoffset) * HOffsetIn + CIndexIn; + ITER_T HIndexF = ((ITER_T)(hf + HOffsetFL)) * HOffsetF + GIndexF + c; + for (S_ITER_T wf = -WOffsetFL; wf <= WOffsetFR; wf++) { S_ITER_T woffset = w + ((S_ITER_T)WDilation * wf); - ITER_T WIndexIn = ((ITER_T)woffset) * CIn; - for (ITER_T cf = 0; cf < CF; cf++) { - if ((hoffset < 0) || (hoffset >= (S_ITER_T)H) || (woffset < 0) || (woffset >= (S_ITER_T)W)) { - if (max < 0) { - max = 0; - } - } else { - INT_T a = input[NIndexIn + HIndexIn + WIndexIn + (cf + CIndexIn)]; - if (max < a) { - max = a; - } + if ((woffset < 0) || (woffset >= (S_ITER_T)W)) { + continue; + } + const Q7_T* input_offset = ((const Q7_T*)input) + ((ITER_T)woffset) * CIn + HIndexIn; + const Q15_T* filter_offset = ((const Q15_T*)filter) + ((ITER_T)(wf + WOffsetFL)) * WOffsetF + HIndexF; + ITER_T channels = CF; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = CF >> 2; + channels = CF % 4; + while (len_unroll--) { + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; } + #endif + + while (channels--) { + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; } } } #ifdef SHIFT - output[NIndexOut + HIndexOut + WIndexOut + (c + CIndexOut)] = (max >> (scinput + scoutput)); + *output_offset++ = (sum >> scale); #else - output[NIndexOut + HIndexOut + WIndexOut + (c + CIndexOut)] = ((max / scinput) / scoutput); + *output_offset++ = (sum / scale); #endif } } @@ -420,66 +940,192 @@ void q_maxpool(const INT_T* const input, INT_T* const output, ITER_T N, } } -void q_convolution(const INT_T* const input, const INT_T* const filter, - INT_T* const output, INTM_T* const treesumBuffer, ITER_T N, - ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, ITER_T WF, - ITER_T CF, ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, - S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, - S_ITER_T WPadR, ITER_T HStride, ITER_T WStride, - ITER_T HDilation, ITER_T WDilation, SCALE_T H1, SCALE_T H2, - SCALE_T scinput, SCALE_T scoutput) { - S_ITER_T HOffsetL = ((S_ITER_T)HDilation * (S_ITER_T)((HF - 1) >> 1)) - HPadU; - S_ITER_T WOffsetL = ((S_ITER_T)WDilation * (S_ITER_T)((WF - 1) >> 1)) - WPadL; - S_ITER_T HOffsetR = ((S_ITER_T)HDilation * (S_ITER_T)(HF >> 1)) - HPadD; - S_ITER_T WOffsetR = ((S_ITER_T)WDilation * (S_ITER_T)(WF >> 1)) - WPadR; +void q7xq15_q15_convolution(const Q7_T* const input, const Q15_T* const filter, + Q15_T* const output, ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, + ITER_T WF, ITER_T CF, ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, + S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, S_ITER_T WPadR, + ITER_T HStride, ITER_T WStride, ITER_T HDilation, ITER_T WDilation, + SCALE_T scinput, SCALE_T scoutput, SCALE_T demote) { + S_ITER_T HOffsetFL = ((HF - 1) >> 1); + S_ITER_T HOffsetFR = (HF >> 1); + S_ITER_T WOffsetFL = ((WF - 1) >> 1); + S_ITER_T WOffsetFR = (WF >> 1); + + S_ITER_T HOffsetL = ((S_ITER_T)HDilation * HOffsetFL) - HPadU; + S_ITER_T WOffsetL = ((S_ITER_T)WDilation * WOffsetFL) - WPadL; + S_ITER_T HOffsetR = ((S_ITER_T)HDilation * HOffsetFR) - HPadD; + S_ITER_T WOffsetR = ((S_ITER_T)WDilation * WOffsetFR) - WPadR; ITER_T HOffsetIn = W * CIn; ITER_T NOffsetIn = H * HOffsetIn; ITER_T WOffsetF = CF * COut; ITER_T HOffsetF = WF * WOffsetF; + ITER_T GOffsetF = HF * HOffsetF; ITER_T WOffsetOut = (COut * G); ITER_T HOffsetOut = WOut * WOffsetOut; ITER_T NOffsetOut = HOut * HOffsetOut; + + Q31_T sum; + #ifdef SHIFT + SCALE_T scale = scinput + scoutput + demote; + #else + SCALE_T scale = scinput * scoutput * demote; + #endif for (ITER_T n = 0; n < N; n++) { ITER_T hout = 0; ITER_T NIndexIn = n * NOffsetIn; ITER_T NIndexOut = n * NOffsetOut; for (S_ITER_T h = HOffsetL; h < (S_ITER_T)H - HOffsetR; h += (S_ITER_T)HStride, hout++) { ITER_T wout = 0; - ITER_T HIndexOut = hout * HOffsetOut; + ITER_T HIndexOut = hout * HOffsetOut + NIndexOut; for (S_ITER_T w = WOffsetL; w < (S_ITER_T)W - WOffsetR; w += (S_ITER_T)WStride, wout++) { - ITER_T WIndexOut = wout * WOffsetOut; + ITER_T WIndexOut = wout * WOffsetOut + HIndexOut; for (ITER_T g = 0; g < G; g++) { - ITER_T CIndexIn = g * CF; - ITER_T CIndexOut = g * COut; + ITER_T CIndexIn = g * CF + NIndexIn; + ITER_T GIndexF = g * GOffsetF; + Q15_T* output_offset = ((Q15_T*)output) + g * COut + WIndexOut; for (ITER_T c = 0; c < COut; c++) { - ITER_T counter = 0; - for (S_ITER_T hf = -((HF - 1) >> 1); hf <= (HF >> 1); hf++) { + sum = 0; + for (S_ITER_T hf = -HOffsetFL; hf <= HOffsetFR; hf++) { S_ITER_T hoffset = h + ((S_ITER_T)HDilation * hf); - ITER_T HIndexIn = ((ITER_T)hoffset) * HOffsetIn; - ITER_T HIndexF = ((ITER_T)(hf + ((HF - 1) >> 1))) * HOffsetF; - for (S_ITER_T wf = -((WF - 1) >> 1); wf <= (WF >> 1); wf++) { + if ((hoffset < 0) || (hoffset >= (S_ITER_T)H)) { + continue; + } + ITER_T HIndexIn = ((ITER_T)hoffset) * HOffsetIn + CIndexIn; + ITER_T HIndexF = ((ITER_T)(hf + HOffsetFL)) * HOffsetF + GIndexF + c; + for (S_ITER_T wf = -WOffsetFL; wf <= WOffsetFR; wf++) { S_ITER_T woffset = w + ((S_ITER_T)WDilation * wf); - ITER_T WIndexIn = ((ITER_T)woffset) * CIn; - ITER_T WIndexF = ((ITER_T)(wf + ((WF - 1) >> 1))) * WOffsetF; - for (ITER_T cf = 0; cf < CF; cf++) { - if ((hoffset < 0) || (hoffset >= (S_ITER_T)H) || (woffset < 0) || (woffset >= (S_ITER_T)W)) { - treesumBuffer[counter] = 0; - } else { - treesumBuffer[counter] = ((INTM_T)input[NIndexIn + HIndexIn + WIndexIn + (cf + CIndexIn)]) * - ((INTM_T)filter[HIndexF + WIndexF + (c + cf * COut)]); + if ((woffset < 0) || (woffset >= (S_ITER_T)W)) { + continue; + } + const Q7_T* input_offset = ((const Q7_T*)input) + ((ITER_T)woffset) * CIn + HIndexIn; + const Q15_T* filter_offset = ((const Q15_T*)filter) + ((ITER_T)(wf + WOffsetFL)) * WOffsetF + HIndexF; + ITER_T channels = CF; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = CF >> 2; + channels = CF % 4; + while (len_unroll--) { + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; } - counter++; + #endif + + while (channels--) { + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + } + } + } + + #ifdef SHIFT + *output_offset++ = (sum >> scale); + #else + *output_offset++ = (sum / scale); + #endif + } + } + } + } + } +} + +void q15_convolution(const Q15_T* const input, const Q15_T* const filter, + Q15_T* const output, ITER_T N, ITER_T H, ITER_T W, ITER_T CIn, ITER_T HF, + ITER_T WF, ITER_T CF, ITER_T COut, ITER_T HOut, ITER_T WOut, ITER_T G, + S_ITER_T HPadU, S_ITER_T HPadD, S_ITER_T WPadL, S_ITER_T WPadR, + ITER_T HStride, ITER_T WStride, ITER_T HDilation, ITER_T WDilation, + SCALE_T scinput, SCALE_T scoutput, SCALE_T demote) { + S_ITER_T HOffsetFL = ((HF - 1) >> 1); + S_ITER_T HOffsetFR = (HF >> 1); + S_ITER_T WOffsetFL = ((WF - 1) >> 1); + S_ITER_T WOffsetFR = (WF >> 1); + + S_ITER_T HOffsetL = ((S_ITER_T)HDilation * HOffsetFL) - HPadU; + S_ITER_T WOffsetL = ((S_ITER_T)WDilation * WOffsetFL) - WPadL; + S_ITER_T HOffsetR = ((S_ITER_T)HDilation * HOffsetFR) - HPadD; + S_ITER_T WOffsetR = ((S_ITER_T)WDilation * WOffsetFR) - WPadR; + + ITER_T HOffsetIn = W * CIn; + ITER_T NOffsetIn = H * HOffsetIn; + ITER_T WOffsetF = CF * COut; + ITER_T HOffsetF = WF * WOffsetF; + ITER_T GOffsetF = HF * HOffsetF; + ITER_T WOffsetOut = (COut * G); + ITER_T HOffsetOut = WOut * WOffsetOut; + ITER_T NOffsetOut = HOut * HOffsetOut; + + Q63_T sum; + #ifdef SHIFT + SCALE_T scale = scinput + scoutput + demote; + #else + SCALE_T scale = scinput * scoutput * demote; + #endif + for (ITER_T n = 0; n < N; n++) { + ITER_T hout = 0; + ITER_T NIndexIn = n * NOffsetIn; + ITER_T NIndexOut = n * NOffsetOut; + for (S_ITER_T h = HOffsetL; h < (S_ITER_T)H - HOffsetR; h += (S_ITER_T)HStride, hout++) { + ITER_T wout = 0; + ITER_T HIndexOut = hout * HOffsetOut + NIndexOut; + for (S_ITER_T w = WOffsetL; w < (S_ITER_T)W - WOffsetR; w += (S_ITER_T)WStride, wout++) { + ITER_T WIndexOut = wout * WOffsetOut + HIndexOut; + for (ITER_T g = 0; g < G; g++) { + ITER_T CIndexIn = g * CF + NIndexIn; + ITER_T GIndexF = g * GOffsetF; + Q15_T* output_offset = ((Q15_T*)output) + g * COut + WIndexOut; + for (ITER_T c = 0; c < COut; c++) { + + sum = 0; + for (S_ITER_T hf = -HOffsetFL; hf <= HOffsetFR; hf++) { + S_ITER_T hoffset = h + ((S_ITER_T)HDilation * hf); + if ((hoffset < 0) || (hoffset >= (S_ITER_T)H)) { + continue; + } + ITER_T HIndexIn = ((ITER_T)hoffset) * HOffsetIn + CIndexIn; + ITER_T HIndexF = ((ITER_T)(hf + HOffsetFL)) * HOffsetF + GIndexF + c; + for (S_ITER_T wf = -WOffsetFL; wf <= WOffsetFR; wf++) { + S_ITER_T woffset = w + ((S_ITER_T)WDilation * wf); + if ((woffset < 0) || (woffset >= (S_ITER_T)W)) { + continue; + } + const Q15_T* input_offset = ((const Q15_T*)input) + ((ITER_T)woffset) * CIn + HIndexIn; + const Q15_T* filter_offset = ((const Q15_T*)filter) + ((ITER_T)(wf + WOffsetFL)) * WOffsetF + HIndexF; + ITER_T channels = CF; + + #ifdef LOOP_UNROLL + ITER_T len_unroll = CF >> 2; + channels = CF % 4; + while (len_unroll--) { + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; + } + #endif + + while (channels--) { + sum += ((Q31_T)(*input_offset++)) * ((Q31_T)(*filter_offset)); + filter_offset += COut; } } } - v_q_treesum(&treesumBuffer[0], HF * WF * CF, H1, H2); #ifdef SHIFT - output[NIndexOut + HIndexOut + WIndexOut + (c + CIndexOut)] = (treesumBuffer[0] >> (scinput + scoutput)); + *output_offset++ = (sum >> scale); #else - output[NIndexOut + HIndexOut + WIndexOut + (c + CIndexOut)] = ((treesumBuffer[0] / scinput) / scoutput); + *output_offset++ = (sum / scale); #endif } } diff --git a/c_reference/tests/Makefile b/c_reference/tests/Makefile index 5a55e8538..9b31377f7 100644 --- a/c_reference/tests/Makefile +++ b/c_reference/tests/Makefile @@ -4,16 +4,17 @@ include ../config.mk INCLUDE_DIR=../include +MODEL_DIR=../models SRC_DIR=../src -IFLAGS = -I $(INCLUDE_DIR) +IFLAGS = -I $(INCLUDE_DIR) -I $(MODEL_DIR) -all: test_fastgrnn_lr test_rnnpool test_quantized_utils test_quantized_fastgrnn test_quantized_rnnpool test_quantized_mbconv +all: test_fastgrnn_lr test_rnnpool test_quantized_utils test_quantized_fastgrnn test_quantized_rnnpool test_quantized_mbconv test_quantized_face_detection test_quantized_face_detection_fast FASTGRNN_DIR=fastgrnn test_fastgrnn_lr: $(FASTGRNN_DIR)/test_fastgrnn_lr.c $(SRC_DIR)/utils.o $(SRC_DIR)/fastgrnn.o $(SRC_DIR)/classifier.o $(CC) -o $@ $^ $(IFLAGS) $(CFLAGS) -lm test_quantized_fastgrnn: $(FASTGRNN_DIR)/test_quantized_fastgrnn.c $(SRC_DIR)/quantized_utils.o $(SRC_DIR)/quantized_fastgrnn.o - $(CC) -o $@ $^ $(IFLAGS) $(CFLAGS) -lm + $(CC) -o $@ $^ $(IFLAGS) $(CFLAGS) -Wno-unused-variable -lm RNNPOOL_DIR=rnnpool test_rnnpool: $(RNNPOOL_DIR)/test_rnnpool.c $(SRC_DIR)/utils.o $(SRC_DIR)/fastgrnn.o $(SRC_DIR)/rnnpool.o @@ -29,10 +30,16 @@ MBCONV_DIR=mbconv test_quantized_mbconv: $(MBCONV_DIR)/test_quantized_mbconv.c $(SRC_DIR)/quantized_utils.o $(SRC_DIR)/quantized_mbconv.o $(CC) -o $@ $^ $(IFLAGS) $(CFLAGS) -Wno-unused-result -lm +FACE_DETECTION_DIR=face_detection +test_quantized_face_detection: $(FACE_DETECTION_DIR)/test_quantized_face_detection.c $(SRC_DIR)/quantized_utils.o $(SRC_DIR)/quantized_fastgrnn.o $(SRC_DIR)/quantized_rnnpool.o $(SRC_DIR)/quantized_mbconv.o $(MODEL_DIR)/quantized_face_detection.o + $(CC) -o $@ $^ $(IFLAGS) $(CFLAGS) -Wno-unused-result -lm +test_quantized_face_detection_fast: $(FACE_DETECTION_DIR)/test_quantized_face_detection_fast.c $(SRC_DIR)/quantized_utils.o $(SRC_DIR)/quantized_fastgrnn.o $(SRC_DIR)/quantized_rnnpool.o $(SRC_DIR)/quantized_mbconv.o $(MODEL_DIR)/quantized_face_detection_fast.o + $(CC) -o $@ $^ $(IFLAGS) $(CFLAGS) -Wno-unused-result -lm + .PHONY: clean cleanest clean: - rm -f *.o *.gch test_fastgrnn_lr test_rnnpool test_quantized_utils test_quantized_fastgrnn test_quantized_rnnpool + rm -f *.o *.gch test_fastgrnn_lr test_rnnpool test_quantized_utils test_quantized_fastgrnn test_quantized_rnnpool test_quantized_mbconv test_quantized_face_detection test_quantized_face_detection_fast cleanest: clean rm *~ diff --git a/c_reference/tests/face_detection/test_quantized_face_detection.c b/c_reference/tests/face_detection/test_quantized_face_detection.c new file mode 100644 index 000000000..9ab013b63 --- /dev/null +++ b/c_reference/tests/face_detection/test_quantized_face_detection.c @@ -0,0 +1,217 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +#include +#include +#include +#include +#include + +#include "quantized_datatypes.h" +#include "quantized_face_detection.h" + +#define MEM_BUF_SIZE 188160 +#define INPUT_IMG_HEIGHT 240 +#define INPUT_IMG_WIDTH 320 +#define OUTPUT_SIZE 18000 + +// Fixed Point Output Corresponding To SCUT-HEAD Face-2 Image: 1 +#ifdef SHIFT + const Q15_T expected[OUTPUT_SIZE] = {8400, -10670, 10512, -13110, 11143, -13292, 10892, -12643, 10804, -12366, 11051, -12731, 10773, -13248, 10934, -13700, 10503, -14455, 10268, -14466, 9207, -14015, 9069, -14486, 8745, -14200, 9250, -14174, 9507, -13559, 9402, -13061, 8445, -11780, 7845, -11679, 6777, -12095, 6590, -12366, 7164, -10854, 7658, -10424, 8116, -12765, 8084, -14031, 8533, -14374, 7411, -13081, 6754, -11888, 6652, -12774, 8358, -12413, 9257, -12238, 7953, -13293, 7444, -12936, 7158, -12602, 7464, -12197, 7644, -11762, 7875, -12003, 7627, -12494, 7844, -12951, 8025, -12665, 7033, -10211, 10454, -11972, 13239, -16059, 14730, -15882, 14436, -16155, 14326, -16755, 14459, -16429, 14173, -17385, 13974, -17413, 12899, -17356, 12066, -18377, 10604, -18489, 10613, -19080, 10675, -18484, 11570, -16004, 12002, -17178, 12412, -16815, 12021, -17529, 10548, -16646, 8445, -15194, 8662, -14145, 9253, -14380, 9226, -15046, 9055, -15856, 9419, -16221, 10087, -16379, 10183, -16840, 8053, -16327, 7223, -16887, 8981, -18012, 11118, -15868, 9905, -16682, 9177, -16993, 8555, -16615, 8598, -16063, 8697, -16298, 9391, -16507, 9036, -16241, 9856, -17696, 10124, -16337, 8884, -12852, 9506, -11825, 12664, -17665, 13797, -18014, 13749, -17876, 12964, -16457, 12552, -17390, 12487, -18460, 12243, -19135, 11399, -18645, 9935, -17104, 8668, -17965, 8817, -16399, 8830, -17668, 9890, -18184, 11403, -19534, 11166, -18353, 10567, -18008, 9715, -17733, 7917, -16302, 7396, -15458, 7087, -13712, 7899, -15704, 9129, -17179, 9572, -17946, 9505, -16759, 9559, -16661, 7378, -17380, 6988, -14443, 7803, -19088, 10318, -16248, 9893, -16909, 8621, -18086, 8549, -17461, 8256, -15458, 8311, -16412, 8003, -16835, 7595, -17224, 7605, -17750, 7908, -16697, 7025, -14396, 8617, -12857, 10913, -19319, 10849, -18744, 11441, -19933, 11096, -18171, 10325, -18919, 10407, -19079, 10210, -19877, 9976, -18941, 9627, -16891, 8993, -15888, 9496, -14676, 8705, -15175, 8614, -17597, 9867, -18988, 9719, -19310, 8442, -17742, 7409, -17395, 7084, -17327, 6432, -15645, 6616, -15032, 6935, -15737, 8288, -16382, 7873, -16359, 8551, -17200, 7672, -16852, 7124, -16900, 7223, -15059, 7152, -18623, 8702, -16361, 10094, -18947, 8018, -17167, 9462, -16848, 10332, -16179, 9837, -15021, 8710, -16192, 8009, -17065, 6456, -17605, 6132, -16365, 5776, -13595, 7566, -13380, 8939, -18600, 7873, -18689, 8007, -17921, 8761, -18957, 8586, -19351, 9244, -18114, 8769, -20395, 9098, -19317, 8918, -18843, 7658, -17303, 8279, -14784, 8221, -14998, 7213, -17485, 7709, -18268, 7898, -18654, 7673, -16378, 6951, -16262, 7571, -15659, 7562, -13887, 7098, -11473, 6901, -14799, 7981, -17833, 8112, -15255, 7964, -15213, 7365, -16281, 7046, -15510, 7384, -13810, 7121, -16887, 7492, -17211, 8450, -18618, 7547, -16940, 9129, -16967, 9529, -18582, 9572, -18007, 8655, -16395, 7349, -16921, 6331, -14474, 6882, -12214, 6708, -10919, 7247, -13367, 7155, -17255, 6946, -16875, 6059, -17232, 7063, -17425, 8839, -17915, 8373, -16892, 7752, -18368, 7932, -17863, 8110, -17260, 7436, -16318, 6902, -17335, 7231, -16257, 7491, -19114, 7575, -18076, 7402, -19396, 7863, -14807, 8807, -13597, 7690, -13412, 7757, -14499, 7052, -12295, 7603, -9329, 7238, -12572, 7531, -14689, 7492, -15121, 6604, -11248, 7547, -13964, 8425, -16372, 8267, -17450, 8319, -17977, 8118, -14956, 8582, -15825, 9550, -16371, 10519, -17297, 10688, -18384, 10490, -16562, 7898, -17317, 7050, -14836, 7381, -12146, 6839, -10332, 7823, -8981, 7789, -12562, 6901, -11520, 6298, -12535, 7359, -14146, 8669, -15939, 8631, -17133, 8025, -15522, 7279, -17828, 7080, -17372, 7656, -15825, 8028, -19225, 8132, -18293, 7606, -16972, 7808, -17176, 7417, -17570, 7002, -15853, 7365, -15472, 7464, -15662, 6791, -13618, 6611, -13141, 7066, -11734, 6898, -13967, 6739, -15672, 7927, -14744, 7134, -12857, 7348, -12800, 8500, -17072, 8924, -17000, 7851, -17060, 7768, -13661, 6964, -15478, 8697, -16728, 9931, -17620, 10188, -18878, 10144, -19838, 7813, -17508, 6917, -15690, 6859, -15067, 6362, -12099, 7629, -10232, 7886, -14957, 6744, -11912, 6952, -11144, 7991, -12423, 9679, -12205, 10950, -13716, 10411, -14030, 8954, -15412, 8444, -14836, 8250, -15982, 7953, -17247, 8287, -17051, 6483, -18566, 7335, -18918, 7001, -17453, 7501, -14677, 6857, -17384, 6909, -15882, 6388, -14854, 6415, -14238, 7098, -13366, 6906, -15329, 6801, -16356, 6807, -14929, 6974, -15509, 7124, -16334, 8720, -18082, 8421, -17168, 8068, -16999, 8065, -16143, 7362, -16770, 8359, -17631, 9201, -18607, 9145, -19664, 8929, -19576, 8193, -17963, 8037, -16609, 7327, -17160, 6858, -14330, 7461, -11648, 8194, -15381, 7028, -13767, 7217, -12982, 7156, -13084, 8400, -13631, 10136, -13860, 9726, -14426, 9782, -14751, 9953, -16207, 9437, -16079, 9025, -14480, 8787, -13200, 7357, -14007, 7272, -15129, 7297, -16429, 7505, -15466, 7097, -18294, 6761, -13794, 6429, -16152, 6578, -15145, 7952, -15957, 8107, -16578, 7672, -14696, 7446, -17455, 8245, -15996, 7782, -16357, 8244, -15750, 8858, -14347, 8809, -14744, 8493, -15318, 8708, -16431, 9766, -15819, 10381, -16688, 10019, -17501, 9887, -16089, 9575, -15118, 8962, -13165, 8365, -12961, 8034, -11539, 7940, -12690, 8488, -16221, 7217, -15009, 7266, -14230, 7668, -13270, 7994, -12432, 8770, -13513, 8964, -13471, 10098, -11846, 10576, -14134, 9716, -15115, 8872, -14016, 9098, -13650, 9049, -12939, 8887, -13462, 8974, -15508, 8421, -17007, 7547, -16134, 7407, -14518, 8362, -13828, 8320, -14762, 8160, -16458, 8025, -15449, 7778, -15673, 8426, -15007, 8524, -12574, 8236, -13136, 8499, -11971, 8854, -11993, 8648, -12839, 8928, -13354, 9853, -14355, 9987, -14505, 10361, -17528, 10061, -16202, 9734, -13951, 9474, -12872, 9190, -12631, 8718, -12977, 7645, -12834, 7920, -13601, 8432, -15315, 7826, -14289, 7396, -14308, 7762, -14740, 8046, -11638, 8242, -11766, 8067, -12043, 9011, -12358, 10331, -13618, 9805, -14551, 8128, -13937, 8042, -11875, 8419, -11296, 9296, -12722, 9039, -15619, 8576, -16226, 8288, -14087, 7819, -12105, 9049, -14665, 8424, -15328, 7730, -15593, 7084, -13338, 7814, -14061, 8072, -16647, 7792, -16132, 7104, -15436, 7591, -13974, 8424, -13745, 7732, -12895, 7484, -13696, 7797, -14792, 8186, -15421, 8396, -16905, 8667, -15679, 9722, -14690, 9891, -14084, 8834, -12457, 8243, -12865, 6569, -12690, 7678, -13685, 7945, -15213, 7114, -13629, 7020, -14116, 7694, -14134, 7715, -11959, 7663, -11225, 6859, -11683, 7236, -11348, 8859, -12491, 8997, -15158, 9059, -13830, 8498, -12184, 8494, -12365, 9184, -13554, 8824, -15203, 7863, -16062, 8062, -14036, 9367, -13017, 10062, -15765, 8605, -16969, 6730, -15390, 6621, -14070, 6953, -16273, 7233, -14578, 6749, -14407, 6570, -13332, 7048, -14953, 8353, -15372, 8604, -14122, 7402, -13912, 6249, -15459, 6601, -15639, 7590, -15640, 8519, -17461, 9030, -14172, 10057, -14649, 9046, -15062, 8603, -13111, 7055, -12187, 7159, -13187, 7376, -16292, 6501, -15147, 6862, -14059, 7157, -14701, 6766, -13611, 6637, -12364, 6184, -12388, 5847, -12674, 7136, -11685, 6764, -14800, 7783, -12737, 6927, -12602, 6721, -14353, 6631, -14693, 7002, -15729, 6857, -16011, 7039, -15062, 8303, -13863, 8277, -15696, 6367, -17520, 6011, -15655, 6519, -14911, 6469, -16052, 7431, -14964, 7031, -15401, 6544, -14247, 7101, -14938, 8097, -15788, 9362, -15294, 7092, -14677, 5565, -13758, 5776, -15827, 6027, -16159, 7645, -15715, 8106, -14839, 8833, -15514, 8279, -15732, 8533, -15151, 7087, -13257, 6745, -12988, 6533, -16233, 6065, -14382, 5711, -14961, 5548, -13494, 5301, -13659, 5347, -13982, 5430, -12386, 5576, -13382, 5356, -10497, 5575, -15029, 5158, -14137, 5067, -12805, 6524, -13409, 7594, -14213, 7350, -13936, 6507, -14084, 6262, -14087, 6656, -14708, 6502, -14482, 8212, -14987, 7469, -14738, 7061, -14838, 7160, -15171, 5869, -15106, 5756, -14982, 6425, -14955, 6081, -15698, 6080, -16542, 6944, -16691, 5925, -15837, 4722, -7826, 4423, -10928, 5761, -15378, 6654, -15461, 6974, -16337, 7851, -15759, 8235, -15560, 8032, -17369, 7033, -14580, 6139, -11859, 6695, -16653, 7492, -12798, 7219, -13217, 7247, -12041, 7732, -13956, 5808, -11631, 5361, -11347, 5290, -11875, 3325, -7242, 3549, -9126, 3547, -8732, 4024, -7997, 4441, -7037, 6455, -4848, 9467, -9460, 9073, -11131, 8501, -9679, 7374, -10920, 7457, -10455, 8246, -11320, 8725, -11841, 9750, -13164, 9164, -12097, 8436, -12771, 7972, -14916, 7159, -13924, 7345, -14159, 8134, -14620, 7806, -16004, 7344, -14555, 3847, -9124, 5217, -12854, 5688, -15875, 6452, -16997, 5962, -14821, 6636, -15738, 6315, -16388, 7026, -16051, 6539, -14094, 5442, -10380, 6781, -13656, 6312, -11610, 4051, -7985, 3455, 2462, 3009, -7521, 2938, -5103, 4349, -8459, 2159, -6282, 2421, -1904, 1792, -4615, 1585, -2860, -64, -84, 1044, -315, 3, 3721, 4845, -4662, 3569, -2659, -371, 4176, 4637, -6611, 225, 2467, 3915, -5238, 3610, -3969, 5211, -5179, 569, 4184, 3051, -5947, 4214, -6516, 5881, -9425, 4002, -6995, 4923, -9186, 6717, -11218, 6523, -11054, 4031, -8691, 5576, -12066, 5418, -13630, 5933, -16841, 5992, -13867, 5979, -16117, 5469, -12706, 5349, -14513, 5771, -12586, 6046, -10865, 5810, -8178, 4140, -11202, 3142, -8940, 3677, -10544, 3323, -8926, 4116, -3779, 3079, -6561, 2450, -5232, 2426, -5145, 2826, -3131, 3543, -6506, 3192, -5320, 1392, -1495, 6458, -6992, 2750, -5765, 2473, -2298, 5004, -6067, 3293, -5778, 6606, -7427, 6048, -8554, 900, 31, 5478, -7238, 4477, -6596, 2000, -4053, 1690, -4476, 2516, -6328, 2813, -5265, 3387, -8108, 3159, 406, 2133, -5862, 3060, -7583, 3402, -8170, 4330, -10907, 5757, -16019, 6330, -15662, 4732, -10968, 5682, -6833, 4992, -10189, 4596, -11275, 6389, -10202, 7069, -10326, 5601, -11564, 5704, -11680, 5953, -13806, 4485, -11865, 4442, -9434, 4286, -9982, 4896, -8830, 3553, -8538, 3464, -6959, 3482, -8875, 4064, -5857, 4631, -7019, 5685, -10832, 4265, -2658, 4311, -11696, 4531, -7732, 5907, -9528, 1992, -3951, 3273, -8404, 8358, -10006, 6073, -10990, 7250, -11564, 4450, -6407, 4949, -10517, 4036, -7853, 4253, -9560, 4677, -11041, 4659, -10056, 4472, -8763, 4183, -8738, 5744, -6265, 5130, -12816, 6386, -15838, 5941, -15448, 4755, -10815, 6046, -6577, 5211, -11034, 4288, -10941, 6363, -10277, 7312, -12499, 6873, -12186, 6149, -13994, 5803, -12519, 5742, -11190, 7000, -10012, 4357, -11246, 5184, -11946, 5279, -11991, 5634, -11718, 4536, -13569, 5227, -11397, 5823, -12329, 5690, -13972, 4932, -12303, 6540, -12242, 6132, -11054, 3601, -10180, 3608, -10021, 4931, -5429, 4554, -11655, 4711, -11193, 5132, -13689, 4791, -11417, 4684, -10783, 5666, -12506, 6126, -14143, 6530, -14206, 6306, -15986, 6597, -13783, 6602, -15440, 6087, -15587, 5980, -14167, 6362, -14487, 5921, -15111, 5957, -14857, 6551, -11135, 6061, -10979, 4523, -11591, 6642, -12347, 8206, -13579, 7880, -13395, 6994, -14242, 6285, -13692, 7042, -15451, 7863, -14632, 5909, -13770, 6339, -15468, 7018, -16723, 6688, -14964, 5811, -12009, 7236, -11392, 5718, -16044, 6375, -15869, 6131, -14139, 6092, -13616, 7098, -13108, 5645, -12832, 5037, -12538, 4780, -13586, 5665, -11182, 5930, -14246, 7352, -15442, 6266, -13741, 6409, -13148, 6490, -15916, 6953, -16262, 5820, -11401, 5635, -12119, 6078, -11871, 7052, -16063, 7389, -18093, 7017, -16358, 6653, -14716, 6414, -15515, 6737, -17565, 7789, -13042, 7118, -13106, 5405, -12717, 7054, -11869, 9576, -14623, 7644, -14497, 7524, -15334, 6620, -16268, 7707, -14176, 8403, -15330, 6860, -13076, 6379, -14546, 5919, -15906, 5752, -13789, 5560, -12110, 6525, -12974, 7108, -17521, 6784, -14276, 6635, -16396, 7121, -16013, 7490, -16209, 6567, -14440, 7077, -14618, 6132, -15147, 6856, -14000, 5726, -14962, 10263, -13652, 7958, -14823, 5860, -14439, 6287, -13502, 6722, -12609, 6025, -12793, 5488, -9149, 6021, -10357, 8256, -14452, 8164, -15329, 7516, -12537, 6128, -13597, 6958, -13771, 7636, -15220, 8856, -13886, 8241, -11830, 5983, -12649, 6365, -11867, 8507, -13692, 7589, -15874, 7513, -13308, 7403, -14384, 7671, -15271, 8782, -14200, 8591, -13008, 6971, -12453, 6135, -10955, 5323, -11358, 6385, -14040, 6950, -13343, 7519, -17189, 6565, -11841, 6457, -15002, 8201, -15193, 8091, -15996, 7314, -13840, 7156, -15393, 7091, -16590, 6804, -14162, 6671, -14940, 9554, -13097, 7697, -14228, 6484, -14378, 6310, -12267, 6490, -13713, 6658, -11979, 4890, -11239, 6024, -14152, 6518, -16737, 7155, -14940, 7049, -16914, 6100, -14111, 8750, -13199, 8431, -13910, 9681, -12532, 7558, -14034, 6339, -13004, 7383, -12103, 8187, -14850, 7372, -13457, 8876, -11897, 7554, -14775, 8507, -15937, 8228, -14122, 8027, -14071, 8007, -14277, 6625, -12316, 6213, -14503, 7685, -15249, 6522, -14724, 5895, -12664, 6621, -14239, 6458, -15462, 6908, -14394, 7416, -14554, 8864, -13190, 8515, -13726, 7536, -14933, 8230, -14481, 7403, -14066, 8856, -11840, 7291, -14224, 6407, -15820, 7161, -15731, 6633, -14298, 6303, -15764, 5468, -12110, 5460, -12426, 6739, -15784, 6476, -14953, 5999, -17154, 6205, -11326, 8190, -13288, 7874, -13080, 8035, -13441, 6796, -14391, 6085, -12029, 7292, -13432, 8364, -15580, 7361, -13887, 7164, -15525, 7401, -15526, 8022, -18363, 7726, -15128, 7402, -15095, 7685, -13369, 7859, -11973, 5921, -11819, 7101, -12965, 6766, -13959, 5995, -12180, 6591, -14497, 7486, -16620, 7381, -14777, 6471, -13442, 8258, -11426, 7939, -13601, 7814, -17059, 8201, -14965, 8483, -16118, 8829, -16076, 7070, -12550, 6269, -13472, 6879, -15078, 6641, -13772, 6259, -16384, 5596, -11681, 6266, -12812, 6120, -15898, 6599, -15624, 6326, -14723, 8741, -10672, 8849, -14776, 8279, -12958, 7403, -13871, 6547, -13893, 5380, -12198, 8624, -14461, 9314, -16442, 8939, -15084, 7383, -16346, 7554, -13642, 7376, -15600, 7262, -15339, 7223, -16048, 7611, -13727, 7979, -14843, 7140, -15312, 6322, -14137, 7074, -12947, 6212, -12094, 5877, -10660, 6086, -13377, 6445, -11523, 7085, -11486, 7811, -11692, 7184, -12752, 7281, -17042, 7767, -17653, 9558, -15009, 10597, -15512, 7814, -14139, 6501, -13627, 6813, -13461, 6573, -14969, 6603, -13835, 7042, -11222, 6915, -16865, 7014, -16940, 7118, -13298, 7293, -15302, 7669, -15940, 7529, -14109, 8258, -14165, 8120, -13242, 6688, -14900, 5365, -13219, 7753, -11564, 8867, -16392, 8218, -14664, 7570, -15350, 7541, -10586, 6798, -13077, 7253, -14525, 7383, -14353, 7441, -15718, 8617, -15056, 7586, -14698, 7497, -14569, 6367, -9537, 6737, -11870, 6391, -11530, 7057, -9782, 6480, -12171, 7483, -10023, 8054, -11948, 6664, -14361, 7044, -17615, 6795, -17154, 8523, -15120, 10672, -15084, 8598, -14951, 7260, -14634, 7529, -15702, 6841, -17244, 7283, -12948, 7524, -10572, 6845, -16076, 6824, -15788, 8022, -11263, 8190, -15802, 8240, -18065, 7001, -15786, 9482, -16397, 9283, -15718, 7924, -14928, 5694, -13422, 7540, -12158, 8712, -14582, 7264, -16687, 6434, -15800, 7213, -11227, 6790, -12194, 7733, -13791, 7456, -14403, 7871, -14799, 8388, -13911, 7555, -14751, 7047, -16031, 6906, -10968, 5681, -10823, 6088, -11659, 6666, -12959, 7610, -13162, 7464, -13191, 8496, -11847, 6668, -13877, 7127, -16593, 7965, -14529, 8180, -14881, 9992, -14110, 9187, -14969, 9072, -14428, 8072, -13541, 7274, -15358, 7007, -17390, 7221, -15023, 7022, -16038, 7048, -15887, 7578, -11985, 7993, -16305, 8317, -17235, 8234, -16974, 10574, -15350, 9781, -15610, 9572, -14776, 6640, -12348, 6714, -12228, 8092, -13937, 6464, -14445, 6223, -12165, 7211, -12565, 6985, -14287, 8367, -12759, 8991, -15398, 10913, -13629, 9435, -14935, 8577, -15210, 8347, -14815, 8214, -13433, 6546, -12489, 6977, -15089, 7492, -17174, 8794, -17243, 7766, -14940, 7402, -12893, 6727, -15174, 8302, -15290, 8079, -14986, 8642, -14575, 9759, -13582, 7709, -15318, 8036, -12755, 7780, -13482, 7466, -15381, 6736, -15593, 6420, -14581, 7310, -17475, 6633, -15850, 7619, -12565, 7930, -17347, 7807, -17243, 8359, -17263, 9342, -13814, 9441, -14103, 9537, -13606, 6805, -12628, 6477, -11870, 7177, -13857, 6017, -12039, 5649, -9549, 7133, -10694, 8101, -16417, 8987, -12949, 8966, -15475, 10574, -15246, 10233, -15060, 9986, -15755, 9287, -15277, 8301, -13809, 7045, -12558, 7230, -12360, 7990, -16966, 8877, -17300, 8473, -13740, 7411, -13443, 7725, -13183, 7702, -14779, 8520, -15036, 8842, -15129, 9275, -13760, 7623, -14964, 7774, -10719, 8189, -12864, 7917, -13568, 7710, -12553, 6682, -13543, 7444, -13753, 7526, -15204, 8152, -13599, 8291, -15050, 7494, -17006, 7751, -16820, 7967, -14342, 8811, -14130, 8814, -12957, 7000, -12005, 5434, -10168, 5908, -12080, 5455, -9356, 6038, -9427, 5719, -9614, 6676, -11010, 8050, -11185, 7907, -11361, 8554, -12013, 8688, -11282, 7836, -11493, 7688, -12649, 7190, -12613, 6517, -11939, 5859, -6621, 6102, -13191, 7484, -11878, 7905, -10409, 7197, -9734, 6993, -10378, 7403, -10847, 7170, -11265, 8236, -11508, 7787, -10829, 6764, -12160, 7335, -9718, 6708, -11045, 7093, -10329, 6643, -11155, 5614, -8289, 7833, -9559, 7444, -11634, 7849, -10232, 7488, -11381, 5709, -13399, 6584, -11497, 6941, -12544, 7520, -10948, 6818, -11117, 6321, -9717, 10131, -9631, 10807, -9611, 11544, -9763, 10640, -9267, 10652, -9345, 10269, -8963, 10310, -9106, 10598, -9689, 10460, -9520, 10247, -9688, 10365, -10006, 10815, -10354, 11207, -10804, 10551, -10275, 10748, -10298, 10875, -10635, 10344, -10260, 9997, -9996, 9910, -10463, 10138, -10550, 9268, -9285, 9122, -9219, 9949, -10098, 9520, -10062, 9874, -9671, 10425, -10274, 9096, -9011, 8580, -9227, 10002, -10432, 11557, -11032, 11594, -11379, 10990, -10794, 11057, -10878, 11110, -10922, 11686, -11108, 10955, -10882, 10809, -10520, 11002, -10986, 10283, -9861, 9594, -9068, 11268, -11343, 12139, -11754, 14872, -13946, 12569, -12002, 12703, -12294, 12619, -12226, 12021, -11725, 12162, -12074, 11306, -11792, 10963, -11798, 11335, -11838, 11460, -12009, 11288, -11564, 11438, -11760, 11749, -11920, 12012, -12358, 11656, -12138, 11147, -11594, 11124, -11270, 11127, -11625, 10647, -11235, 11185, -11844, 11652, -12485, 10615, -11897, 10975, -11619, 11090, -11471, 10029, -10158, 10249, -10764, 10386, -11250, 11810, -12683, 11488, -12547, 11665, -12024, 12050, -12260, 11275, -11558, 11510, -11716, 10757, -11572, 10856, -11274, 11113, -11832, 10642, -10861, 10952, -10581, 11466, -11773, 12243, -12828, 14058, -14632, 13805, -14338, 12848, -13749, 13166, -13551, 12295, -13123, 11509, -12785, 11644, -12820, 10331, -12290, 11201, -12202, 11372, -12495, 11147, -12501, 11769, -12858, 12339, -12956, 12856, -13205, 11901, -12848, 12344, -13152, 11695, -11597, 11565, -11381, 11087, -11461, 11805, -11999, 11438, -11787, 11819, -11943, 10366, -10461, 11877, -11134, 10138, -9895, 10049, -10382, 11027, -11605, 11552, -12156, 11678, -11839, 11901, -12324, 11516, -12440, 10787, -12188, 11334, -12701, 11469, -12459, 10582, -11320, 10905, -11407, 9607, -9899, 9980, -9863, 12449, -12905, 12673, -13590, 12934, -13345, 12892, -14003, 11783, -12888, 11741, -12468, 11343, -12387, 10793, -11929, 10556, -12101, 10922, -12337, 10532, -11725, 11280, -12197, 11422, -12204, 12128, -12774, 11772, -12891, 12717, -13074, 12557, -12532, 12185, -12127, 11267, -11734, 11101, -11215, 11338, -11790, 10850, -11482, 10931, -11820, 10150, -11245, 9487, -10990, 10567, -11047, 10223, -10699, 9841, -11133, 10783, -11599, 10659, -11095, 12210, -11953, 12118, -12410, 11525, -12755, 11167, -12158, 11330, -12284, 11945, -12542, 10455, -10412, 10494, -10599, 9018, -8936, 10619, -10245, 10602, -10868, 10289, -11655, 11227, -12094, 11629, -12176, 11765, -12654, 11832, -12819, 11699, -12207, 11848, -12358, 11204, -11603, 10625, -10497, 10146, -10818, 10583, -11781, 11298, -12021, 11862, -12607, 12202, -12608, 12270, -12610, 11771, -11887, 11312, -12352, 11202, -12064, 10668, -10670, 11245, -11780, 11502, -12037, 10953, -11684, 10436, -11441, 10215, -11590, 11130, -12403, 10887, -11479, 10847, -11519, 11144, -11166, 11359, -11318, 11824, -11716, 10436, -11555, 10317, -11483, 10743, -11758, 10760, -11713, 11489, -12155, 10121, -11077, 10091, -11224, 6664, -7167, 7498, -7451, 10541, -11112, 9705, -10569, 10552, -10957, 10972, -11943, 11472, -12233, 10797, -11961, 11122, -12227, 11546, -12208, 9760, -10099, 10670, -10533, 11230, -11377, 11404, -11769, 12071, -12110, 11992, -12220, 12726, -12733, 13354, -13638, 12118, -12562, 10713, -11253, 9703, -9932, 10086, -10485, 10500, -10514, 10190, -10506, 10384, -10812, 10406, -11188, 10311, -10721, 10698, -10644, 10455, -11254, 10566, -11312, 11839, -11729, 12444, -11598, 11207, -11168, 10539, -10902, 10840, -10979, 11804, -11461, 11783, -12026, 12022, -11572, 10939, -10636, 8520, -9213, 5044, -6031, 5902, -5899, 8971, -9494, 8807, -9064, 9182, -9964, 10583, -12165, 10677, -11590, 10185, -11007, 10405, -11116, 10414, -11135, 9633, -10135, 10028, -10224, 10633, -11000, 11543, -11763, 12424, -12599, 11886, -11967, 13104, -12852, 13560, -13385, 11848, -12805, 11006, -12305, 9906, -10968, 9758, -10301, 10252, -10599, 9668, -10091, 9360, -10075, 8941, -10029, 9578, -10306, 10488, -11003, 11088, -11702, 11726, -11417, 12110, -11768, 12449, -12111, 11195, -11270, 11264, -11566, 11056, -11105, 11313, -11264, 11488, -11626, 11891, -11826, 10796, -10736, 10020, -10319, 6920, -7270, 8054, -8095, 8207, -8896, 9386, -10192, 8955, -9417, 9780, -10142, 11315, -11550, 9423, -10618, 9469, -10398, 9867, -10665, 9724, -10210, 10153, -10859, 10708, -11667, 11327, -11908, 12070, -12758, 11877, -12785, 12723, -13056, 12241, -12743, 11879, -12563, 11906, -12014, 10393, -11098, 10007, -10022, 10463, -11019, 10355, -10572, 9541, -10113, 9848, -10543, 10821, -10956, 11064, -11833, 11912, -12039, 12408, -12247, 11295, -11841, 11636, -12085, 12108, -12402, 11609, -11719, 11213, -11718, 10976, -11720, 10539, -11396, 10163, -11036, 10234, -10807, 9824, -10416, 9949, -9860, 10369, -10285, 8924, -9427, 9555, -10290, 9593, -9847, 9355, -9666, 10944, -10961, 10501, -11012, 10168, -10935, 9950, -10662, 9001, -10272, 9620, -10227, 10126, -11019, 10420, -10851, 11369, -11890, 11081, -11865, 11425, -12440, 11198, -11838, 11066, -11867, 10206, -10942, 9358, -10231, 10494, -10869, 10902, -11449, 10850, -10928, 11011, -10782, 10132, -10344, 11610, -12150, 11054, -11631, 11828, -11896, 11014, -11228, 10932, -11738, 10449, -11037, 11684, -11688, 11365, -11357, 11409, -11665, 10829, -11225, 10774, -10899, 10261, -10753, 10209, -10948, 9927, -10617, 10323, -10009, 10490, -10082, 8760, -8702, 9513, -9968, 9779, -9713, 10665, -10763, 11424, -11289, 11471, -11441, 9778, -10545, 9496, -10725, 9150, -10020, 9829, -10367, 10071, -11025, 10100, -10841, 10560, -11064, 10649, -11022, 10773, -11608, 10731, -11194, 11187, -11217, 10203, -10307, 9535, -10268, 10107, -10793, 10459, -10980, 11317, -11260, 10958, -11472, 10939, -11753, 11711, -12156, 11622, -12348, 11648, -12109, 11839, -11760, 11280, -11199, 11031, -11161, 11602, -11930, 11095, -12204, 11441, -12511, 10609, -11698, 11026, -12126, 10502, -11242, 10075, -10746, 9771, -10366, 10266, -10771, 10990, -11062, 9593, -9456, 9494, -10454, 9429, -10216, 10868, -11302, 11501, -11784, 11623, -12043, 11253, -11539, 10528, -11302, 10143, -11089, 10600, -11500, 10087, -11236, 10294, -10980, 9453, -10556, 10544, -11042, 10676, -11812, 10692, -11157, 10007, -10305, 9517, -10218, 9472, -10233, 9861, -10949, 10417, -11129, 10807, -11405, 10321, -11403, 9870, -11359, 11307, -12115, 11471, -11581, 11130, -11623, 10534, -10994, 11669, -11323, 11209, -10931, 11931, -11913, 10783, -11338, 11316, -11791, 9525, -10352, 9996, -10978, 9664, -10426, 9529, -10199, 10301, -10838, 10169, -10399, 10719, -10703, 10290, -10463, 10367, -11135, 10405, -11340, 11268, -11734, 12041, -12360, 12323, -12622, 12168, -12641, 11461, -12120, 10700, -11312, 10023, -10934, 9919, -10774, 9904, -11031, 9676, -10572, 10272, -10831, 10663, -11414, 11098, -11563, 9877, -10339, 9857, -10520, 11079, -11586, 12482, -12667, 12819, -12603, 12105, -12263, 10390, -11665, 10792, -11598, 10686, -10909, 10823, -10477, 10215, -10830, 10655, -10952, 10785, -11360, 10404, -11040, 11801, -11679, 10175, -10295, 10545, -10404, 9940, -9863, 10112, -10627, 10669, -11113, 10442, -10781, 11265, -11390, 11080, -10564, 11449, -10580, 10939, -10781, 11406, -12074, 11448, -12307, 10815, -11475, 11615, -12155, 11715, -12229, 12459, -12423, 11862, -12274, 11279, -11318, 10163, -10352, 10717, -10484, 9719, -10297, 10368, -11011, 11007, -11608, 11115, -11482, 11010, -11686, 10958, -11402, 10903, -11079, 11651, -12239, 12642, -13122, 12338, -12614, 11107, -10953, 10695, -11317, 10858, -11484, 11016, -10925, 11708, -10649, 10550, -11110, 10589, -10961, 11144, -11803, 10262, -10762, 11376, -11485, 10803, -10374, 10330, -10591, 10443, -10548, 10194, -10813, 11166, -11531, 10813, -11339, 11274, -11443, 11284, -10999, 12170, -11523, 10595, -9907, 11928, -11881, 12106, -12546, 11634, -12232, 11290, -11727, 11689, -12096, 11459, -12163, 11651, -11568, 10735, -10911, 8521, -8998, 9371, -9466, 8643, -9465, 10586, -11132, 11208, -11267, 11477, -11495, 11214, -11365, 10182, -10503, 10359, -10697, 11293, -11938, 11816, -12119, 11139, -11265, 10544, -10516, 10493, -10739, 10290, -10348, 10900, -11147, 11179, -11235, 10635, -11436, 10900, -11246, 11369, -12139, 11256, -11671, 10331, -9859, 4748, -4479, 6633, -6663, 9577, -8939, 9855, -10024, 11410, -11711, 9891, -10834, 11062, -11139, 11421, -11597, 11752, -11662, 10494, -10127, 10641, -10546, 10735, -11014, 10203, -10560, 6785, -7156, 9968, -9954, 9084, -10193, 9929, -10309, 8674, -9145, 6600, -7196, 7442, -6804, 7657, -7414, 7667, -7616, 8234, -7453, 6640, -6326, 9660, -9863, 9670, -9797, 6743, -7039, 8261, -8025, 8229, -7538, 8514, -7930, 8859, -8400, 8584, -8754, 8224, -7901, 9686, -9346, 9649, -9450, 9607, -9890, 9219, -9577, 9993, -10010, 9214, -9744, 9410, -9614, 4551, -5160, 6691, -6093, 9776, -9401, 10406, -10231, 10608, -10881, 9646, -10579, 9423, -11187, 10000, -10489, 11120, -11290, 8685, -8275, 7094, -7417, 7576, -7632, 4142, -4431, -2509, 2255, 4833, -4920, 1957, -2110, 6500, -6317, 3474, -3284, 1507, -2065, 1781, -807, 2837, -2416, 2668, -2605, 3884, -3869, 1475, -1050, 4284, -3975, -1346, 1257, -3533, 3619, 3284, -2786, 1653, -1591, 2829, -2582, -912, 1139, 4037, -3115, -246, 762, 2553, -2981, 3716, -4016, 6994, -7118, 4408, -4330, 6416, -5976, 4396, -4012, 5778, -5491, 5262, -4908, 6059, -5979, 7559, -7522, 9711, -9246, 9539, -10672, 8987, -9876, 7257, -8241, 8565, -9226, 9478, -9342, 5840, -5963, 3861, -3624, 6204, -6245, 5782, -6103, 4844, -4342, 384, -911, -4249, 4023, 557, -348, -99, 404, -2095, 2061, -1043, 358, 979, -940, -1056, 1920, 2121, -1489, 4081, -4650, -3071, 2867, -661, 412, 502, -393, 2955, -1704, 3498, -3116, 3754, -3608, -3916, 3461, 2411, -2370, 2480, -2577, 729, -1007, 1407, -624, -1763, 1773, -2614, 2652, 2539, -2231, -3486, 3096, -644, 1142, 3525, -2870, -2045, 2669, 4412, -3900, 9181, -8644, 8610, -9015, 4968, -5774, -1869, 1163, 5789, -6371, 7568, -7723, 1468, -1830, -2652, 2704, 5272, -5092, 6556, -6980, 6395, -7098, 4934, -5939, -2575, 2314, 2123, -1591, 4798, -4948, 3386, -2639, 5392, -5120, 1032, -95, -2956, 2793, 3352, -3329, 5008, -4576, -2679, 2682, 704, -726, -1725, 2320, 3526, -3330, 1106, -1273, -3552, 3045, 4936, -4197, 7243, -6781, 4558, -4532, -1392, 1720, 3759, -2835, 168, -623, -991, 1063, 6024, -6476, 2466, -2602, 4463, -4520, 859, -1119, -3149, 2623, 3126, -3784, 9312, -9115, 8514, -8418, 1549, -2234, -1862, 2212, 5446, -4784, 7496, -6890, 2543, -2617, -927, 116, 6436, -6897, 8384, -8001, 7577, -7277, 5840, -5307, -1870, 2232, 573, -61, 8367, -8124, 7756, -7519, 6706, -7372, 6520, -6260, 2207, -1651, 7489, -6781, 10240, -10167, 4557, -4305, -1106, 495, -4702, 5261, 6549, -6775, 2531, -3024, -7146, 6345, -568, 897, 7239, -7100, 5890, -6369, 645, -521, 4864, -4877, 7329, -7865, 6861, -6472, 7495, -7356, 8878, -8384, 8489, -8356, 7404, -8315, 4531, -5379, 7661, -7558, 8999, -8894, 8290, -8454, 7602, -7937, 4200, -3779, 4131, -3142, 8498, -8089, 6951, -7502, 8424, -9365, 7801, -8574, 8014, -8181, 7900, -7728, 3214, -3451, -1039, 862, 3366, -2852, 9110, -9370, 9251, -8356, 7700, -7382, 4010, -4516, 5133, -4753, 9754, -8555, 10190, -9722, 8406, -8277, 4433, -4750, 1747, -1431, 7851, -7859, 5910, -5957, 109, -496, 3765, -3616, 7809, -8028, 5308, -5956, 5959, -5704, 8300, -8121, 8895, -9177, 8874, -8748, 7132, -6853, 8206, -7631, 8069, -8330, 9829, -10106, 9106, -9282, 9506, -9589, 8880, -8550, 9000, -9245, 8672, -9714, 5791, -6509, 5464, -5665, 9059, -8969, 10207, -11185, 8530, -9730, 9863, -9787, 9276, -9704, 8269, -8726, 4675, -5108, 3182, -3529, 6806, -7116, 8280, -8644, 7806, -7392, 6484, -7307, 5522, -6394, 6104, -6676, 8703, -8805, 9419, -9260, 9428, -9687, 8160, -8592, 7965, -7923, 8094, -7623, 7905, -8169, 7152, -7301, 8244, -8294, 7261, -7642, 2829, -3777, 5541, -5133, 8748, -8953, 8984, -9043, 7127, -8004, 6530, -7395, 8125, -7853, 8012, -9434, 10082, -10351, 9197, -8934, 8599, -9003, 8952, -9255, 8403, -8795, 8831, -8861, 6744, -6860, 6775, -6487, 8862, -9190, 9682, -9704, 8959, -10302, 10310, -10425, 8673, -9406, 8535, -9232, 7970, -8537, 7510, -7929, 7635, -8716, 8397, -8491, 8127, -8098, 7652, -8104, 8589, -8504, 8898, -8479, 9213, -9264, 8500, -8654, 8567, -9183, 8111, -9492, 9823, -9634, 9104, -8659, 8983, -9039, 8692, -9512, 8690, -9076, 7409, -8384, 4465, -4402, 6181, -6024, 7977, -8885, 8048, -9259, 8015, -9465, 7881, -8373, 8790, -8944, 9679, -9913, 10143, -10671, 8873, -9574, 9715, -9892, 9218, -9613, 7823, -9293, 9812, -9871, 9312, -9541, 8281, -8565, 8598, -9068, 9396, -9563, 8346, -8786, 9967, -9930, 8288, -8968, 10129, -10048, 9940, -9754, 9382, -10073, 8103, -9193, 8947, -9263, 8610, -9167, 9337, -9398, 8375, -8080, 9111, -8251, 9316, -8784, 9623, -9645, 9534, -10343, 8450, -8431, 9367, -9946, 8053, -8817, 9417, -9210, 8858, -9298, 8366, -9174, 8271, -8556, 6779, -6879, 8434, -8774, 8545, -9125, 8567, -9399, 9634, -10437, 9288, -9125, 9040, -9284, 10198, -10251, 9953, -10536, 9533, -10285, 10652, -10626, 8753, -9677, 8801, -9460, 11100, -10911, 10211, -10476, 8361, -8338, 7566, -8017, 8622, -8927, 9063, -8769, 9853, -9783, 10255, -10630, 10624, -10621, 10482, -10862, 9885, -10458, 8642, -9281, 9451, -9795, 9229, -10244, 9314, -9712, 9185, -9744, 8340, -8566, 9106, -9818, 9510, -10217, 9926, -10530, 9287, -9394, 9285, -9815, 7853, -9024, 8865, -9350, 9028, -9093, 9449, -9455, 8741, -9240, 8932, -8893, 8236, -8717, 8849, -9639, 8414, -9271, 9543, -10594, 10339, -10194, 8960, -9980, 9140, -9819, 10023, -9767, 10784, -10771, 10023, -10651, 8629, -9625, 9260, -9402, 9698, -9965, 9243, -9611, 7704, -7884, 7833, -8241, 8159, -7686, 9066, -8601, 9690, -9900, 9276, -9419, 9979, -10703, 9912, -10771, 9832, -10406, 9508, -9874, 9266, -9792, 9974, -10742, 9324, -10498, 9330, -9421, 8717, -9146, 9716, -10517, 9013, -9181, 9525, -9437, 8122, -8691, 8595, -9154, 7483, -8042, 8979, -9052, 9066, -9659, 8986, -9573, 8689, -9905, 9180, -9248, 8367, -9170, 9471, -9946, 8874, -9499, 10491, -10929, 9978, -9831, 8988, -9424, 10879, -11035, 10947, -11006, 10555, -10959, 10652, -11032, 9465, -9211, 8433, -9011, 9326, -9199, 9089, -8922, 9105, -8576, 8994, -8845, 8134, -7815, 8251, -8472, 8487, -9721, 10189, -10542, 9442, -10096, 10223, -10718, 10369, -10365, 9892, -10142, 10406, -10115, 9812, -9964, 9498, -9951, 9298, -9034, 8860, -8848, 9209, -9401, 9415, -10539, 8649, -8931, 9389, -9454, 7959, -8192, 7685, -7056, 9219, -8894, 8879, -9732, 9383, -9706, 8113, -8613, 8657, -8706, 8683, -9342, 8189, -9252, 9693, -10416, 10238, -10925, 9464, -9217, 9466, -9392, 10423, -10693, 10327, -10099, 9593, -9908, 10261, -10977, 9723, -10020, 8963, -9154, 8215, -8737, 8393, -8494, 9341, -8765, 9850, -9321, 9244, -8317, 8360, -8109, 9788, -10224, 10158, -10437, 9238, -10116, 9582, -10299, 9973, -10004, 9960, -9697, 9260, -8888, 9946, -9988, 9642, -9779, 8826, -9549, 8370, -8915, 8749, -8471, 9571, -10216, 9927, -10146, 10140, -10134, 7126, -7672, 6827, -6980, 7937, -8608, 9112, -9502, 8998, -9128, 9267, -9021, 8477, -8812, 8994, -9492, 8277, -9058, 9094, -9544, 9600, -9914, 9614, -9861, 9483, -9793, 10219, -9489, 9415, -9423, 9352, -9208, 8957, -9508, 9253, -10061, 9261, -10206, 7293, -8097, 7218, -7470, 7905, -7947, 9299, -9488, 10209, -9699, 8335, -8711, 9796, -10291, 9539, -10975, 9243, -9275, 9849, -9476, 8462, -9265, 9287, -9596, 9226, -9689, 9168, -9710, 9477, -10023, 8539, -9275, 9227, -9731, 9943, -9581, 10112, -10794, 10177, -10600, 9810, -10783, 8023, -8804, 6602, -7253, 8782, -9679, 8756, -9993, 9054, -10194, 9869, -10379, 8696, -9257, 9410, -9825, 7452, -8819, 7637, -9172, 8138, -8822, 8886, -9443, 8721, -9058, 9100, -9956, 8886, -9838, 8302, -9347, 8263, -9410, 9439, -10066, 8008, -9306, 6833, -7989, 8216, -8900, 6745, -7474, 7411, -8116, 10700, -10283, 8781, -8503, 9107, -8966, 7484, -7914, 8012, -7262, 9243, -9364, 8453, -8533, 9945, -10289, 9006, -9330, 8460, -9277, 8952, -10057, 7833, -8623, 9460, -9686, 9314, -9224, 10567, -10307, 9770, -10024, 9274, -9582, 7881, -8089, 7647, -7940, 8853, -9143, 9010, -9258, 8957, -9366, 9663, -9774, 9338, -9310, 9196, -9200, 8720, -9189, 8671, -9001, 9144, -9548, 8127, -7566, 8355, -7861, 7674, -7544, 8707, -8790, 7488, -8054, 9315, -9169, 9904, -9485, 9313, -9455, 8633, -8428, 8800, -8880, 7155, -7343, 8190, -8633, 10666, -10100, 9048, -8236, 8311, -8233, 8464, -7518, 8692, -7575, 8534, -8300, 8391, -8794, 9500, -9683, 9240, -8777, 8564, -8849, 9460, -9786, 9025, -9204, 9338, -9351, 10820, -10115, 8836, -8526, 9895, -9955, 9114, -9254, 8568, -8691, 8614, -8574, 9282, -8869, 9266, -8984, 9182, -9431, 9315, -9288, 9495, -8834, 9617, -9314, 9914, -10073, 9512, -9726, 9475, -9806, 7804, -8588, 7556, -7932, 8247, -8929, 8666, -8733, 8925, -8840, 8852, -8093, 10673, -9870, 10723, -10410, 9585, -9583, 9052, -8843, 9641, -9251, 9756, -9619, 8305, -8004, 8996, -8966, 8769, -8724, 8539, -8538, 9866, -9776, 9654, -9429, 9292, -9046, 9507, -9330, 10121, -9875, 9575, -9510, 9984, -9919, 9583, -9424, 9280, -9291, 9746, -9675, 9051, -9056, 9724, -9536, 8972, -8829, 9297, -8856, 8758, -8730, 7954, -7671, 10352, -10039, 10574, -10226, 10395, -10091, 9475, -9438, 10155, -10304, 10082, -10234, 9763, -9744, 10011, -9980, 9854, -9766, 8692, -8330, 9072, -8788, 9299, -9050, 9247, -9267, 9414, -9541, 9483, -9678, 8760, -8717, 8941, -9135, 9838, -9704, 9037, -9248, 8943, -8855, 10461, -10371, 11263, -11090, 10865, -10648, 9455, -9468, 8949, -8708, 9650, -9467, 10668, -10451, 11031, -10826, 10152, -10014, 9070, -8854, 10382, -10148, 10041, -9966, 10493, -10466, 10839, -10888, 9953, -10232, 9645, -9653, 6630, -6714, 7010, -6879, 8648, -8417, 4900, -4839, 9514, -9377, 10152, -10116, 10035, -10146, 9419, -9253, 8544, -8282, 9557, -9653, 10966, -10822, 11861, -11628, 10640, -10399, 10067, -9744, 11419, -11105, 11139, -11002, 11226, -11324, 11170, -11397, 10377, -10581, 9826, -9836, 6576, -6589, 7728, -7818, 9039, -8985, 6575, -6385, 10048, -9860, 10417, -10450, 10412, -10382, 9306, -9194, 9650, -9506, 10265, -10345, 12012, -11905, 11906, -11780, 11004, -10951, 11580, -11495, 11923, -11951, 11111, -11424, 11427, -11653, 11306, -11377, 10949, -10971, 11088, -11017, 11517, -11406, 10490, -10488, 10128, -10091, 9345, -9115, 10403, -10258, 10957, -10968, 10288, -10419, 9967, -9938, 10420, -10482, 10797, -10726, 11935, -11746, 11709, -11726, 10536, -10580, 12182, -12320, 12902, -13043, 12194, -12404, 12532, -12697, 12133, -12166, 12058, -11989, 11517, -11700, 11534, -11714, 11264, -11267, 10730, -10812, 9477, -9485, 9965, -9921, 9921, -10058, 9861, -9915, 9247, -9037, 9742, -9769, 10561, -10450, 10999, -10948, 10532, -10572, 10525, -10460, 11491, -11437, 11042, -11074, 11252, -11193, 10275, -10291, 10943, -10997, 10962, -10893, 10612, -10580, 9362, -9219, 10473, -10544, 10363, -10536, 9085, -9089, 7704, -7687, 8026, -7823, 7618, -7517, 6320, -6331, 7820, -7592, 8130, -8068, 8501, -8520, 8637, -8845, 7600, -7838, 9630, -9664, 9571, -9330, 9336, -9386, 9137, -9230, 9279, -9390, 9215, -9110, 8436, -8373, 9012, -8970, 9588, -9576, 9030, -9306, 9281, -9029, -1970, 2061, 4980, -4549, 3714, -3732, -2580, 2449, 6704, -6787, 6241, -6432, 3455, -3303, 5927, -6220, -3508, 3134, 7799, -7466, 5301, -5328, 6715, -6747, 3223, -3217, 2727, -2729, 5588, -5619, 5230, -5170, 3727, -3706, 8923, -8845, 2839, -3090, 6594, -6487, -171, 296, 6501, -6545, 4517, -4590, -1426, 1448, 8176, -8069, 5201, -5165, 4514, -4550, 7228, -7345, -8987, 8871, 3834, -3526, -1600, 1625, 5240, -5470, 2326, -2453, 6659, -6761, 5797, -5875, 6419, -6549, 6433, -6613, 8563, -9047, 5168, -5761, 5371, -5436, 8035, -8079, 8637, -8773, 7215, -7315, 5818, -5945, 8090, -8007, 7236, -7314, 8437, -8648, 8894, -8826, 6697, -6798, 7356, -7409, 6360, -5971, -9737, 9810, -6683, 6985, 8555, -8147, 6501, -6455, 8210, -8198, 8199, -8011, 5034, -5397, -4132, 3841, 6086, -5863, 8326, -8338, 8841, -9067, 9464, -9577, 8424, -8608, 8214, -8311, 8390, -8720, 8421, -8627, 8851, -8838, 7480, -7852, 8302, -8325, 7447, -7436, -84, -101, 3789, -3695, 9704, -9399, 8383, -8261, 9316, -9373, 8750, -8948, 79, 14, -10161, 9992, 4933, -4647, 7853, -7824, 8485, -8478, 9830, -9957, 9337, -9339, 8450, -8510, 9869, -9705, 9447, -9504, 9448, -9633, 8511, -8379, 8986, -8874, 8658, -8395, 6317, -6352, 7868, -7741, 10677, -10188, 10664, -10653, 10275, -10445, 9916, -10468, 9075, -9033, 4327, -4672, 9175, -8996, 7677, -7804, 9583, -9458, 10672, -10586, 10702, -10386, 9575, -9505, 10088, -9939, 11083, -10829, 10662, -10611, 10223, -9901, 9610, -9567, 10606, -10272, 8768, -8736, 9929, -9962, 12467, -12317, 12562, -12622, 12300, -12284, 11070, -11171, 11024, -10693, 8226, -8159, 7706, -7296, 7930, -7987, 8874, -8682, 9194, -9336, 8985, -8987, 7999, -7989, 8896, -8971, 9642, -9537, 8691, -8800, 8795, -8976, 9244, -9221, 8530, -8520, 8642, -8687, 9020, -9071, 10122, -10266, 9985, -9904, 10420, -10420, 9363, -9481, 9454, -9519, 7528, -7697, 7450, -7581, 6912, -7424, 7552, -8192, 7168, -7680, 7680, -8064, 7808, -8448, 7680, -8576, 7168, -8064, 7296, -8192, 7936, -8448, 7680, -8192, 7296, -7936, 7296, -7808, 7168, -7808, 7552, -8320, 7424, -7808, 7808, -7936, 8064, -8064, 8064, -8192, 7296, -7936, 6912, -7296, 7424, -7936, 8576, -9088, 8448, -8576, 8064, -8448, 8448, -8960, 8064, -8704, 7552, -8320, 7680, -8320, 7808, -8448, 7296, -8064, 7040, -7936, 7552, -8320, 7808, -8320, 8064, -8576, 7680, -7936, 8192, -8064, 7680, -7168, 8320, -8448, 7808, -8448, 7680, -7680, 7296, -7808, 8704, -9088, 9344, -9472, 8704, -9216, 7936, -8192, 7424, -8064, 7424, -8448, 8064, -9344, 8704, -9216, 8064, -8704, 7808, -8576, 8448, -9088, 8448, -8704, 8576, -9088, 7808, -8448, 7424, -7552, 8320, -8576, 7040, -7296, 7168, -8320, 6016, -6400, 7552, -8064, 8576, -9344, 8832, -9472, 8704, -9728, 8064, -9344, 7168, -8192, 8192, -8832, 8832, -9472, 8448, -9088, 8320, -8832, 8320, -8960, 8448, -9088, 8576, -8832, 8832, -9472, 9216, -9984, 8448, -9216, 6272, -7424, 7040, -7552, 7680, -8320, 6528, -7552, 7296, -7680, 7936, -8960, 8192, -8832, 8704, -9472, 8960, -10112, 8704, -9984, 9088, -9728, 8704, -9344, 8448, -9216, 8832, -9344, 8960, -9728, 8704, -9344, 8448, -9216, 8960, -9344, 9344, -9472, 9344, -10240, 8192, -9600, 8320, -8832, 8320, -8960, 8320, -9472, 7680, -8320, 7936, -8960, 7808, -9344, 8448, -9344, 8832, -9600, 8064, -9216, 8960, -9472, 8832, -9216, 8448, -9216, 8704, -9472, 8960, -9728, 8960, -9344, 8576, -9216, 9088, -9472, 8704, -9088, 8576, -9088, 8576, -9472, 8192, -9088, 8448, -9216, 8192, -8704, 8704, -8960, 8576, -9216, 7936, -9088, 8832, -9088, 8576, -9216, 8064, -8832, 8960, -9472, 9344, -9600, 9984, -10368, 8960, -9728, 8704, -9344, 8448, -9216, 7552, -8576, 8576, -9088, 8704, -9216, 8448, -8832, 7680, -8064, 7808, -8320, 8192, -8960, 8576, -8448, 7936, -8448, 8832, -8832, 7680, -8448, 7424, -7552, 8064, -8320, 8064, -8704, 8448, -8704, 9472, -9728, 9344, -9472, 9600, -9600, 10112, -9984, 8320, -8960, 8064, -8448, 8192, -8448, 8448, -8704, 8064, -8704, 8576, -8960, 8448, -8704, 8064, -8448, 8320, -8192, 4608, -5504, 5504, -6016, 6016, -6912, 5760, -5888, 6784, -7296, 7040, -7936, 6912, -7040, 7424, -8192, 4608, -5504, 6784, -7424, 8320, -8704, 7808, -8448, 7040, -7040, 7040, -7808, 7296, -8192, 6912, -7936, 8192, -8576, 8448, -8960, 6912, -7168, 7424, -7552, 5248, -6272, 6912, -7680, 5376, -6912, 4096, -5888, 6912, -7424, 7296, -8576, 7168, -7936, 6912, -7552, 3328, -4224, 4992, -5888, 6528, -6784, 4992, -5376, 4992, -4992, 7296, -7552, 7296, -8448, 7424, -8448, 8576, -8960, 7808, -7808, 6272, -6144, 6528, -6016, 7808, -8448, 7936, -9088, 7040, -8448, 7040, -8704, 8320, -9344, 8064, -9216, 8320, -9216, 8448, -9600, 7040, -8576, 7424, -8704, 5248, -5504, -7424, 6656, -6912, 5760, 6912, -7552, 8064, -9088, 8320, -9216, 8192, -8064, -1024, 1024, -8192, 8064, 2432, -2304, 7808, -8064, 7808, -8576, 8192, -9088, 8320, -9728, 8960, -9600, 8448, -9600, 8704, -9856, 8832, -9728, 7936, -8960, 8064, -8832, 6528, -7040, -1408, 640, -1664, 768, 6528, -7552, 8576, -9600, 8576, -8960, 7680, -7424, -8448, 7552, -9600, 9344, -4352, 4480, 7552, -8192, 7680, -8960, 8448, -9344, 8704, -9472, 9088, -9600, 8704, -9472, 8832, -9984, 9472, -10112, 9088, -10112, 7936, -8576, 7040, -7808, 5760, -6528, 6144, -7424, 8064, -8832, 9600, -10112, 9216, -9728, 8064, -8192, 3584, -4736, -4608, 3072, 4992, -5248, 7424, -8448, 8192, -9216, 8832, -9856, 8704, -9984, 8320, -9216, 8192, -9216, 8832, -9856, 9088, -9984, 8832, -9856, 8064, -9216, 7936, -9344, 7168, -8320, 8192, -9344, 9216, -9984, 9472, -10368, 9344, -9984, 8576, -9216, 7424, -8320, 6144, -8064, 6656, -6912, 7296, -8192, 8192, -8960, 8064, -8448, 8192, -8448, 7680, -8704, 8064, -8192, 7808, -8320, 7680, -8320, 7680, -8192, 7680, -7808, 7808, -8832, 7808, -8832, 8448, -9088, 7936, -8064, 7680, -7936, 8320, -8832, 7808, -8704, 7680, -8576, 7168, -8064, 7424, -7424, 3298, -2626, -3856, -105, 2110, -989, -5796, -3948, 3258, -205, -8855, -7115, 2945, -544, -9900, -7846, 3702, -819, -9884, -8269, 3134, 763, -9387, -7321, 2598, 1450, -8840, -6914, 3032, 2108, -9395, -7184, 2992, 498, -8736, -6487, 2387, -2207, -7676, -5482, 2420, 459, -6337, -4216, 3340, 1661, -4080, -1949, 1811, 196, -3202, -1157, 2430, 299, -3714, -2001, 1642, -2903, -2896, -1504, 2045, -856, -400, 1283, 3436, -3730, 2563, 3318, 2096, 152, 2487, 3088, -1584, -4327, -539, 667, -2265, 182, -2604, -1766, 1050, 3863, -3763, -2761, -2432, 2671, -4748, -3677, -3970, -367, -5030, -3804, 485, 4560, -967, 794, -5185, -506, 3201, 4508, 292, 3243, 1347, 2624, -165, 5723, -523, 800, -917, 5773, -1840, 488, 4202, -388, 2033, 3047, 78, 6430, 1966, 3233, -2480, 272, 546, 2478, -6, 2922, -796, 670, 3261, 1271, -828, 836, 3335, 4276, 828, 2031, 1361, 3991, 448, 1735, -2193, 4786, 1015, 2424, -740, 1380, 1615, 2760, 1084, 1672, 852, 2575, 883, -2316, 1503, 3252, 3348, 552, 410, 4274, 3126, -2049, -2521, 2658, -2165, 307, -3308, -1384, 949, -371, -6983, -4709, 1853, 685, -8113, -5642, 144, -357, -8824, -6690, 1260, 1303, -7913, -5485, 2499, -424, -7365, -5060, 1778, 361, -5364, -3282, -743, 3317, -4394, -1969, -783, 4561, -591, 1400, -604, 1074, -420, 1706, -806, 960, 250, 2588, -666, 3351, 1345, 4388, 3, 5986, 1186, 3682, -1439, 1860, 136, 2478, 1840, -1334, 1582, 4277, -140, -3838, 3194, 4524, -2611, -6118, 2113, 3868, 1566, -2474, -569, 1062, 1657, -4101, -3303, -2043, 597, -3157, -4285, -2316, -548, -4331, -4185, -2896, -928, -4609, -3486, -2714, -244, -5597, -2350, -680, -2293, -758, -888, 1589, 4539, -1995, -610, 1764, 3620, -1469, -319, 2473, -6217, -3416, -3533, 261, -1201, -5193, 2810, 4782, 4764, -2538, 1650, 4026, -4404, -879, 896, 2980, -358, -2220, 86, 1718, 62, -232, -410, 996, 1639, -2446, 106, 1871, 4149, -1767, 530, 2327, -3373, -2749, 1119, 3582, -1520, -1609, 3814, 5244, 3698, -598, 3528, 6200, -1848, 1013, 4305, 6481, -2994, -1997, 3673, 9485, -441, -1762, -3978, 1575, 477, -2042, -5078, -3384, -357, -498, -6687, -4006, 1713, 1524, -4056, -1122, 854, 3340, -4091, -1341, -919, 106, -3127, -214, 91, 1930, -1769, 1261, -210, -1382, 42, 2610, -70, 488, 194, 3046, -3820, 3392, 3006, 4745, -2743, 5923, 2471, 4046, -2262, 8834, 3563, 5004, -1645, 3149, 1204, 4645, -306, -2262, -423, 3148, -156, -3806, -1448, 1421, 2356, -4358, 1136, 4309, -1661, 855, 2026, 4251, -3024, -3374, 2601, 4518, -712, -5991, 3336, 5196, 1214, -1418, 3105, 4708, -573, -6049, 805, 2973, 1903, 1235, 538, 1645, -4622, 2625, 1195, 1980, -4102, 737, -514, 1447, -781, 1153, 458, 3471, -3981, 2460, -674, 2017, 2752, 6275, 624, 4172, -7289, -1312, -2660, 1012, -3060, -2397, 7, 3149, 6141, 576, 3011, 5449, -1071, 1246, 963, 3401, -4409, 1157, 263, 2311, 1558, 6050, -1002, 1215, -2532, 4679, -1142, 601, -2100, 4861, -2614, -666, -4501, 5417, -2791, 999, -4184, 1437, 1396, 3748, 1246, 32, -935, 3012, 1096, -2424, 1592, 4439, -4294, -2998, 463, 6763, -2827, -2355, -3884, 2151, 6642, -2352, -3440, -1585, 1164, -2, -3751, -1311, -948, 138, -2971, -310, -2964, 3280, -442, 1600, -1247, 4455, -1200, 889, -3079, 2762, 1168, 3596, 150, 40, 2126, 4620, 336, -2055, 4795, 6662, 2664, -1361, 3137, 3744, -446, 1274, 1951, 2582, -1198, 492, 2033, 2851, -2520, 3481, 18, 2456, -2358, 2970, -44, 3156, -4584, 4824, 3065, 5500, -841, 1775, 3170, 6144, -646, 2516, 1627, 3936, -1417, 1741, 814, 2826, -2212, -768, 900, 2056, -2061, 388, 2479, 4413, -2150, -3680, 666, 2564, -740, -4384, 1451, 3329, -625, 1367, 1591, 3733, 1116, 6873, 611, 3052, -4487, -2722, 938, 2994, -796, -4510, 1163, 3011, -4548, 639, 1017, 4621, -6507, -2571, -158, 4123, -2392, 2707, -448, 3603, 3677, -5223, 2703, 5522, -1503, -3445, 197, 3197, -1977, 5028, -3382, -1030, 7036, 6434, -5125, -3227, 4115, 394, -5824, -4551, -2349, -1755, -5437, -4050, -787, -1240, -8373, -4502, -3357, 1612, 615, 3190, -2845, 3331, -3353, 1103, 132, 4043, 353, 2764, -617, 3741, 624, 5795, -3628, 1912, -2168, 3930, -2845, 5481, -1541, 671, -295, 1030, -2687, -673, -1407, 3164, -1968, 176, -3178, 1151, 101, 712, 453, 6412, 1305, 2505, -4915, 5192, 3024, 4165, 387, 2518, 1222, 3736, -2422, 5183, 1724, 3820, 519, 231, 2956, 5216, -505, -5512, 2464, 4782, 1347, -9606, 4134, 5295, -2024, -7869, 1802, 3934, -917, -3501, 1215, 3177, -4077, -721, 1094, 3091, -364, 846, 2228, 4557, -523, 8422, 2050, 3947, -985, 7496, -1940, -790, 8014, 10955, -3478, -2694, -2243, 7484, -1256, -791, -8195, 8368, -188, 1298, -4452, 5970, -3266, -1439, -2473, 1295, -1754, 951, 5020, 5881, 1872, 4220, -8518, 7601, 1234, 2974, -3487, 5414, 43, 921, 5501, 3354, 285, 1726, 3785, 2460, -1044, 683, -7981, 2518, -699, 2337, -607, 1510, -482, 2444, -789, 2205, -99, 3651, 4513, -5593, -1888, 1218, -1514, -3494, -2252, -502, 1879, -4640, -4122, -2669, -2143, -7382, -2744, -1383, 3083, -2909, -4578, -2009, 3887, 1514, -1653, 1581, 6335, 5504, -2272, 2373, 2625, 5479, 4606, 7477, -6190, 3265, 3111, 8279, -4068, 834, -319, 5398, -2664, 11260, -2277, 135, -1478, 6736, -2103, -163, 560, 493, -2917, -313, 6150, 3208, -1872, -1083, 1561, -1616, -1429, -471, -1565, -2255, -194, 690, -3446, 3744, -2340, -208, -2833, 589, -394, 2097, -185, 1941, 3389, 6554, -6731, 2959, 538, 3501, 3431, -5535, 2743, 4072, -2394, -3729, 3418, 5410, -3007, -2387, 4555, 6512, -2865, -206, 2590, 3936, -320, 2601, -504, 1107, 4902, -1250, -2999, -1365, -4103, 4196, -1809, -592, -1687, -2782, -2543, -489, -9354, -3024, -721, -102, 6168, -362, -2398, -1109, -3490, 1166, -1615, -239, -6768, 8812, 1368, 3776, -3453, -4708, 4944, 7706, 3893, -2669, 2484, 5033, -270, -3044, 2351, 3593, -1126, -4321, 1537, 2774, -346, -7141, 2669, 3200, -4926, -6520, -2748, -614, -2268, -630, -2535, 216, 8512, 11030, -3825, -1203, -10930, 6618, -3168, -306, -3605, 572, -1281, 949, 1518, -2402, -1955, 440, -3052, 880, -730, 1022, 390, -6577, -363, 1735, -1123, 0, -1582, 1859, 6228, -5278, 1093, 6242, 3003, -6225, 10446, 14654, -5732, -4910, 6324, 12344, 7317, 285, 1963, 7313, -6223, -1202, -900, 2006, -4288, 14094, -1495, 1165, -3636, 11746, -3209, -465, -780, 3065, -3148, -960, -806, 4303, -3925, -2045, -1372, 2868, -3306, -1604, -1673, 3061, -2620, 108, -1079, 1505, -3826, -104, 2711, 2075, 96, 4097, -5766, 329, -819, 3428, -1176, 406, -128, 1831, 1778, 735, -381, 1243, -4488, 5980, 546, 2481, -4211, 1576, 914, 2214, -1210, 4574, -3663, -2182, -709, -3685, -4690, -2836, 3227, -11321, 1183, 2130, -3615, -10315, 589, 2629, -3827, -5300, 2833, 3545, 942, -11637, 2996, 4417, 961, -8027, 4568, 6711, 967, -6899, 3263, 6005, -5538, -4092, 3725, 5718, 1220, -1278, 4530, 6941, 4009, -2993, 4867, 7152, -7273, -2976, 3494, 5995, -1536, -5222, 2575, 4489, -2418, -577, -1794, 540, -3012, 3000, -5455, -2976, 4984, -8609, -4922, -1778, -10999, 1868, -4938, -1041, 3368, -2224, -1536, 1690, 529, -262, -1657, 1868, 633, -478, -639, 2482, 1949, -435, -931, 1487, 1895, -2972, -1027, 1837, 879, -6104, -1481, 1591, 2078, -10487, 3639, 6713, -2898, -11208, 1979, 7404, 1786, -3672, 4717, 10636, -451, -4175, 995, 4472, -2074, -6165, -558, 3084, -1368, -1880, -3127, -870, -3491, -924, -5956, -3212, 952, -1841, -7442, -4899, -2130, 238, -8350, -5795, -2172, 3438, -10143, -6494, -1061, 9603, -9617, -5681, -1617, 11217, -6813, -2957, -7146, 1738, -4241, 1249, 2026, 8544, -5253, -1831, 1590, 1955, -4662, -2933, 535, -363, -3528, -1416, -4386, 926, -2344, -357, 6858, 8131, 351, 3037, -7150, 11534, 1120, 3221, 2415, 3123, 4116, 5599, -5560, 8155, 3825, 5331, 1470, 2598, 4893, 6326, -4367, 3443, 4968, 6462, 4483, -2175, 7372, 9295, -73, -7476, 4967, 7646, 3355, -803, 1739, 3472, 1739, -7316, 1913, 3775, 603, -8653, 599, 2495, -3653, -8865, -1579, 1114, -1637, -4371, -2308, 31, 864, -5386, -3335, -610, -2392, -2623, -6396, -5055, 7600, -3249, -6944, -5402, -4551, -4605, -5227, -1232, -1749, 1985, -3771, 177, -563, 2818, -4944, -848, 990, 2836, -4379, -474, 3528, 3563, -3692, 100, 2858, -1028, -2087, 758, -3963, 1231, -4385, -1765, 867, -1233, -4130, -1527, -1000, 188, -2158, 2849, 134, -6058, 3824, 9645, 3658, 3704, 608, 4252, 2310, 3168, -2651, 242, 503, -1070, -2959, -206, -1280, 610, -6413, -3279, -1644, -2311, -8488, -5317, 339, -3647, -7594, -3934, 1593, -4678, -8606, -4088, -2122, -240, -11259, -7189, -5643, -3564, -9001, -4853, -2356, 2449, -5720, -313, 4327, 2320, -6605, -2030, -4015, 5324, -8155, -4982, -2407, 6543, -7774, -5012, -2626, 9052, -6714, -3414, 4678, -2835, -1681, 1837, -4106, -8159, 1616, 4525, 8069, 3808, 3723, 5086, 2574, -3708, 2993, 4014, 887, -4350, 3706, 5138, 1843, -3371, 5755, 7805, -2744, -7542, 5222, 6790, 7234, 1986, 2392, 4655, -5852, 136, 1230, 3728, -1566, -1186, 295, 2092, -1093, 2453, -2289, -544, -2329, 6054, -6562, -4451, 1849, 11324, -7546, -5107, -116, 8145, -7078, -4692, -6293, 6479, -8021, -6293, -737, 2612, -8967, -6572, -3580, 3679, -7974, -4965, -2843, 9087, -7436, -3553, -4553, 11591, -6929, -2508, -2751, 10799, -7481, -2806, -1126, 9562, -9124, -5465, -1895, 6910, -11176, -8053, -86, 2147, -8647, -6171, 2756, 497, -8005, -5456, -3032, -4046, -3329, 1191, -986, -3491, 2112, 7449, 2312, -1053, -1365, 2875, 444, -1406, -3558, -134, 33, -11, -4991, -1924, -1521, -3324, -7178, -4415, -1044, 286, -10122, -7621, -1836, -1683, -10281, -7002, 894, -2507, -11690, -7380, 48, -1126, -8114, -4251, -2585, -1674, -8207, -3706, -7016, -4530, -8521, -2975, 2251, -206, -10729, -4912, 3129, 1429, -11546, -7508, 380, 2328, -10755, -7873, -1315, 1572, -7643, -4059, -7947, 4275, -1689, 2469, -415, 4647, 4234, 7806, -690, 2333, 4577, 7080, -1828, 10675, 3827, 6227, -1288, 6301, 3249, 4643, 346, 6310, 2058, 4348, -2575, 5851, 873, 2738, 2697, 3890, 487, 3319, 3269, 884, -2475, 582, -650, 1812, -3460, -2228, 1521, -973, -6553, -4460, 119, -649, -9632, -6893, 1374, -2055, -9094, -6369, -2946, -2505, -8745, -6105, -832, 1523, -9492, -7350, 1097, 376, -10242, -7676, -299, 1213, -7622, -4252, 822, -4135, -7792, -3106, -5861, -340, -3160, 2458, -5172, -1054, -3871, 1899, -757, -618, -5299, -736, 320, -1517, -6951, -3897, -1305, -4672, -6416, -4552, -746, -6291, -6009, -4003, -3087, -5762, -4640, 126, -3623, -5567, -91, 5731, -832, -2065, 799, 4845, -1981, -3593, -2030, 1424, -1982, -1430, -3758, -657, -70, -94, -5950, -3602, 1901, 336, -9553, -7419, -624, -1445, -11819, -9370, -435, -3686, -12129, -8569, 2169, -3443, -9670, -6113, -1581, -94, -9671, -4641, -6637, -1350, -7918, -3609, 70, -4526, -10755, -5904, 316, -744, -11906, -8168, 813, -2714, -11184, -7977, -1288, -3898, -7656, -4138, -3154, -5339, -3508, 2102, 6262, -54, 5242, 10783, -4325, -553, 7577, 11301, -2457, -10252, 2344, 5833, -3804, -8150, 1505, 3126, 376, -7237, -614, 1328, -283, -467, -477, 2640, 10547, 3656, 473, 3149, -4903, 1944, 849, 3074, -3579, -2706, 150, 884, 1252, -2855, -4070, -2473, 2896, -1246, -7771, -5257, 1913, -5831, -8355, -6941, 243, -8981, -9015, -7764, -1634, -6266, -9666, -8214, 819, -7327, -10395, -8541, 3703, -4501, -9539, -6923, 1280, -3698, -8761, -6075, 2791, 1643, -4097, -500, -291, -2139, -4301, 311, -1348, -6627, -4359, -707, -1369, -5757, -6611, -4786, -707, -7276, -5397, -4475, -262, -6465, -4641, -3110, -2196, -6794, -4546, 428, -4573, -2585, -341, 4860, 46, -5085, 931, 3508, -770, -2799, -1249, 1438, -1274, -5186, -2103, 578, 114, -1910, -4791, -2907, 2271, -3519, -8008, -6294, 1061, -2942, -10400, -8940, -277, -1722, -11361, -8775, -1431, -949, -10266, -7222, -3571, -4154, -10655, -5913, -1759, -319, -7725, -4192, -884, 911, -10056, -7250, -1010, -2201, -11554, -8672, 496, -4119, -11031, -8099, -1885, -2291, -9304, -6587, -1083, -3576, -5702, -1578, -10, -7900, -207, 4424, 2298, -8350, 2973, 6627, -6610, -4110, -44, 2479, -5346, -3751, -478, 744, 640, -3055, -2496, -1406, 2651, 872, -1485, 1669, 1420, -5471, -229, 3341, 2577, -6590, 1051, 3423, -136, 332, -650, 118, 1161, 5884, -2517, -1178, 1366, 4671, -8199, -5024, -966, -514, -7983, -6659, -1863, -3346, -8503, -7493, 59, -535, -6632, -5367, 2793, -1377, -8566, -6973, -5749, 1571, -7299, -4765, -1967, 1257, -4964, -2326, 194, -2558, -3833, -849, -2709, -387, -5247, -1220, 1700, -4580, -3639, -1098, -1875, -7378, -4215, -3200, -816, -4834, -7275, -6425, -2268, -5089, -4765, -4002, -6717, -5746, -6247, -1572, -239, -8641, 1936, 6750, -917, -8176, 2086, 3224, -983, -6816, -62, 1723, -2279, -4019, -696, 902, -1587, -2264, -2704, -1398, 297, -2999, -5998, -4656, 220, -3290, -7912, -7020, 430, -2634, -9440, -7504, 2250, -2649, -8877, -6623, -7048, -2632, -8068, -3794, -991, -4125, -4631, -1518, -667, -486, -5949, -3870, -2405, -6209, -7353, -5051, -283, -6987, -6811, -4695, -2460, -3138, -7147, -4949, -2649, -1918, -5801, -3168, -1741, -3546, -3191, 96, 905, -5425, -1635, 1221, -74, -5159, 407, 2564, -7383, -2181, 1278, 2291, 78, 13, -221, 716, 3396, 3181, -6, 2839, -6732, -3395, -377, 3989, -1106, -2572, -1912, 854, 5265, -897, -1342, 587, -923, -1800, -5020, -2368, 3145, -5674, -7064, -2360, -2624, -142, -6061, -3229, 919, 2964, -8098, -6770, 962, -6734, -3824, -2489, 237, 5944, -2299, -240, -3387, 5333, -2278, 523, -3398, 6481, -2254, 1480, -161, 1496, -3741, 12, -1243, -1482, -3972, 1115, 147, -7177, -6448, -4101, -653, -1940, -8884, -7332, 1819, -2485, -8972, -7800, -317, -5608, -6491, -5730, -4978, -5074, -7038, -2051, -4878, -3646, 711, 5038, -1765, -1560, 2291, 2220, 690, -5807, 836, 1757, -733, -1420, 284, 986, 308, 2223, -959, -87, -875, 1024, -2831, -1826, 2536, -316, -4431, -4126, 1566, 1317, -6722, -5144, 1459, -658, -6654, -4722, -2607, 2028, -5594, -692, -2108, -2932, -3828, -1046, -934, -2292, -4360, -2474, -1781, -761, -4257, -3289, -3335, 1723, -4108, -3526, -3597, 2344, -5746, -3973, -1247, 4009, -4861, -3120, -3380, -2508, -2624, -332, -2113, -1932, -1501, 557, -2488, 346, 455, 1886, -5056, 1073, -100, 469, 381, -873, -534, 204, 462, -387, 32, 1944, -1930, 1635, -3412, 63, -586, 1463, -4083, -1908, 876, 1815, -3838, -1687, 1128, 10027, -4913, -3148, 563, 3258, -5804, -2228, -1903, 3862, -5011, -2072, -467, 3266, -5838, -4199, -365, 1584, -4448, -3031, 626, -992, -439, 2807, 13392, 10822, 2164, 4613, -16030, 13583, 496, 4219, -3198, 4098, -3082, 914, -3878, 3041, -3779, 918, 319, 3814, -5351, -2132, 298, 664, -6318, -4686, -2437, -1497, -7727, -6867, 773, -2494, -6355, -5241, -6558, -5415, -6209, -1502, -4073, 660, -1166, 2799, 1281, 819, -290, 38, 3663, 9768, -881, -134, -1949, 8565, 356, 1084, -3228, 12471, 2234, 3087, -5739, 9596, 345, 1756, 2143, 7773, -645, -881, -2185, 1673, -5061, -4180, 3432, 6293, -5471, -3295, 2720, 652, -5899, -2724, -9840, 13042, -6865, -3567, -1565, 9336, -8374, -5676, -4105, 11274, -4798, -3256, 9879, 17804, -2614, -1156, -5274, 22011, -1376, 665, -1630, 12098, -3225, -1147, 1285, 8025, -2439, -1038, -5025, 13569, 1109, 1925, -3703, 5176, 921, 2760, 6493, 9384, 1063, 2016, -4726, 4946, 495, 1503, 4338, 11211, 934, 2372, -4510, 8872, -3539, -616, 841, 12063, -3567, -2339, -2005, 8769, -4737, -3551, 4362, 5938, -2715, -1029, -853, 2832, -1718, 538, -577, 10447, -1372, 613, -4266, 8534, -2653, -1046, 471, 4999, -3084, -1730, 2688, 6893, 875, 2824, 14243, -5098, 3308, 6120, -10878, -7467, 467, 4229, -4343, 3686, 143, 3566, -7855, 3058, -179, 4351, 2285, 6753, -3399, -60, -3963, 5716, -4132, -1968, 1285, 3462, -6196, -4899, -441, 4081, -5443, -4869, -2950, 2215, -5489, -1750, -2069, -118, -990, 3852, 4815, 7767, 912, 1071, 3160, 4080, 306, 1648, 8895, 8365, 3506, 4545, -5422, 2595, 7006, 8497, 6438, 3895, 2652, 4815, -9450, 5380, 5694, 4696, 3861, 7800, -1957, 706, 12318, 7803, 998, 3378, -8361, -1601, -2471, 281, 10374, 492, -3329, -76, -7346, -2483, -3734, 289, -6837, 9719, 2081, 4829, 6554, -7712, -14, 3240, 3445, -8570, 2753, 5571, -1057, -130, 1220, 3318, -4199, 17935, 5021, 6150, -3004, 1760, 5227, 7063, -4751, 3962, 5072, 7573, 8168, -166, 4077, 5601, -4493, 2771, 2288, 4120, -879, 16585, 5781, 6783, -4758, 10083, 650, 3341, -778, 6214, 3427, 5257, 8103, 13613, -178, 1946, -8473, 17707, -861, 468, 3450, 15490, -3830, -2138, 3172, 13149, -1527, -830, -5316, 15118, -1972, 278, 481, 18267, -418, 451, 2517, 10633, -1401, 322, 10066, -4968, 2170, 5213, -11125, 88, 1278, 3969, -1113, 10241, 2719, 6203, -3898, 4764, 1819, 6111, -881, 2634, 1681, 6397, 2125, 2408, 917, 4776, -512, 7585, -1718, -152, 526, 5567, -1538, 570, -3174, 3208, -951, 3182, 2207, -6178, 1534, 7363, 2283, 285, 8004, 9448, 4581, -3653, 4176, 7537, -1822, -1775, 5365, 6555, -829, -10839, 6427, 8968, 5852, -1088, 7140, 11279, -1765, 2629, 10837, 12128, -4640, 1327, 4393, 7985, 12937, -2395, 5429, 8794, -13951, 3425, 5935, 9003, 14782, -14679, 2942, 5895, -4644, -2709, 494, 4159, -5277, -12103, 3383, 6073, -3953, 558, 3660, 7160, -1263, -10631, 1970, 6278, -1393, 11092, 7131, 9229, -6805, -18540, 5270, 7329, -60, -11138, 6583, 8632, -8522, -9859, 5792, 9499, -4252, -4542, 4677, 7736, 7334, -6163, 2343, 4672, 1396, -13210, 7709, 9167, -3258, -6086, 1440, 4676, 2206, -12712, 7682, 9930, -786, -11268, 3995, 4888, -786, -10305, 3098, 5176, 9001, -2956, 3514, 6153, -10316, -1231, 5407, 8013, 2346, -6633, 3136, 7188, 1346, -1014, 8112, 10225, -595, -498, 5189, 7830, -16040, 4496, 3565, 7348, 6697, 10948, 5298, 7132, -1331, 590, 5422, 9408, -10468, -230, 1520, 5347, -3976, 2239, 1628, 6428, 4890, 3630, 2244, 6349, -2422, 10353, 7047, 9712, 3459, 2244, 1718, 6228, -2773, 528, 2065, 7368, 4287, 761, 4947, 11725, 2867, 1275, 10331, 13477, -1446, 1856, 4513, 8758, -1178, -11253, 8411, 11247, 705, -12392, 7016, 9217, -6753, -6737, 6442, 10653, 8841, -10223, 9302, 11925, -4100, -7995, 6911, 10783, -2838, -10446, 3335, 7386, -6674, -10296, 6993, 10070, 5340, 12238, 3213, 5953, 7825, -4180, 4327, 7853, -4942, -1556, 10857, 12664, -5411, -6290, 3709, 8208, 4883, 2543, 4350, 8218, -5101, -12023, 8959, 12442, 9107, 643, 6496, 8802, -6420, 632, 8583, 10431, 5388, -5857, 2628, 7007, -12416, -4414, 4521, 8474, -845, 15102, 7773, 8773, -5773, -3024, 3779, 6567, 4470, 8898, 3801, 6458, 3243, -3621, 6612, 9232, -5958, 6454, 10761, 11728, 595, -3140, 6185, 9739, 6854, -8150, 7889, 11520, -3057, -9130, 9538, 12560, -3379, -6569, 5290, 7368, 3806, -13207, 6469, 8542, -5631, -7034, 5902, 9325, 8394, -7535, 6468, 10768, -3269, -11303, 10337, 12434, -10510, -5711, 5128, 10102, -2757, 335, 1268, 5116, -4223, 1628, 1946, 6724, 5402, -1435, 5159, 9805, -4553, -11952, 10751, 13649, 4522, -4217, 2408, 6988, -5760, -3942, 2826, 8999, 5834, -4952, 4454, 10789, -4698, -11929, 7803, 10699, -1027, -6501, 3525, 8379, 1508, 3010, 3462, 6537, 405, 5231, 4492, 6371, -7080, -5292, 6020, 9418, 6720, -3123, 8445, 9844, -5227, 1003, 7967, 12106, -1582, -7230, 3604, 7673, -4777, -9759, 6874, 10017, -1007, -14918, 5015, 10378, -3142, -5859, 3438, 5752, -3665, 5839, 8427, 10816, 57, -5219, 5038, 8779, 3085, -5743, 4119, 8045, -5864, -3375, 6615, 10634, 4995, -1779, 8471, 12584, -1076, -2500, 8529, 11504, 8358, 1177, 3795, 8177, -7284, 2344, 4672, 8171, -2876, -12082, 10542, 12885, -4576, 4823, 6634, 10091, -353, -11693, 6633, 9788, 3237, -6438, 7319, 10298, -2210, -16840, 9872, 12198, -343, -2826, 6566, 10126, 2514, -11415, 4526, 7618, -6364, -9947, 6127, 9852, -7833, -2955, 4573, 7474, -224, -6400, 2861, 4727, -3349, -4782, 1002, 4644, 918, -9066, 1719, 5168, 2926, -11171, 5477, 7890, -4720, -5304, 4221, 7499, -3824, -2206, 812, 3525, -4222, -303, 1563, 4891, -1736, -9873, 3227, 8004, 8343, -3611, 10086, 12454, -10266, 5679, 6640, 10201, -4806, -3053, 1477, 8917, 2314, -8474, 1144, 6834, -1152, -990, -30, 326, -229, -7825, 2335, 5415, 6706, -6414, 1651, 5326, -6362, -139, 4385, 8543, 3248, 3846, 6996, 11140, -1417, -2920, 9249, 11882, -3326, -7014, 4968, 9773, -1803, -3864, 2347, 5512, -1547, -5093, 3690, 6201, 2285, -1088, 3701, 7691, -3385, 5103, 9454, 11972, -3311, -12601, 9227, 12485, -1729, -2317, 5910, 9817, -292, 4217, 7311, 11306, 2987, -4113, 4398, 8042, 2539, -9032, 7535, 10353, 1047, -3645, 8148, 10290, -4032, 1346, 4869, 9666, 1111, -10240, 5500, 8907, -2262, -5221, 7427, 10184, 7620, -7014, 8750, 12180, -7959, -542, 7983, 11209, 5908, 4514, 8807, 10250, -4188, 4803, 6369, 7649, -3053, -4690, 5485, 9110, -7031, -1882, 4778, 7289, 1502, -1628, 5198, 7676, -4300, -3643, 5019, 7870, -8775, 7307, 2530, 4314, 717, 5934, 1578, 3538, -10752, 5082, 2507, 4617, 1471, -163, 2086, 3552, 2081, -2229, 3358, 5896, -2508, -4316, 1032, 4798, -4855, -6236, 2303, 5878, -2816, -5263, 3565, 8036, 3375, -3951, 8618, 11424, -3485, -9880, 6572, 9099, -1685, -4840, 1387, 8983, -1519, 777, -684, 5340, -473, -8315, 1682, 2234, -617, -3190, -883, 869, -2115, -2124, 798, 3962, -1291, -7178, 4442, 9296, 2277, -4448, 7898, 11588, -3658, -4061, 8959, 12087, 2595, -40, 3385, 7562, -8833, 3639, 1293, 4526, 4469, 7862, 1253, 4462, -2544, 3406, 3850, 7062, -6430, -6343, 10728, 14239, 139, -6902, 4792, 8078, 1052, -6766, 5724, 9972, 2903, -701, 5984, 9667, -3005, -2869, 4972, 7678, -1938, -4655, 3822, 5028, 938, -7090, 4995, 6925, 2195, -10550, 3808, 8252, 74, -578, 7703, 11831, 1522, -5565, 8715, 12344, 1836, -6822, 3493, 6829, -62, -3925, 5698, 10569, -3252, 2872, 8755, 11247, -497, -5166, 7142, 10785, -327, -2486, 4795, 9025, -7369, 786, 4958, 7167, 1048, -2110, 6564, 8218, -30, 2897, 6455, 9004, 6569, -11045, 5182, 7254, -9901, -7969, 6030, 7893, -4789, -6794, 2112, 4341, 2726, -1170, 1989, 3863, -6501, 2901, 2444, 4249, 7027, 4892, 805, 4834, 2454, 2355, 4592, 6435, -5973, -220, 2943, 6336, 5634, -2533, 8074, 11132, -3552, -5364, 8195, 11124, -3750, -3159, 1736, 8925, -2280, -1387, -1774, 4357, -2024, -1287, 2666, 3796, 1304, -2471, 1260, 3987, 2955, 5705, 3890, 6583, 1261, -5069, 3360, 7942, 1667, -5752, 5023, 8124, -719, -3935, 4281, 8395, -241, -3507, 6381, 10261, 2517, -3477, 1834, 5110, 1187, -6060, 3881, 6460, -11160, -9230, 5796, 8049, -1853, -6673, 7097, 8860, -2157, -3674, 2282, 5196, -3903, 183, 1737, 5337, 7382, -4993, 5175, 9257, -939, -45, 4954, 8517, -7731, 9945, 4735, 7591, 4539, -750, 3112, 5264, -2974, -185, 1493, 4388, -3384, -5954, 4018, 8612, 2570, -628, 5811, 9276, 1235, 1699, 2637, 6658, -1784, -2461, 5174, 10848, -915, -3788, 9191, 11672, -2133, 268, 7194, 11045, -4542, -3644, 4613, 10230, -354, -4914, 5726, 8262, -1852, 779, 6630, 9482, -1682, -10345, 8824, 10482, -5364, 7780, 6050, 7979, -7635, -5173, 4114, 6735, 1108, -3111, 2759, 4971, -3705, 450, 1736, 4153, -1762, -661, 3529, 5871, 3175, -3163, 1439, 6302, 378, 4470, 8397, 11849, 872, 9704, 3717, 8405, 2813, -916, 8018, 11701, 1474, -3732, 3617, 8501, -7378, -2897, 2381, 9085, -1360, 5850, -1765, 5175, -6008, 9296, 1751, 4766, 3867, 7434, -108, 4209, 5712, -6587, 3125, 6580, -6753, 3961, -2847, 1302, 407, -2464, -53, 3198, -4425, -5200, 348, 5121, 2076, -7751, 6710, 11261, -3924, -9430, 3839, 7693, 6298, -2735, 9062, 12294, -1228, -2786, 4977, 7660, -5795, -61, 11016, 12244, 1656, -2616, 4003, 6896, -798, 9936, 3478, 5870, -1459, -3022, 270, 4477, 1027, -3605, 1779, 6355, -5760, -7742, 2953, 7239, -511, -2021, 2844, 6166, 3090, 286, 1717, 5348, -9377, -4140, 3658, 7775, 9845, -2760, 7780, 11518, -4472, -1133, 1068, 5510, 6480, -6559, 6168, 10496, -7066, -4230, 8810, 10787, -1164, -3271, 5192, 9613, -3125, 361, 1338, 4988, -4359, -698, 3498, 6281, -783, -6924, 4902, 8347, -1909, -8894, 7523, 8606, 393, -13626, 5555, 8756, -3228, 5022, 752, 3261, 4799, 2876, 2632, 4909, -5605, -6011, 2037, 5144, 242, -7527, 6492, 9346, 5498, 357, 4225, 7948, -1419, -8297, 8633, 12304, 1821, -9995, 4168, 8094, 3765, -9751, 7891, 11511, 2281, -4194, 4483, 10096, -7290, -2594, 4470, 11264, -166, -8510, -2589, 3692, -3492, -10195, 1339, 4889, 7614, -6840, -395, 4336, -9530, -4937, -1647, 2753, -3991, -7922, -3344, 1814, 979, -4195, -2418, 518, -686, -5215, -2703, 873, -2256, -6727, 2137, 5632, 3297, -809, 3888, 6431, 1825, -2056, 5249, 8002, 7014, -2435, 3522, 7203, -7770, -224, 7855, 10957, 3773, 257, 8523, 11709, 535, -12474, 4538, 7124, -4963, -674, 41, 2761, 571, -4418, -1289, 1412, -1539, -1867, -509, 2713, -933, 1593, -97, 3460, 2820, -3264, 4595, 9098, -3785, -8386, 2629, 7385, 1984, -6124, 3217, 7980, -1686, -2834, 3380, 6639, 5822, -5223, 3654, 6739, -4416, -4508, 6038, 8698, 9966, -279, 4582, 8756, -10164, -220, 309, 3820, 349, -451, 1548, 4368, -155, -4207, 4214, 8366, -5437, 1218, 5643, 7704, 7776, -3112, 8252, 10629, -1304, -11879, 3536, 6697, 208, -10370, 2483, 4885, -2042, -970, 1564, 3518, 3790, 390, 3139, 4639, -5967, -5003, 5309, 7889, -5707, -1202, 3840, 7310, -6896, 745, 6492, 9269, -1346, 6893, 6209, 9374, 2478, 762, 4545, 9895, -3069, -4620, 3951, 11409, -941, 1031, -470, 6444, -4370, 999, 449, 5030, 7879, 790, 1439, 7116, -7608, 1383, -2695, 1366, -6312, 6597, -5897, -1421, -5685, 7058, -2215, 2083, -703, 1578, -3059, -309, -434, 2263, -221, 2492, 6197, -10071, 1454, 4030, 9981, -8796, 4544, 7205, -4333, -8491, 2595, 6987, 442, -2596, 877, 4962, -6734, 2975, 4312, 7532, -1846, 3967, 3319, 5697, -3873, 382, 2269, 5021, -2877, 5751, 1480, 2593, 1975, 2909, 4141, 6937, 5681, -247, 2593, 4868, -2527, -4091, 1967, 5491, 2757, -3838, 2424, 7358, -1785, -3363, 1798, 7088, -5927, -1016, 4745, 10707, 1614, 1423, 5491, 10182, -481, 426, 7176, 10580, 4339, -678, 2781, 7631, 26, -3843, -939, 2255, -5083, -7608, 4399, 7327, -2108, -5344, 1609, 6068, 9038, 2319, 5581, 7323, -10918, 1160, 4536, 6915, -8580, 1978, 1611, 4428, -688, 2265, 1733, 4363, 164, 4355, 4779, 7855, -1847, -5216, 1336, 2358, -1892, -7771, 1609, 3841, 984, -2992, 6615, 11153, 4125, -10237, 6798, 9759, -8387, -5571, 9440, 12247, 5238, -2265, 5892, 9815, -139, -1564, 2559, 8805, 6212, -1877, 216, 6347, -6500, -362, 912, 5714, 1192, 7599, -2946, 2446, -5123, 2081, -4860, -658, -4897, 4084, -1263, 3021, -1309, -1099, -211, 5051, -6547, -3874, 235, 4285, 2574, -6032, 1144, 4408, -359, -1669, -1785, 799, 7855, 4724, 445, 2593, -8077, 2199, -510, 3891, -2508, -7154, 1977, 7450, 8167, 953, 3568, 7439, -4506, -2815, 15, 4354, 5600, -504, -123, 2912, -15977, 3772, 6501, 8184, -4533, -4389, 4422, 8201, 9074, -4486, 6829, 9532, 2361, -5406, 6030, 8570, -7019, -5593, 4329, 9511, 987, -963, 949, 6057, -599, -7063, 457, 5766, 554, -2744, 4075, 9280, -713, -2161, 4838, 9056, 4671, -2920, 854, 6677, -420, 738, 1004, 4382, -5998, -3860, 1279, 4094, 289, -2858, 1303, 4299, 1264, -4373, 2929, 5011, 1342, -4736, 1666, 4907, -3929, 257, -1349, 2226, -70, -4211, 1009, 4836, -2768, 109, 2132, 6078, -138, 1423, 1064, 4552, -1, 2119, -423, 2055, -692, -5460, 1083, 6564, 2360, 794, 4405, 7611, 260, -2036, 8293, 10947, -4591, -1125, 3231, 6066, -2247, 51, -360, 5568, 2952, -2315, -2792, 3317, -6275, -930, -1763, 2971, 2023, -8807, -1607, 4718, 1096, -959, -3122, 606, -6493, -13135, 2175, 5570, -968, -3730, -2977, 1177, -2360, 1238, -2671, -455, -5321, 3191, -4153, -1813, 606, 1062, -5177, -2151, 4870, -2152, -2257, 1915, -9763, -8170, -3768, 1974, -1321, -3983, 1736, 7672, 8822, -12032, 1001, 6092, -3433, -9933, -852, 3583, -6264, -12049, 151, 2451, -1628, -15372, 3166, 5158, -3062, -4239, 1169, 3591, -2744, -1575, 1742, 5361, 2582, 3626, 7538, 11246, -4545, -1806, 3790, 9497, 8105, -3924, 2161, 6454, -7735, -906, -568, 3666, -3108, -6053, 2965, 8230, -1466, 3367, 4137, 9068, 1855, -4030, -398, 6086, 1735, 2794, 4756, 9092, -3769, 2616, 1526, 4790, -4941, -3052, 1191, 4140, 2280, -9744, 5252, 7105, 2674, -8277, 327, 4247, 3967, -5351, -852, 2155, -6762, -2472, -116, 3542, -2301, -9774, 1008, 6145, -3201, 834, 198, 4911, -2425, -1726, -2191, 1336, 5780, -1972, -1327, 4429, -398, -827, 5815, 9830, 876, -3260, 5305, 9376, -245, 2428, 5648, 9569, 676, 701, 1836, 8497, -3665, 5537, -6341, 7, -402, 3802, -2833, 1723, 4171, 5399, -6160, -419, -9875, 4495, -2831, 784, -5967, -497, -341, 2128, -3588, -7906, -2271, 1255, 2683, -2642, -263, 2580, -846, -6407, -3014, 1290, -4497, -3604, -964, 2463, 4097, -2212, -4221, -435, -1268, -967, -9618, -4940, -1392, -6132, -3393, 1134, 846, -7037, -4201, -308, -5453, -3486, -4642, 173, -10049, 1997, -1364, 1426, 903, -1013, -1836, 421, -2186, -1079, 1864, 4446, 2195, -6146, 272, 4100, -1840, -14114, 5240, 9727, 3857, -2437, 1496, 6940, -8144, -1620, 721, 4490, -135, -2329, 2489, 6969, -398, -5195, 2598, 7660, -2368, -13958, 4104, 9567, 657, -983, 226, 7050, -3150, -7980, 3704, 8723, 5535, 337, 854, 6208, -3769, 5763, -1480, 1042, -5888, 8257, 1884, 3529, -1337, -227, 990, 3249, -3024, 230, -1165, 1962, 7983, -2229, 1254, 5795, 1824, -1627, 2752, 6813, -7612, -3035, -1079, 3309, 1571, 4630, -6263, -1980, 1245, -572, -1589, 4303, 1321, -2700, 4756, 9007, 1366, 387, 1087, 5578, -1943, -7517, 5024, 10229, -1611, -6636, 1338, 9504, -3357, -5705, -5545, -618, -6517, -4080, -2946, 77, 10140, -6716, -4976, -1191, -10459, -5622, -1781, 1008, -10149, -6036, 1591, 5197, -1706, -2922, -304, 3206, -661, -7838, 2085, 5302, -2660, -5760, -1804, 2858, -5054, -10993, 1419, 4664, 7701, -1351, -2405, 984, -586, -6250, -7649, -2897, 363, -5961, -5437, -2496, 1576, -5807, -4861, -2605, -2701, -7025, -4702, -174, -6950, 6103, -3131, 1082, -6399, 2790, -2156, 1626, -975, -1186, 812, 4226, 503, -1697, 1893, 4514, 7162, -3765, 4408, 7338, -8049, -2996, 2647, 7055, 764, 88, 2109, 5974, -4317, -2319, 2742, 5959, 1155, -6760, 3083, 6871, -479, -2190, 2957, 6439, -2442, -5696, 1095, 6403, 11350, -1364, 2397, 5897, -6496, -10215, 2471, 7431, -6695, -2784, 922, 4770, -1999, -1164, 764, 4111, 4687, 8233, -2881, 162, -4529, 7575, -2195, -152, -241, 687, -1278, 2170, 1783, -571, 2457, 6586, -5250, 3502, -2132, 1130, 339, -663, -977, 3926, 3815, -2785, -395, 4706, -1578, -5375, 3797, 7863, 4404, -2911, 1863, 6404, -6634, -4059, 3365, 7792, -2212, -4533, 335, 7845, -1620, 1171, -5324, 579, 1002, 7195, -3567, 308, -729, 3260, -3607, 1018, -3345, -1850, -4018, -163, 1552, 3274, -4898, -149, -887, 4915, -5230, -946, -6244, 1557, -2836, 857, 1059, 1292, -3782, 1360, -6644, 2501, -1154, 2486, 4604, 2019, -1554, 2852, 5404, 2655, -6869, -1633, -2608, 704, -5567, -1600, -605, 307, -6609, -3343, 2321, 3317, -5588, -565, 2411, 9553, -5794, -414, -660, 5124, -4734, 528, -1222, 2378, -1686, 2697, -3260, 1000, 1401, 5510, 1711, -2029, 53, 4456, -2767, -912, -831, 4703, 210, -971, 518, 5857, 858, -3284, 1777, 5680, -1932, -3572, 920, 5236, 4909, -1512, 912, 6020, -1901, 2275, -1038, 4566, 5299, 735, -1116, 3699, -1031, -790, -471, 4772, -2940, -1928, -909, 4734, -995, 2046, -2053, 4751, 8760, 3540, -4811, 504, -4851, 4261, -3517, 506, -5541, 1514, -4621, 527, 5551, -1895, -666, 4461, -388, -2000, -3931, 32, -1585, 6237, -5558, -151, 3311, 3907, -3533, 1687, -1670, -84, -2544, 2608, 2653, -3547, -1819, 4022, 1772, -4157, -3437, 1945, -81, 2148, -2333, 4380, 2859, 3308, -3916, -930, -2124, 4940, -3084, -1810, 1589, 4461, -4653, -4060, 2745, 4635, -5747, -4638, 841, 5386, -5867, -5046, 1397, 5002, -5953, -5376, 903, 4660, -4429, -4054, 1588, 5310, -3698, -2999, 781, 6280, -3126, -1561, 1665, 5896, -3178, -1085, 3486, 2692, -3118, -1217, 3458, 1855, -3348, -1119, 2029, 3142, -2287, 167, 3134, 4146, -1134, 153, 781, 4378, -480, -736, 531, 3614, -1301, -2002, 4807, 501, -1513, -2747, 1617, -869, -2381, -3807, 4018, -1227, -2670, -4242, 5443, 53, -2767, -5359, 4927, 1495, -4571, -6515, 5383, 812, -3603, -5670, -196, -58, -2511, -3839, 6998, 1853, -1339, -2712, -3354, 1685, -446, -1924, 2982, 1759, -1462, -2756, 6230, 2180, -3234, -3090, 1838, 2492, -4428, -2325, 3058, 3501, -1241, -1583, 2021, 2789, -1898, -2869, -158, 2954, -3352, -3077, 1820, 2976, -2961, -3016, 4417, 1952, -3702, -3118, 2893, 2283, -3582, -3638, 4298, 1869, -3625, -3702, 3419, 2322, -3563, -3503, 2512, 2142, -1319, -1861, 2072, 2474, -1838, -2295, 2967, 2324, -2180, -1562, 3670, 3155, -3010, -650, 4767, 1895, -2924, 2495, -9665, 4864, 1235, 3174, -1373, 1854, -2135, -1240, -227, 3153, -2220, -341, -5543, 1855, -1810, -588, -63, 2721, -1766, -863, 546, 4275, 819, 1228, -646, 4881, 1350, 1277, 1895, 3349, -177, 848, -1816, 3016, 753, 1542, -3436, 3127, 417, 1086, -1398, 2277, -1377, 353, 2483, 3961, -24, 2584, 259, 4063, 2208, 3276, -1372, 736, 3335, 2590, -1620, 1102, 3200, 2450, 680, 2353, 3268, 2657, -4199, 714, 837, -43, 2665, 759, -1525, -3431, 3146, -808, -812, -4505, 1495, -715, -2412, -4329, 1865, -2735, -376, -3108, -3786, -1650, -386, -3049, 1415, -817, 1539, -1280, -4439, -2672, 1402, -216, 436, 142, 986, -29, 2385, 1197, -745, 1132, -2694, -4357, -4225, 327, -1299, -4028, 2075, 2231, -3514, -1574, 546, -676, -1822, -3002, -945, -487, -776, -2599, -1460, -590, 709, -591, -1969, -1240, 190, 284, -1193, -984, -436, -572, -733, -899, -180, -1621, -1074, -267, 1732, 759, 3767, 2310, -1285, -698, 2842, 1536, 866, 2779, 3703, 4444, -2486, 2647, -506, 4282, 3845, -4562, -3937, 2456, -6859, -8578, 2611, 4860, -1129, -2884, 836, 2068, 2195, -1434, 130, 3364, -1939, -1854, -1156, 1332, 2418, -3437, -844, 1725, 3924, -2598, 2221, 4869, -1599, -2921, 3751, 6008, 1006, -2867, 2325, 4264, 631, -3541, 3772, 3454, 301, 1606, 4054, 1520, -1387, 4390, 232, -1352, 713, -517, 460, 1810, -3142, -3843, 1980, 4491, -1894, -4474, 3435, 4170, 363, -2996, 4556, 4648, 688, -3317, 3932, 4713, -73, 643, 1040, 1806, -207, -1662, -1044, -1425, -739, 1899, 633, -509, -1057, -2549, -2072, -2353, 1929, 3663, 504, -167, -816, 6899, 2788, 2138, -2183, 4905, 3138, 2035, 571, 1425, 3249, 2720, 3326, 1221, 4555, 3480, 1498, 2966, -37, 3501, -4761, 3107, -3196, 2772, 437, 2119, 4953, 7484, -2620, 1519, 4602, 5391, 306, 503, 147, 1311, -636, 797, -631, 1236, 1202, 1557, -478, -361, 2325, 3222, 1649, 835, 26, 1964, 1667, 1129, 110, -1452, 534, 2184, -169, 3579, 6731, 6121, 1313, -1953, 4949, 4009, 562, -433, 3054, 5569, -7158, -4553, -1701, 5117, -769, -519, -5601, 2752, -946, 1821, 940, 4382, -2290, -1996, -1621, -236, 1727, -630, -574, 1797, -3647, 4910, -669, 910, 1562, 3515, -1268, 749, 1420, -1036, 239, 3030, 1110, -2570, 965, 4017, -1517, -2370, 553, 1732, 1548, 548, 1454, -212, 4566, 5445, 3953, 309, -989, 4999, 2356, -585, -1642, 2747, 211, -416, 152, 1094, 709, 1716, 126, 699, 2068, 2879, -1270, -1179, 1110, 1975, -1442, -1105, -2, 1476, 2276, 964, 253, 1308, 3358, 1715, 2166, 1536, -717, -454, 2164, 1067, 1845, 970, 1324, 1109, 2418, -1179, 2079, 1906, 1790, 777, 2038, 2086, -782, -685, 733, 1239, 3967, -1486, 2130, 1828, 585, -14, 4793, 3822, 853, -3479, 461, 3190, -4173, -3694, -2054, 2825, 1201, -3684, 4885, 7050, -619, -1103, 6073, 7316, -4744, 4300, 5264, 7952, -616, 3176, -246, 2410, 2945, 2900, -789, -489, 2910, 2000, 670, -823, 373, 1104, 232, -905, 4219, 1556, 1279, 1607, 2347, 3158, 5963, 6574, -8396, 3471, 5482, 5485, 1458, 5795, 2299, 5349, -5408, 1839, -3662, 1683, 3581, 4224, -6479, 2116, -3938, 3713, 46, 4394, -6387, 4490, -527, 805, 2511, -1393, -280, 692, -1048, -991, 2434, 1725, 2537, 231, -16, 206, -1351, 617, -97, 1561, -1624, 1207, 1305, 4213, 3992, 9898, 4962, 7226, -3875, 8746, 3715, 5791, 1255, -3737, 2919, 3234, -2189, -6079, 2491, 1287, -3188, -2532, 1292, 924, -3516, -612, 1168, 1529, -1768, -1799, 886, 1147, 478, -420, 1934, 3038, -1913, 2068, 535, 1681, 642, 1484, 1030, -17, 3381, 3105, 949, -1632, 4166, 3954, 522, -2286, -2288, 3969, 1051, -578, 987, 907, 1293, 594, -1561, 763, 1967, 2724, 1802, 3517, -61, 753, 1229, 1406, 1956, 1434, -1174, -196, 4392, 2917, 1663, 1317, 1648, 1372, -1582, 711, -267, 1028, 545, -2273, 2613, 3435, 1745, -3184, 5912, 8032, -7170, -3222, 5063, 8587, -2811, 1039, -512, 3741, 76, 1975, -1962, 927, 150, -800, -151, 1233, -62, -2450, 1693, 2698, -1358, -1201, 2793, 3952, 1296, -7253, 4816, 7905, 4976, 1943, 3339, 6482, 1717, 15048, 3431, 8311, -9896, 13006, -94, 5474, 632, 1548, -5886, 2942, -111, 2116, -957, 2256, -3372, 5745, 594, 2510, -3650, 2483, 1002, 2011, 2404, 4511, 1581, 389, 1766, 3256, 737, -616, -1464, 1632, 944, 678, -2286, 1867, 2382, 2250, 6124, 6340, 7208, 8902, -7297, 3809, 5182, 8905, -2148, 454, 1324, 4766, -982, 3093, 3903, 5729, -2232, -648, 1603, 2722, -334, -961, 3104, 4218, -4121, -605, 2557, 2456, -385, -1489, 1818, 1492, 3086, 683, 1079, 856, 888, 5124, 438, -1035, 2814, 5799, 317, -1412, -1057, 2952, 1809, -2136, 414, 3620, 626, -2592, -1923, 7438, -783, -2880, -3307, 4346, -1299, -1763, 1430, 4254, 740, 1650, -3104, 1942, -90, 170, 15, 1691, -1061, -983, 2615, -324, 1111, 524, -2263, -3200, 61, -989, -2742, -2788, 406, 30, 2904, -4495, 3487, 5314, -5533, -1273, 84, 4166, 1433, 1099, -1258, 3961, -411, 2445, 577, 4798, 601, 2809, 866, 3633, 1329, 3514, 1756, 4005, -39, 22, 2420, 4400, 1613, -1401, 1907, 5176, 13867, -1150, 3444, 7159, 2998, -395, 4777, 9636, -11982, -945, 2768, 7823, 2780, 4868, -6040, 1906, -6959, 4610, -2907, -292, -4037, 5001, -3452, -2064, 1385, 6897, -1282, -801, 2728, 4853, 1167, 737, 1248, 3302, 1933, 1274, 703, 3275, 3125, 3549, -407, 3048, 3898, 4501, 3208, -3970, 6556, 9021, -7247, -6850, 4154, 8413, -471, 370, -501, 4146, 138, -476, 2976, 5500, -1641, 796, 2317, 3502, -632, 2194, 1704, 2374, -3456, 2474, 1632, 1459, -2921, 4721, 1515, 1898, 4472, -1633, 1786, 1967, -61, -4765, 1116, 1319, 642, -5878, 55, -368, -586, -3730, 1829, -905, 1543, -4638, 1283, -1532, -63, -3515, 321, -1182, -2466, -1892, -1322, -598, 2203, -4494, 442, 1337, -1096, -2620, -561, 441, -101, -1738, -2110, -1029, 1248, -1934, 309, 578, 844, 4025, 4109, 4700, -2654, 3121, 2361, 3224, 2589, -2575, 1169, 2475, -3808, -3201, -2596, 1325, 1411, -2065, -475, 4265, -234, -912, 2828, 6470, -1927, 25, 2935, 5291, -328, 13, 3613, 6148, -1864, 2287, 4372, 7011, -988, -1636, 2068, 4923, 4894, -6952, 3398, 6790, 2720, -17676, 5454, 10806, -9060, -13619, 2960, 9032, 998, -5308, -5395, 3289, -3249, -8249, -1886, 1858, -1524, -6153, -5101, -3893, 906, -134, -2888, -3102, 1312, 1902, -1221, -2142, 370, 3659, 166, -475, 3165, 3391, 1450, 2452, 49, 3292, 2158, 3526, 2055, 291, 3544, 5275, -6075, -1064, 3031, 5658, -341, -3400, -523, 3711, -1503, -1128, 1793, 5191, -1477, -392, 1669, 2772, -1583, 67, 1263, 1229, 289, 227, 2165, 1811, -1609, 3046, 9, 1016, 2303, 3249, -395, 1007, -2498, 868, 1578, 2967, 42, 2765, 796, 1100, 2675, 791, 2772, 1237, 2445, -640, 3850, 1920, 1370, -3755, 2685, 2027, -2531, -6150, -474, 725, -876, -1910, -1123, -492, 483, -4138, -1588, -294, -717, -3871, -1227, -70, 1923, -1518, 1587, 2032, 276, -548, 3146, 4526, -6156, -1510, 916, 2859, -523, -831, 108, 650, -497, -1145, -592, 1965, 1364, -3113, -406, 2949, 845, -3996, 3094, 6815, -1403, -3255, 2299, 4681, 2657, -2931, 3034, 4557, -703, -2977, 2393, 4774, -2848, -2267, 1825, 4492, 1999, -3532, 2530, 5858, 2592, -8113, 3604, 8260, -2438, -5036, 1201, 6394, 118, -4513, -4617, 4466, -906, -3297, -1968, 3264, 937, -4192, -4695, -1522, -495, -5892, -3057, -1508, -1451, -3712, -1906, -729, -1505, -3611, -93, 1393, 768, -2682, 2208, 4309, -965, -1945, 1353, 3692, 2171, 198, 1780, 3119, -4158, 667, 2739, 4964, -2036, 1768, -565, 3256, 1289, 3374, -1651, 2512, 392, 5231, -354, 2328, 715, 3464, 1088, 1675, 1602, 2653, 1393, 1243, -309, -1722, 210, 1117, 2386, -2959, 59, 1231, 1972, 2783, 2112, 3224, 1470, -1047, 242, 762, 663, -2956, 1905, 1673, 2506, -2044, 3490, 2750, -1222, -4161, 2897, 2449, 700, 195, -435, 1215, -2139, -1012, -2481, -602, -1155, -752, -385, 221, -804, -413, -560, 135, 752, 653, -181, -394, 1861, 677, -795, -250, 920, 2078, -2030, -1222, 915, 4125, 6, -161, -2743, 3277, -658, 245, -1760, 3446, -1858, -468, -335, 2408, -2151, 86, -151, 5097, -2447, 230, 915, 4064, -1843, 110, 2737, 3419, -1983, 361, 2019, 4962, -1021, 1475, 1823, 5104, 1234, 3337, 52, 3194, 674, 4978, -3988, 3106, -2183, 4419, 821, -1123, -3479, 5884, -1960, 929, -2669, 4290, -333, -2380, -4789, -216, -1129, -3970, -4062, -1676, -2258, -3628, -3751, -1663, -1736, -2652, -2570, -939, 183, -3823, -550, 1351, 2468, -2298, -2014, 837, 2364, 566, -994, 1837, -2657, 190, 99, 4625, -1437, 1087, -2045, 3237, 1589, -378, -2488, 3476, -221, 1850, -1450, 3201, -1588, 1829, -261, 1889, 139, 514, -837, 485, -590, 2235, 830, 2170, 3236, 6997, 3576, 5674, 480, 6424, 2204, 4869, 2567, 3032, 1020, 3192, -2280, 6021, 3138, 3550, 151, 1504, 3407, 2783, 1835, 1280, 4224, 4254, -1732, -661, 455, 2649, 404, 1418, -850, 176, -2309, 1820, -63, -783, -1130, 71, -3094, -3172, 1055, 361, -2046, -3250, -752, -169, -3739, -4877, -275, -987, -3756, -4422, -652, 821, -2287, -2631, 789, 1894, -1239, -576, 189, 1085, -1999, -990, 170, -2006, -3230, -1585, -95, 43, -2380, 289, -1281, -552, -2254, 8, 630, 32, -2231, 90, 29, -488, -1307, 1004, -692, -2850, 952, 2789, -1306, -3178, 344, 5803, -3183, -1610, -2862, 4869, 1525, -3727, -3690, 5512, -3104, -1326, -2856, 4914, -2116, -3484, -3763, 1574, -3193, -3736, -3288, 32, -1583, -3489, -3571, -614, -2142, -4079, -4098, -2717, -1459, -2678, -3879, -1981, 2073, -2618, -2932, -280, 1211, -1915, -3235, 915, -1605, -684, -3660, 2221, -2512, 1001, -3766, 2498, 2429, -1504, -3823, 1907, 970, -2952, -2092, 2019, -1287, -2676, -884, 1537, -1933, -2726, -1613, 349, 1643, -2693, 1238, 3097, 5557, 1901, 4012, 5436, -4032, 1049, 3241, 4863, 2029, -3591, 565, 2433, -4468, -4589, 2336, 3244, 867, -2305, 3714, 4156, 641, -920, 2368, 4307, 3177, 1549, -1278, 2050, -133, 106, -1543, -301, -2160, -2112, 833, 878, -1755, -480, -1455, -125, 2681, -693, -3080, -2268, -2035, -2813, -3346, -2897, -427, -1182, -3668, -3799, -2211, -138, -3104, -2857, -1391, -1763, -2367, -1721, 227, -3073, -4325, -2391, 1781, -1735, -4404, -2385, -63, -4246, -3883, -1504, 624, -4624, -2574, -232, 297, -5030, -2655, -306, -2324, -4182, -870, 616, -1734, -4567, 713, 990, -1389, -4768, -1101, 2748, -2155, -2558, -3885, 3595, 1161, -2565, -3615, 4468, -1064, -3371, -2192, 3396, -1223, -2857, -2394, 1200, -2901, -3680, -2381, 209, -649, -2855, -3316, -1125, 313, -1988, -4207, -3314, 77, -2364, -5177, -3369, 913, -1374, -3488, -1136, 413, -2530, -3456, 566, -577, -3466, -4557, 498, -1460, -718, -3992, 1536, -988, 571, -3169, 1375, 303, -2081, -1858, 599, -121, -2211, -1181, 436, -2365, -1751, -3011, -958, 431, -3913, -1015, 1570, 5235, -8252, 1822, 4078, -2792, -10654, 1939, 4083, -2259, -3942, 392, 3058, -3085, -2028, 1392, 3378, -840, 362, 2640, 4324, 379, -231, -1700, 3064, 1654, -1413, -3557, 1730, -1705, -1828, -2400, -323, -457, 1492, -1651, -1140, 372, 3942, -2493, -651, -1172, 3264, -6853, -2962, -1567, 356, -4214, -2432, 1, 591, -3435, -3737, 788, 3277, -4115, -3517, 1368, 3406, -5291, -4083, -4071, 2166, -7456, -4600, 2631, 3669, -5028, -2614, -1988, 1264, -6046, -3135, 1696, 811, -3218, -909, 814, -495, -2564, -1293, -2574, -1760, 124, 483, -1849, -1872, 1315, 535, -1692, -401, -1572, 1711, -4211, -895, -4035, 3358, 1239, -1376, -5134, 1843, -1744, -4475, -2240, 803, -1151, -2747, -1488, 1126, -831, -1442, -1521, 452, -1217, 330, -2716, -1113, -422, 410, -3744, -2374, -528, 391, -4533, -3678, -838, -222, -3732, -2407, -209, -1670, -4169, -1485, -655, -1178, -5321, -1704, -868, -1720, -3383, 1001, -2679, 1163, -3224, -464, -303, -1576, -3414, -2226, -893, -2906, -2853, -1708, -1186, -1309, -3782, -1981, -619, 244, -2990, -976, 458, -4068, -2087, -546, -285, -3989, -1686, -1130, -1151, -1828, -3856, -2826, -4293, 202, -3044, -1094, -826, 2899, -2115, -277, -3408, 2082, -6022, -885, -595, -628, -5806, 225, 1035, -299, -2098, 739, 1363, 867, -2353, -900, -3188, -1227, -4177, -970, 2077, -512, -8286, -1550, -2870, -633, -5906, -2881, 1161, 1122, -3876, -3670, 240, -2027, -4704, -4040, -2340, 2792, -5549, -4113, 2007, 6392, -9159, -5372, -2810, 5839, -5615, -1595, -3403, 1803, -4268, 635, -1153, -394, -4825, -112, -812, -1854, -2586, -84, -1510, -348, -776, -327, -507, 581, 1835, 487, -1938, 453, 92, 3177, -4093, -285, -2376, 5061, 1220, -166, -5716, 1435, -3090, 2864, -702, 2430, -1194, -1057, -1753, 688, -249, 742, -2566, -661, -597, 1494, -4295, -2556, -3307, 1811, -2752, -2060, -527, 2855, -1919, -1895, -39, 4391, -2955, -2135, 45, 3600, -3642, -1349, -2149, 4445, -6208, -2914, 2177, 3818, -4137, -1461, -3337, 838, -4912, -3222, -1400, 1232, -6199, -5180, -2805, 1985, -5951, -4628, 39, 2118, -5556, -3831, -2782, 847, -4884, -2748, -791, -1546, -5264, -3374, -973, -776, -5597, -4983, -2953, -1045, -7980, -7089, -2991, -474, -8925, -7852, -1083, 1591, -5967, -4847, -1151, 138, -7576, -4702, -605, 1692, -7291, -3783, 962, 869, -5245, -3540, -11, 389, -4363, -2657, -466, 2645, -5033, -3187, -1338, 787, -8157, -2384, -517, 1718, -5220, -3054, 949, 2626, -4085, -3171, 4305, 1874, -3331, -2057, 3029, 3055, -4886, -2971, 8232, 7586, -9579, -5693, -12152, 8540, -8024, -4120, -7049, 1808, -5462, -362, -474, 2393, -5296, 730, 166, 1897, -554, 3247, -2320, 1513, 24, 1525, 764, -361, 1169, 1349, -3513, -1313, 834, 4814, -5139, -1567, -2559, 4825, 1602, 549, -6130, 307, -1648, 2587, -2030, 1041, -671, 8252, -4501, -1734, 1959, 9596, -3992, -1931, -3654, 17240, -2538, -699, -3983, 7237, -4184, -3977, -215, 9010, -1439, -1883, -1890, 4943, -3523, -2790, 3518, 11157, -4012, -2221, 589, 10358, -7110, -4269, -3352, 9085, -7595, -5743, -2886, 11498, -8345, -6671, -2041, 12553, -7696, -5984, 4642, 12640, -8894, -7308, -2982, 13992, -7695, -6249, -2390, 11693, -6064, -4191, 1071, 13656, -5526, -3354, -2383, 15422, -5198, -3618, -2210, 6074, -8242, -6760, 3406, 13862, -7454, -5955, -6865, 9267, -6689, -5038, -1155, 6888, -6732, -4495, -3321, 7076, -6758, -4170, 517, 13994, -5134, -3660, -134, 7119, -7014, -6188, 1092, 7560, -6178, -5468, -1467, 4295, -8380, -4865, 1883, 7717, -4585, -3758, -2805, 6137, -4371, -4009, 1410, 4058, -3724, -3271, 5409, 5672, -2361, -1201, 8418, -7067, -7880, -4179, -10036, -8280, -6990, -3443, -6727, -614, -5104, -1576, 210, 2599, -4836, 348, -1182, 3199, -3325, 1224, -3243, 5184, -825, 942, -1331, 2368, -145, 485, -3288, 1936, -791, 1930, -5159, 2341, -3954, 1893, 3178, 1891, -5024, 228, 2251, 14040, -1687, 1643, 1930, 7683, -5049, -2152, 15089, 1906, -5074, -3549, -2727, 1802, -5100, -3784, 3904, 6787, -2906, -2553, -3644, 14849, 1453, 2149, -2088, 10917, -2652, -1493, 10241, 9131, -4815, -2181, -5996, 4248, -6556, -3534, 5065, 8900, -7752, -5416, -7037, 6097, -9715, -6975, -3266, 5160, -9267, -6540, 3513, 1671, -8918, -6676, 4747, -1852, -9981, -8644, -1513, 7750, -6435, -4475, 2398, 8087, -5754, -4069, -1784, 2576, -5847, -4428, -8323, 6170, -6445, -4670, 4893, 205, -9042, -7077, -3991, 2190, -7200, -5179, -254, 12387, -4626, -3122, -4402, 7419, -6799, -5088, -574, 4743, -7298, -5745, 3779, 9517, -7712, -6664, -6351, 12123, -6624, -6095, -2024, 11327, -7937, -5950, 2334, 13354, -4214, -2870, -2400, 9881, -6584, -5631, -943, 17194, -3047, -1965, 3460, 15015, -2062, -545, 3013, 173, -6434, -3276, -5879, 719, -5627, -3424, -7034, 8194, -5410, -3422, -2420, 1009, -4997, -735, 1113, 1341, -2811, 1282, -1222, 919, -2205, -659, 395, 15396, 271, 2417, -3620, 12370, -1430, 2873, -5240, 6867, -5336, 1299, 9591, 6676, -772, 3852, 1087, 12867, 2126, 6975, -7754, 1546, -1952, 1157, 2879, 2245, -3018, -1272, 886, -7556, -3668, -1850, 14996, 2562, 794, 1747, 891, 3977, 2603, 3419, -14716, 3589, 1401, 2039, 8619, -751, -5807, -2221, -8863, 2694, -5275, -1218, 6508, -7986, -7993, -4741, -7596, -4674, -7203, -3983, -2783, 10216, -4033, -584, -2519, 37, -6674, -3920, 4271, -3999, -6108, -3926, -153, 9577, -3432, -1401, -1407, -7590, -4646, -3755, 864, -6677, -2537, -1573, -6295, -2489, -4089, -1365, -4611, 10060, -3521, -670, 10357, -2815, -3680, -2343, 2105, -5795, -3993, -3318, -14250, -5194, -3613, -2403, 1748, -9708, -5433, -4396, 611, -4168, -4992, -4306, -427, -6930, -5547, -4475, 8254, 4917, -2793, 167, -7376, 5030, -2104, 65, 8096, -2435, -4874, -2904, 2748, 560, -4027, -2669, -3601, 1192, -3684, -1559, -8878, 794, -3540, -1222, 2586, 14686, -811, 776, -10016, 8875, -2519, -502, -8302, -491, -5445, -1724, 2040, 1172, -3054, 871, 14570, 10903, 1234, 3972, -1838, 10812, 287, 2887, -7830, 6250, -2604, 2584, -6850, 4728, -6240, 2420, 12443, 5883, 3737, 8192, -5488, 5345, 5320, 10312, -11751, -2244, 1395, 4954, -663, -9390, -1799, 1051, -1600, -11290, -1864, 749, 6044, -10453, 2537, 3788, 3703, -12271, 2407, 3996, -10867, -5727, 1449, 2560, 5222, -9470, -4537, -983, -6180, -11408, -4301, -1084, 5058, 2390, -4984, -1642, 14877, -2259, -2707, -849, -2652, -2184, -1045, 781, -15864, -2869, -66, 1214, 14541, -2835, -2449, 23, -939, -5754, -3688, -909, 11978, 11193, 4426, 6627, -6026, 14230, 5556, 7567, 6806, 648, -1715, 2675, -6411, -2833, -4170, -711, -739, 16942, 2559, 3882, -3940, 157, 733, 2327, -1173, 296, -1061, 1180, 16151, 4792, 1139, 2280, -569, 8406, 1898, 2615, -8686, 6700, 2862, 3880, 10369, -9928, -1063, 1988, -6614, -11222, -820, 1467, -2685, -9704, -3147, -1434, 5003, -16744, -2461, -1177, -2538, -11632, -3077, -946, 13405, -5600, -774, -107, -1225, -5124, -629, 591, -15593, -5697, 293, 1870, -5383, -2280, -3721, -650, 2032, -4182, -2645, 707, 16288, -4625, 516, 2885, -2416, -7900, -44, 2106, -11370, -1939, -905, 3389, -5294, -3527, -6606, 2927, 10832, -9825, 2917, 8104, -4978, -13215, 5538, 9684, -9851, -7412, 2364, 5251, -1041, -2070, -1294, 578, 2273, 1035, -2205, -279, 10107, 754, 3805, 4614, 4074, 416, 3629, 6112, -13405, 1302, 3266, 5497, -1666, -5379, -2763, -22, 773, -7922, -1661, 1064, 1089, -8666, -3569, -438, 10147, -60, 1469, 2620, -1989, -12737, 2393, 3539, -6863, -7423, 2081, 3075, 8472, -5026, -674, 2988, -902, -8417, -890, 3239, 12859, -1796, 6056, 8220, -5378, -1884, 7094, 9626, -1175, -6351, 54, 5380, 11595, -1653, 139, 3277, 3457, -1103, 2851, 4279, -15929, 2596, 3961, 5938, -3421, -1080, -2264, 1534, 11180, -6446, 1882, 3074, -125, -13001, 2843, 3281, -8373, -6194, 4057, 4822, 576, -8286, 510, 2552, -5616, -12677, 767, 2813, -1801, -5208, 1082, 2042, -2035, -4517, 3339, 3798, -889, -8080, 326, 2173, 4882, -11321, 2441, 3418, -622, -18597, 1911, 3318, -6678, -10259, 852, 1478, -2103, -379, -1178, 277, 1786, 113, 879, 2625, 7184, -8625, 1223, 3608, 4960, -5827, 1886, 3530, -12475, 3627, 702, 3334, -7625, -5270, -5625, 2651, 3250, -9542, -366, 6355, -1243, -13598, 4139, 7809, -822, -10104, 2883, 3331, 5594, -1474, -128, 1257, -1820, -2205, -2542, 373, 13044, 6468, 6343, 8318, 1204, -7335, 4500, 8193, -13124, -11936, 3298, 5555, -342, -3112, -90, 2307, -2868, -3749, 826, 3260, 5792, -2394, -97, 2639, 11111, 2420, 4438, 5062, -5945, -4469, 3663, 4058, -10119, -1407, 2783, 4575, 2688, -2749, 43, 4342, 1262, -8471, -204, 4777, 11373, -14359, 6830, 9469, -4862, -17268, 7903, 10709, -5071, -9141, 2779, 7992, 4136, -8683, 1982, 5745, 3640, -17526, 3806, 7602, -6592, -12220, 3285, 7302, -7702, -917, -1232, 4005, 6706, 12673, 5880, 8227, -6351, 2954, 6734, 7496, -5560, -9405, 2975, 5292, -3131, -3591, 3938, 5125, 3641, -2485, 2289, 3752, 3640, -1092, 747, 1876, -3893, 1203, 2261, 2323, -3295, 4859, 1395, 2429, -740, -735, 3812, 3906, 454, -3510, 4776, 5874, 1806, -4892, 3477, 3673, 492, -2192, 2693, 3968, -2828, -4220, 1833, 3067, -489, -4705, 2270, 3970, 9381, -9861, 4173, 5550, -9726, -9079, 2018, 4830, -7995, -3436, -4197, 2791, 5435, 438, -1627, 5179, 368, -546, 2130, 5360, -1690, -281, 3702, 3267, 2633, -4081, 1226, 1882, 1217, -6468, -703, 2086, 11779, -10190, 4693, 6814, -5353, -12095, 5419, 8825, -10035, -4111, 3501, 5004, -1586, 414, -109, 1088, 3441, 5265, 86, 2640, 842, -711, -180, 2133, 2772, -9693, 5453, 6814, -8837, -15251, 5110, 7017, -991, -4350, 1294, 4631, 1157, -2364, -2106, 2706, 121, -2240, -1010, 4200, 7133, -6820, 5723, 7160, -1084, -11868, 8275, 8845, 2110, -6597, 3187, 6324, 4061, -5750, 3637, 8717, -1637, -7850, 4876, 9662, 2164, -7566, 2140, 7506, 2644, -2030, 128, 4989, 6040, 7799, 7479, 10772, -11153, 5030, 9351, 10765, -5390, 2476, 859, 4302, 3566, 2811, 2609, 3434, -837, 563, 896, 1832, 2144, -1807, 666, 397, 4280, -4530, -886, -717, -5238, -860, 1088, 1244, -3800, 829, 4646, 3845, -512, 2039, 2660, 3104, -2214, 2893, 1730, 2614, 328, 591, 1356, 2893, 5041, 12981, 6231, 9317, 1713, 8601, 6319, 7898, 7327, -1358, 6815, 8918, -5551, -1817, 3451, 8428, -9715, 314, -3120, 4292, 1322, -2405, -3493, 3694, 1709, -1846, 2254, 6917, -1753, 1028, 3750, 5494, 1350, 3804, -41, 1884, 3719, -4474, -193, 2305, 4808, -10764, 4274, 6455, -199, -13781, 5220, 8171, 17, 2201, 4264, 5815, -972, 4371, 3126, 4590, 4129, 266, -1215, 876, -6258, -5797, -1118, -337, 70, -7899, 3253, 2986, -5013, -4642, 2996, 3199, 792, -2556, 724, 2485, 5660, -4429, -3906, -203, 4096, 580, -899, 2830, 3809, 2440, 6721, 6699, -6354, 239, 8017, 7534, 1549, -665, 2384, 4522, 2272, -7747, 3026, 6653, 1963, -3931, 4695, 9476, 3741, 210, 2661, 8129, 6121, 618, 5245, 9008, 4087, -5389, 8164, 11447, -10874, -4864, 8888, 11024, -4917, -4074, 528, 4829, 388, -2719, 2149, 3391, 1105, -6551, 2377, 3504, 877, -4049, 2800, 2369, -2995, -3045, 1420, 3055, 406, -6339, 4317, 6296, -743, -1830, 5792, 6852, 771, -1574, 3805, 4722, -78, 174, 3264, 5513, 8515, 1365, 4100, 6770, 4053, 9145, 6553, 10470, -8641, 6544, 7381, 9655, 2264, 42, 5553, 10413, -5864, -2275, 2746, 11700, -7330, 3354, -2887, 7287, 1399, 2913, -4274, 2786, -461, 2847, -515, 5014, 4362, 1386, 351, 3081, 192, -2095, -2585, 381, -4921, -1882, -12, 1781, 3008, -5998, 3787, 4509, 1868, -6356, 3956, 4557, 4242, -4033, 6051, 6832, -3299, -4818, 5908, 6651, 294, -3290, 1806, 3727, 3291, 1494, 2655, 3604, 3136, 9935, 8268, 8180, -7856, 9488, 8653, 8495, -3949, 3895, 1519, 1727, 3758, -2202, 1617, 3538, 983, -7155, 2074, 3708, 4634, -9116, 6112, 6132, -3926, -4378, 7451, 8369, 3850, 5842, 2484, 6135, -318, 3751, 3325, 7945, 2698, -210, 2978, 8689, -721, -6159, 2387, 7286, 8551, -9122, 4205, 7368, 1780, -13878, 8067, 10947, -11048, -11098, 8207, 10918, -3822, -4019, 1381, 4876, -398, -3270, 2787, 5047, -357, -4709, 1830, 3003, 2110, -5546, 5258, 4888, -4497, -3741, 2608, 4396, 5559, 2521, 3257, 4857, -3708, 788, 3333, 5211, 4808, -3782, 3256, 4336, -103, -2368, 1984, 5931, 7401, -1203, 4008, 7299, 4054, -6143, 6222, 10675, -7392, -3362, 7268, 9351, 1497, -5488, 3938, 8915, -1739, -3300, 1683, 11670, -7035, 1269, -2530, 9657, 4703, -177, -3989, 4284, -1359, -3061, -1652, 6308, 4458, 1515, 1265, 7536, -3864, -932, 1376, 7973, -1593, -1498, 1899, 5881, 439, -1786, 3108, 4758, -1462, -3261, 1875, 2206, 2428, -7168, 4111, 4452, 357, -6025, 4821, 4635, 748, -5814, 2694, 3022, 8193, -1671, 2989, 3648, 4713, -4704, 7254, 6907, -6363, -3191, 8378, 8197, -6337, -4040, 2618, 2651, -1667, -2716, 1501, 2500, -409, -4553, 2127, 3220, 2357, -5227, 1864, 3591, 1841, -3313, 3110, 4373, 1472, -3537, 2593, 6072, -4008, -4975, 3779, 8933, 1760, -4814, 2186, 9368, -1480, 3249, 3203, 8914, 4901, 865, 3033, 7571, 2002, -9019, 6706, 10207, -3245, -5853, 4659, 7384, -3347, -791, -13, 3436, -3346, -102, 1627, 4604, 1790, -2558, 1197, 3690, 3375, -1711, 4903, 5559, -2961, -2346, 1719, 4195, 2377, -5544, 1041, 2621, -4806, -7863, 1355, 4068, -121, -66, 2655, 4390, 6061, -1743, 1943, 4407, 3627, -3263, 3425, 5871, 3030, -9520, 6169, 10609, -5208, -6745, 6533, 9993, -841, -7215, 4760, 8776, 875, -10386, 1355, 11307, -5223, -7959, -2896, 10656, 3908, 6811, -1204, 8099, -3721, 1804, 505, 10045, 5322, -1519, 1032, 8708, -6451, -2797, 1661, 7851, -87, -45, 575, 4299, -542, -1005, 601, 3499, -1285, 2803, 2782, 3615, 1750, 464, 2484, 2328, 3971, -1479, 2687, 2111, 3907, -1065, 2456, 2808, -1002, -4927, 2209, 4193, 4039, -11212, 5042, 6339, -913, -10849, 5570, 6566, -3483, 554, 2888, 3898, -3850, 1097, -1180, -817, 308, 4224, 172, -199, 848, 623, -1606, -457, 4271, 1763, -991, -320, 756, -3273, 587, 3659, -123, -4995, 1697, 7451, 4123, -3685, 712, 8092, -813, -3608, 2852, 8618, 6335, 2141, 4496, 9135, -3376, 2514, 7005, 11173, -5781, -744, 3939, 7943, 903, -832, -329, 3388, -3981, -4240, -332, 2650, 1752, -4063, 1062, 2381, 5217, 639, 1453, 896, -6427, -1692, -877, 1011, -1712, -1584, 2243, 3199, 2644, 1470, 2097, 4207, -626, 1012, 1674, 3602, -2093, -1826, 2724, 4497, 3685, -7015, 6014, 7158, 2229, -9276, 6174, 9088, -1209, -5152, 4539, 6479, -3915, -3612, 5125, 6264, -1074, -7915, 1329, 7204, -2522, -7988, -4391, 6775, 3633, -1589, -1160, 7741, -7324, -2188, 635, 11168, -1110, -4586, 635, 9109, 343, -4684, 523, 6087, -2423, 784, -503, 2759, 1597, -2499, -345, 2280, -1211, -2730, 3186, 3895, 412, -2481, 3016, 2929, 3783, 712, 5583, 5443, 615, 3779, 2850, 4443, -2090, 1341, -522, 2580, 2974, -567, 780, 2801, 3889, 746, -55, 840, -562, -67, 843, 1991, 2948, 2260, -1260, -972, -408, 3989, -1250, -768, -3729, -1070, -522, 838, 6003, 4318, -579, 1230, -1312, 8103, 2444, 6335, -4865, -438, 2081, 7490, -2, -5128, 440, 7083, 2131, -6164, 1321, 6638, 6704, -7520, 5178, 9875, -3685, -5880, 6457, 12813, -3268, 707, 4275, 10112, -134, 7714, 1826, 7796, -3916, -3062, 815, 4044, 933, -4038, 2616, 2582, 3772, -4699, 723, 580, -2614, -4831, -650, 1130, -190, -2551, 1992, 2789, 2178, -3247, 1525, 4177, 1459, -432, 2545, 5869, 2843, 4536, 5858, 9058, -6815, 856, 7514, 8361, 989, -7483, 2196, 5191, 6495, 5021, 6363, 9159, -4029, 8660, 8085, 9838, -6718, 4224, 3521, 8181, -4800, -631, -5055, 4412, 2355, -7963, -1706, 6669, -4621, -8775, 692, 11794, -3978, -4710, -706, 7392, 6283, -2984, 569, 3608, -2372, -6056, -117, 1097, -32, -3198, 478, 1576, 1004, -1175, 2085, 2826, 1558, 49, 1865, 2793, 4669, 571, 5051, 5989, -1187, -1585, 3860, 5725, -5597, -3427, 1056, 3552, 204, -5728, 2336, 4524, 2620, -7314, -1655, 140, -1441, -5922, -499, 1310, -2619, -6366, 945, 995, -1517, -5521, 1080, 1269, -2182, -1385, 2291, 1993, 12885, 1979, 4502, 5578, -2792, 2589, 4053, 7712, -9249, -2066, 1982, 6968, -2317, -1941, -608, 5089, 1625, 704, 151, 5916, 5014, -6326, 3480, 8573, -971, -7418, 4292, 11346, 1036, -1287, 4223, 10290, -1609, 4066, 1073, 7972, -5089, 2414, 903, 5548, -1, -2094, 2349, 2925, 821, -5645, 3887, 3427, 43, -4639, 1967, 2672, 2399, -1839, 2355, 3723, 342, -1825, 2028, 6119, 1270, -4485, 1556, 7196, 1827, -5993, 5111, 11070, -3593, -6166, 4665, 7928, 7388, 706, 1582, 4980, 5413, -1079, 7347, 9446, -4318, -453, 8992, 11453, -7245, 5907, 4456, 9326, -4690, 4262, -4971, 4250, 1155, -3002, -3768, 3413, 1190, -7590, -1238, 7247, -1778, -3354, -2275, 4426, 3186, 1050, 155, 1725, -2712, 4438, 3059, 4053, -24, -3108, 959, 1635, 2932, -1627, 1707, 1937, 6838, 992, 2583, 2696, 2287, -616, 5016, 6017, -5719, -3769, 7339, 8427, -1497, -1760, 2487, 4430, 1326, -6936, 3009, 3833, 235, -7950, 2753, 3476, -1168, -3031, 688, 2838, -2805, 2454, 4506, 6248, -2197, -1261, 4710, 6393, 972, -2911, 3264, 4316, 8421, -8875, 5595, 6310, -2332, -13562, 4301, 6900, -2977, -5750, 805, 4909, -277, -3651, 173, 4281, -2218, -3838, 662, 4680, 2410, -6820, 1730, 5870, 955, -7928, 2760, 7927, 2196, -4748, 3383, 9051, -1178, -5176, 1247, 8434, -3425, -1186, 233, 6976, -4995, 2498, 1457, 3426, -496, -368, 3385, 3878, -346, -1986, 3784, 4426, 532, -3638, 4354, 5726, -187, -4154, 1005, 5973, 737, -6158, -96, 6841, -2681, -8804, 2981, 9296, -238, -1626, 1690, 7148, 8045, -1206, 188, 5250, 4357, -7447, 4073, 8288, 443, -7358, 7129, 10915, -4663, -3051, 1859, 9870, -8393, -1589, -3843, 7630, 2517, 311, -6206, 367, -2737, -3761, -5550, -547, 10179, 3022, -5125, -1451, 993, -554, -2193, -2151, -4304, -3394, 1344, 2595, -853, 542, 1901, 3179, -2131, -4294, 1136, 2660, 3871, -7941, 3382, 4282, 2188, -11320, 5752, 7182, -3510, -4404, 6462, 8012, -1380, -2372, -110, 2552, 2643, -3811, -72, 941, 1897, -5455, 1100, 353, -1657, -4472, -2322, 603, 1533, -1562, -629, 4178, -945, 1161, 3128, 6732, -1064, 260, 2159, 4409, 1995, -1730, 2565, 4038, 3868, -4899, 1334, 3790, -1513, -4386, -1465, 2195, 868, -1180, -51, 3426, -1437, -5003, 1068, 3760, 2108, -5104, 254, 2927, 2490, -5695, 1512, 4686, 1409, -5572, 816, 5972, 2466, -5182, -1522, 4229, -1548, -4052, -1276, 5780, -2092, 395, 2508, 6595, 2775, 12512, 4737, 8233, -7260, 10454, 2888, 6038, -1243, 7526, 1269, 4974, 381, -2704, -890, 4614, 1985, -9885, -2054, 4945, -815, -6281, -368, 4340, -970, -4175, -1214, 4207, 3497, -3202, -2325, 3977, 2439, -9864, 896, 5560, 3918, -6327, 2193, 6991, -1625, -10155, -867, 8963, -7242, -6041, -4262, 7019, 1559, 857, -5619, -285, -2211, 4792, -3924, -1327, 5804, 400, -2633, 340, -3791, -774, -623, 408, -5752, -3504, -59, 1500, 763, 1380, 44, 2324, -2395, 385, 533, 1813, 4527, 666, 1195, 2266, 1923, -4021, 5247, 5744, -4448, -3946, 4609, 6287, -2370, 206, -1235, 1642, 1276, -1731, -1072, 880, -1724, 91, 1996, 1749, 485, 744, -1486, 1389, 303, 3517, -3840, 1500, -334, -898, 1614, 5941, 1073, 163, 2382, 4838, -901, -484, 2167, 4214, -713, -2406, 544, 3296, -2715, 352, -369, 3088, -255, 426, 62, 3310, -2153, -154, 1357, 3602, -2303, -768, 502, 1948, 817, -517, 505, 3083, 484, -2001, 430, 4980, 3047, -2854, -934, 4467, 1802, -3242, -149, 5781, 701, 188, 2409, 6622, 1961, -3271, 3241, 8322, -2745, 88, 2259, 6316, -3134, 2454, -1352, 3453, -4944, 845, -882, 3526, 3928, -584, -1104, 3270, -7104, 1517, 404, 3120, -4597, 1428, -1752, 2229, 1177, -80, -3290, 3706, -122, -3392, 80, 5776, 1281, -5333, -739, 4949, 21, -9454, -1042, 7231, -2365, -4503, -3231, 5909, 2448, 2887, -4877, -1200, 2845, 3365, -2723, 89, 286, 4619, 109, 1279, -173, 5729, 198, 567, 461, 4158, -1313, -658, 182, 2507, -3227, -2325, 3080, 3406, -3151, -2719, 3277, 4060, -1783, -1434, -1777, 3443, -337, -376, 5520, 2276, -643, -1536, 138, 1294, -995, -2960, -1626, 1902, -1961, -3548, 1937, 3793, -2644, -3223, -1524, 3992, -4544, -2603, 2352, 6021, -3737, -1508, 2313, 3825, -3255, -1233, -193, 4454, -3349, -1499, 1119, 3974, -4252, -2882, 1250, 5129, -3839, -3177, -1111, 5108, -4178, -2375, 3611, -2002, -6146, -1366, 4039, -1177, -2958, 102, 1680, -1563, 10, 1618, 4802, -3210, 186, 1431, 237, -940, -1812, -302, 8, 2728, -3042, -3454, 2262, -1402, -2357, -4034, 1796, -4235, -164, -1400, -1704, -2142, 1392, 1714, 2528, -1504, 2345, 2655, 3019, -136, 802, 750, -3429, 470, -404, -94, 4365, -2924, -1960, -1122, -2137, -2828, -4291, -1317, 3934, 599, -1608, 1633, -4400, 1754, -73, 4340, 2532, 9750, 1221, 6584, -3797, 3375, -1619, 3616, 3986, 1461, -3116, -347, -4090, 1930, -5779, -1830, 3549, 1315, -6224, -1517, 160, 3336, -689, 446, 1489, 3204, 1689, 857, 778, 2240, 2890, 1761, 1002, 8304, 533, 2316, 2930, 4956, -192, 1326, -6389, 3040, 854, 555, 821, -1393, 1742, 1113, 949, -2189, 1567, 2026, 770, -1290, 1416, 954, -2122, -391, 43, -354, -2703, -1519, -607, 80, 657, -1510, -744, -339, -1271, -356, -1610, -971, 5522, -4887, -80, 1970, 1374, -883, 143, 3885, 7739, 5320, 4097, 7876, -12120, 5435, 5312, 8147, 8745, -211, -2270, 2210, -1160, 6588, -7556, -1184, 779, -137, -8005, -3217, -16, -2683, -2380, -2481, 4845, 3808, 3593, 1709, -2234, 1381, 5747, 1003, -1044, -4507, 212, -545, 649, -3631, -846, 413, -3881, -1691, 842, 461, 92, 904, 1353, 375, 2834, 1012, 673, 1477, 4932, 794, 1096, 1195, -1553, 811, 804, 148, -2704, -1634, -1195, -574, 414, -1353, -91, -74, 1295, 480, 16, -226, 280, 470, 1326, 1892, 5715, -5876, 786, 2978, 6404, -12960, 4763, 7389, -8757, -10066, 5018, 7064, 4402, -6332, -1545, 3378, -2025, -12050, -6935, -175, 666, 253, -8325, -1582, 5930, -1882, -2241, -945, 6779, -2195, 2449, 1478, -3666, -2801, 6303, 1433, -4264, -1912, 2439, 106, -1428, -50, -472, -1276, -1143, -63, 726, -1872, -1687, 531, 509, -1792, -2020, -109, -1960, -1485, 1212, -2483, -1666, -2424, -434, -4484, -1177, -2097, 1107, -1284, -2055, -899, 1893, -325, -493, -576, 3174, -639, 529, -294, 4793, 1282, 2064, 482, -2238, 2132, 1566, 230, 3949, -8582, 1746, 2802, -471, -7423, 461, 2053, 2540, 1286, -1081, 1208, -6239, -2138, -3195, 906, 349, -2071, -8298, -214, 2972, -2815, -3458, -950, 3784, -9393, 116, 67, 2115, -6527, 2376, 614, 561, -4008, -1724, -1621, -765, -1923, -3365, -2177, 2169, -1202, -2176, -3820, -1033, 120, -1774, -3537, -3022, -2243, -4430, -3937, 792, 26, -3098, -4163, 304, 1756, -1819, -2552, 2474, 1375, -3825, -1711, 3128, 3464, -1881, -1554, 3011, -167, -1364, -1887, 2841, -6564, -206, -2711, 267, -4895, -1088, -2661, -83, 2263, -2340, -1027, 2259, -613, -3176, -900, 3129, -4316, -2858, -1110, -7138, -2991, -3670, -1179, -776, 2355, -7162, 924, 1327, 3610, -5555, -1736, 2458, 5802, -3143, -2272, 3042, 2848, -2871, -1703, -2306, 1060, -5115, -2774, -1278, 2064, -6158, -3375, -330, 2681, -5899, -4484, -388, 2566, -5764, -4618, -1094, 4891, -4654, -2976, 1645, 5196, -3515, -2872, -1382, 4970, -3428, -2481, 1658, 6218, -4536, -1800, 659, 3003, -4614, -2438, 1712, 3212, -5267, -2241, 936, 4586, -3463, -3189, 172, 4994, -4712, -3446, -596, 1910, -6495, -2121, -202, 1919, -5288, -1029, -176, 365, -3952, -1197, -3650, -246, -4829, -2064, 1073, 7349, -7309, 109, 2456, 8535, -7561, -3293, 269, 8183, -8033, -7130, -3381, 14493, -6158, -5187, -418, 11523, -8544, -5799, -1293, 7610, -8173, -6050, 852, 9656, -7664, -6149, 20, 9164, -8758, -6972, 2919, 10886, -8199, -7002, -3616, 8610, -7023, -6436, -1287, 9510, -6579, -6854, -161, 8151, -8213, -7851, -1366, 7324, -7358, -7168, 658, 12636, -8321, -6233, 508, 10132, -7347, -6295, 838, 7660, -8406, -7088, -3521, 7281, -7736, -4661, 1175, 1907, -7051, -2798, 1506, 11902, -5553, -3066, -2496, 7539, -5942, -2251, 3237, 5575, -8431, -2097, -12971, 2514, -8177, -3417, 11363, -2239, -8107, -5479, -2553, -1618, -9436, -7551, 1295, -2338, -9839, -6037, 8962, 3788, -9919, -7248, -4923, 5672, -10908, -8620, 5477, 1134, -11389, -7903, 1658, 13075, -7012, -4628, -6687, 5395, -10005, -6576, -1392, 9891, -9264, -7860, 7074, 2596, -9323, -7727, -2355, 8762, -8109, -8240, 1961, -964, -12341, -10458, 4505, 345, -10649, -8851, 2975, 1473, -10781, -9443, -4588, 2333, -11589, -9983, 4294, 589, -7737, -5707, 2889, 2561, -10280, -7846, -6695, 2252, -9016, -3984, 2638, -11172, -8190, -3104, -9097, -6023, -7289, -2919, 12282, 786, -6656, -4139, -4936, -17, -8284, -6722, 119, -1813, -6174, -3731, 8072, -448, -9117, -7167, -6871, -7418, -10791, -8811, 11584, -3397, -6986, -3697, 2183, -5339, -6513, -3971, -8894, -1997, -6944, -3492, -2577, -2740, -10099, -7273, 4536, 6381, -5420, -2567, -3477, -3305, -7234, -6109, 1497, -5058, -8297, -6418, -303, -4142, -8785, -6810, 1064, -5459, -7845, -6347, -1216, -7645, -8071, -6781, 1781, -253, -5500, -4593, 5950, -4432, -6901, -3662, -9358, -1549, -8128, -2897, 4268, 2791, -4490, 1893, -3176, 4600, -4356, 998, 10005, -5815, -7468, -4692, -5176, -9889, -8111, -6628, -2103, 764, -5136, -4941, 6211, -4811, -8221, -7105, -5787, -5175, -6373, -5404, 2167, -873, -4809, -2878, -1109, -8632, -4188, -1874, 256, -5730, -5903, -1507, -955, -5013, -6059, -928, 9294, 4026, -1951, 1798, -11035, 3797, -1379, 1737, -3529, -602, -5764, -3347, -1865, -3543, -8169, -5385, 135, -1098, -4797, -2677, 3825, 1375, -4417, -1200, 11639, 13886, 2407, 4291, -1185, 16290, 3822, 7831, -10991, 6103, -1596, 4662, 6070, 670, -5722, 2980, -2926, -1550, -4286, 3522, 969, -2730, -4696, -1038, 4322, -4644, -4910, -2908, -3772, -3176, -4412, -4239, 7389, -77, -6393, -5444, -6693, 2146, -4643, -4494, 4501, -3439, -4068, -3138, 2868, -3965, -3853, -2084, -4231, -432, -4462, 326, 910, -2576, -3347, 2399, 6438, -13032, -2309, 2767, -10202, -12024, -1169, 3512, -1309, -1507, -4327, -1127, -2842, 1247, -5432, -2154, -3112, -2104, -4062, -1048, 6868, -3536, -2836, 624, 14328, -3259, 4289, 6130, -2133, -3698, 5070, 8088, -13599, -3690, 1094, 6442, 2757, 579, -7553, 2719, -2572, -6588, -5485, 3585, -1563, -4594, -4172, -642, 4315, -363, -2479, -1537, -327, 7667, -924, 3, 2283, -776, -3971, -2935, -975, -2563, -3092, -2914, 2493, 431, -1353, -1702, 5053, 629, -2322, -1694, -4615, -2799, -3095, 238, 7817, -2529, -1727, 3233, 3507, -734, -1495, 4803, -11339, 1843, -517, 5026, -440, -696, -4642, -1365, -1730, -2669, -4659, -1638, -1162, 926, -2240, 227, 3947, 2516, -399, 2385, 6349, -12509, 2622, 4325, -1579, -14718, 4718, 8736, -9170, -5510, 195, 5779, 3392, -7906, -7737, 1661, -1945, -5517, -4844, 1770, -2369, 2204, -2315, -1223, 8582, -4068, -496, -860, 965, -3651, -1947, -1376, -5418, -3229, -1165, -1054, -1020, -5231, -2448, -2638, 5119, -2416, -345, -1067, 3350, -6405, -1957, -2953, -6348, -5833, -4031, -2620, 3782, -8154, -795, 2485, 3394, -12540, -1832, 3448, -6784, -7342, -2150, 3876, -4783, -2099, -4245, -747, 727, -1724, -2683, -1508, 2241, -3717, -1248, 485, 4280, -2924, -1360, 861, -2670, -2129, 136, 1075, 2479, -2215, -747, 3104, -10950, 1755, -2269, 3700, 961, -5204, -4911, 821, 4530, -3825, -4516, -1133, -775, -2754, -2952, -2512, 1910, -2181, -443, -947, -217, -7522, -1779, -1044, -157, -2298, -1279, -791, -1972, -846, -2335, -2668, 5157, -2543, -1156, -794, -2516, -1291, -1021, -1279, -2505, -4162, -3405, -2239, -993, -1329, -1815, -994, 2621, -6764, -1174, 828, 517, -7229, -2549, 1826, -1323, -44, -2992, -77, -1245, 2924, -2564, -2439, 57, 611, -1261, -1156, 869, -4872, -1496, -389, -1218, -4147, -372, 927, 2395, -9358, -1184, 3118, -6706, -5481, -2960, 2594, -699, 841, -4982, -3323, 22, 1468, -4628, -3337, 494, 2464, -3642, -3755, -617, 3244, -4219, -4040, -2756, 3545, -4486, -4423, -271, 1681, -5431, -4971, -21, 953, -5033, -5149, -199, 1824, -4679, -5263, 498, 2880, -4642, -5195, 1117, 2994, -4346, -5776, -351, 3401, -4243, -6218, -1883, 2834, -4600, -6438, -643, 2356, -5226, -6189, 266, 2736, -5966, -5942, 729, 3701, -6271, -5080, -332, 3810, -5334, -3838, 606, 3515, -5432, -3952, -1627, 3522, -5310, -4644, 299, 3948, -5507, -5318, -1856, 2793, -5584, -4047, -1450, -663, -6370, -4738, 718, -1344, -5645, -4514, 3248, -1837, -4605, -4474, 916, 87, -5644, -4786, -3089, 3208, -6410, -5430, -2267, 4152, -6698, -5622, 780, 589, -6506, -6297, 2016, -176, -5802, -6660, 1531, 337, -6083, -6685, 1545, 914, -5939, -7306, -307, -105, -5944, -7751, -1368, -266, -6226, -7546, 1258, -701, -6519, -7084, 4828, -378, -7294, -6520, 2688, 1512, -7325, -5202, 300, 5028, -5907, -2350, 3032, 12791, -4011, 101, -4245, 9691, -4706, -1345, 3027, 3886, -8775, -4844, -4184, 3864, -8719, -4373, -1492, 1397, -6496, -4811, 1227, 3816, -5517, -5152, 3543, 4807, -4052, -4508, 5581, 4146, -5550, -4549, 79, 4734, -6571, -5202, -1285, 3745, -6786, -5267, -4905, 1653, -5760, -5234, 2854, -1463, -5313, -5280, 1186, -1343, -6298, -5473, 976, -1265, -6499, -6286, -326, -2122, -5899, -6101, -510, -2910, -6089, -5763, 1928, -1553, -6080, -5068, 5088, -1336, -6477, -4216, 4033, -1790, -5828, -2873, 10968, 2442, -4156, -321, 2826, 4430, -3502, 206, -7191, 3624, -3545, -86, 4756, 2750, -8958, -3066, -3537, 2729, -10863, -4408, -1117, 481, -7587, -4935, 3604, 1788, -6021, -5235, 3040, 3559, -4399, -4878, 1850, 1313, -5074, -4649, 628, -2619, -6266, -4792, -2198, -3685, -6644, -4525, -4228, -2518, -5902, -4639, 2140, -373, -5777, -4271, 1435, -742, -7304, -4716, -394, -637, -6965, -5128, 294, -507, -6362, -5111, 1149, -358, -6187, -4578, 1756, 1040, -5531, -3832, 2810, 620, -5472, -3533, 4232, -572, -4704, -2471, 9350, -5908, -4331, -770, 3122, -6586, -3174, 329, -7683, -6306, -3838, 44, 4215, -5333, -8430, -2235, -3287, -5594, -10705, -3872, -34, -296, -7933, -4035, 6118, -907, -6587, -4354, 2562, -978, -4890, -4735, -1802, -1694, -4767, -4695, -1473, -1086, -5270, -4685, -1434, -120, -6230, -4652, -2122, 1041, -5751, -5122, 1070, 1725, -6266, -4948, -445, 941, -7373, -4597, -5, -972, -6747, -4284, 1061, -1339, -6375, -4507, -155, 878, -6243, -3979, 1036, 1233, -5476, -3263, 2298, 807, -5484, -3266, 2136, -10, -4926, -3184, 970, -2153, -4361, -1781, 2732, -9559, -3507, 1026, -1762, -7748, -4277, 309, 1662, -3784, -7384, -1963, -5080, -2361, -8188, -1862, -267, -846, -8292, -3305, 3318, -2512, -7539, -3782, 2179, -4324, -5409, -4261, -1086, -3001, -5595, -4575, -667, -1094, -6424, -5281, -1769, -139, -6673, -5179, -1522, 59, -6369, -5275, 123, -628, -6937, -5284, -1204, -328, -7448, -4656, -175, 1062, -6541, -4278, 233, 1893, -6053, -3796, 2233, 831, -6501, -3425, 1206, 601, -5749, -3546, 2094, -1383, -6001, -3712, 833, -2384, -5168, -3740, -1140, -1522, -5183, -3411, -1087, -341, -5255, -1764, 2476, -481, -6317, -1730, -831, -1594, -7618, -2535, -5434, -1002, -8003, -2558, -2103, 1739, -8441, -3317, -1998, 3054, -8056, -3679, 1039, 999, -6676, -4383, -607, -5, -6776, -4549, -964, -451, -7070, -4275, -2465, -327, -7145, -4501, -2032, 399, -7277, -5159, -695, 504, -7389, -5050, -885, 2101, -7538, -4559, -2018, 2845, -6821, -4488, -526, 983, -7291, -4476, 803, 195, -7165, -3893, -347, -152, -6630, -3884, -831, -1340, -6726, -3738, 457, -1840, -6397, -4026, -76, -918, -6980, -4464, -917, -589, -7721, -4180, 1066, -528, -7684, -3561, -1459, -1296, -7889, -3206, -2235, -330, -8099, -2943, 222, 4942, -9692, -4251, -4134, 5482, -10356, -5007, 2906, 6353, -8865, -6538, -4560, 7251, -8516, -7049, -1121, 5086, -8586, -5862, -1030, 4252, -8362, -5804, -1051, 4186, -8941, -6591, 684, 3841, -8861, -6470, 815, 5531, -8732, -6708, -3989, 3855, -8677, -6265, -410, 2287, -8512, -5682, 473, 2166, -7868, -5721, -839, 2062, -7516, -5972, -400, 3788, -7143, -6457, -680, 4363, -6931, -6036, -239, 2756, -8199, -6264, -2852, 2341, -8364, -5263, 2910, 1520, -8390, -5309, -846, 4479, -8588, -5113, -1737, 2982, -8330, -4185, 1335, 3952, -12784, -6788, -7894, 4220, -12966, -6696, 5475, 2438, -10594, -7278, -4098, 2703, -10194, -8044, -2432, 1810, -9669, -6436, 2344, 2532, -9958, -7134, -2310, 3433, -10258, -7518, 5422, 4008, -10643, -7098, -66, 7403, -11223, -8467, -7773, 6282, -10967, -7726, -2043, 5248, -9517, -7124, 3989, 5196, -8436, -7085, -4125, 5810, -8369, -7755, 365, 4218, -8876, -8104, -697, 3559, -8393, -7772, -2021, 2973, -9116, -8129, -3191, 2838, -9630, -7867, 3150, 1883, -9173, -6637, 121, 3788, -10216, -6931, -5166, 3019, -9377, -5330, 1685, -5478, -12801, -6441, -7151, -4651, -12636, -6350, 4957, 788, -10995, -7719, -4049, 782, -10671, -8441, -3777, -22, -9623, -6699, 3641, -324, -10043, -7463, -1858, -229, -10678, -7695, 6476, -1301, -10894, -7476, -269, -2652, -12109, -9180, -8688, -1414, -11903, -8649, -446, 1096, -10243, -7373, 4920, 10128, -7875, -6455, -5207, 9149, -7824, -6635, -1742, 768, -8863, -7374, -762, -1950, -8830, -7528, -621, -2453, -8933, -7827, -1809, -278, -9116, -7155, 4451, 4242, -7601, -5649, 1703, 6824, -7458, -4208, -4467, 3215, -8273, -4525, 2546, 899, -9989, -2879, -3094, 1791, -10445, -3743, 4427, -2898, -10108, -6511, -2360, -3411, -10087, -7653, -2993, -1211, -9331, -6913, 3922, 643, -9807, -7442, -3026, 393, -9214, -7212, 3235, -1136, -9282, -7187, -220, -2675, -9249, -7053, -3221, -2426, -9482, -6277, 4712, 1001, -8548, -5049, 5398, 2771, -10365, -6760, -8203, 3123, -9929, -6892, -8133, 949, -7455, -5328, 121, -1470, -8173, -5895, 886, -473, -7145, -5357, 3596, 1318, -7408, -3953, 10064, 10285, -3925, -1224, -1974, 11034, -4022, -807, -9961, 6755, -4033, -1172, 3556, -701, -10142, -2391, -3212, -1328, -10444, -3628, 75, 440, -8398, -4749, 1440, 208, -8053, -5826, -2321, 1717, -8645, -6176, 1754, -102, -9558, -6813, -2803, 511, -8656, -6667, 2385, -2508, -8196, -6403, 432, -1930, -8250, -6332, -9, -36, -8535, -5553, 3647, -1959, -8396, -4612, 4983, -8854, -10324, -6142, -8010, -9122, -9654, -5550, -4989, -3358, -7494, -4378, -97, -1174, -7216, -4341, 2828, -1039, -6575, -3939, 7589, -2467, -6620, -3349, 10741, -2002, -3997, -1190, -2645, -2310, -3899, -1025, -13138, -2271, -3167, -496, 1926, -301, -11029, -2116, -3460, -1868, -10786, -2551, -1688, -195, -7666, -3620, 4863, 1771, -6717, -4804, -667, 4485, -7365, -5754, -2193, 2364, -7916, -5091, -933, -442, -7090, -5022, 1687, 1257, -6136, -4538, 1472, 195, -7073, -5118, -1294, -289, -7629, -4807, 4502, -1188, -6881, -3652, 2934, -901, -7699, -3543, -6424, -989, -7112, -2424, -2904, -908, -6853, -2847, 672, -311, -6635, -3195, 2396, 351, -6474, -3112, 5246, -1506, -6782, -2760, 8962, -11731, -4328, -837, -2053, -13998, -4117, -407, -10722, -7605, -4592, -433, 975, -2458, -10564, -2731, -4325, -1740, -9572, -2209, -2772, 577, -6479, -3273, 7108, -1460, -6257, -4109, 114, -1640, -7127, -5324, -6258, -1450, -6818, -3991, 962, -2392, -6107, -3959, 3022, -1267, -5404, -4171, -2169, -1703, -5778, -4494, -3554, -3433, -6514, -4187, 4785, -5081, -6084, -3294, 3562, -7523, -7237, -3391, -5717, -5134, -6848, -3175, -6516, -793, -5835, -2661, 570, -358, -5796, -3461, 2094, -1434, -6056, -3367, 3833, -1008, -5679, -2876, 3353, -2783, -4798, -1566, 1923, -4431, -6013, -807, -8444, -1603, -6574, -1817, -401, -1673, -6416, -2419, -1397, -2427, -6354, -2820, -2149, -840, -4774, -3636, 2761, -1517, -4112, -3576, -961, -3383, -4690, -4007, -4557, -1758, -4694, -3778, -361, -209, -4198, -3966, 1938, -1885, -4613, -4443, -2753, -1693, -4296, -3942, -2322, -910, -4208, -3423, 1255, -1436, -3901, -3202, 1695, -3962, -4415, -2934, -2300, -2891, -4349, -2900, -4153, 810, -4154, -3452, -1076, 2472, -3633, -3478, 1283, 1502, -3826, -3328, 1202, -765, -3668, -3037, 1044, -1446, -3749, -2585, 2688, -4508, -5445, -2330, -4990, -2491, -5207, -2022}; +#else + const Q15_T expected[OUTPUT_SIZE] = {7879, -9373, 9900, -11697, 10509, -11402, 10358, -10744, 10426, -10824, 10712, -11708, 10537, -11765, 10706, -12647, 10405, -13250, 10083, -13849, 9003, -13299, 8666, -13662, 8503, -13297, 8756, -13199, 8917, -12594, 8803, -11935, 7912, -10898, 7130, -11024, 6373, -11578, 6272, -11800, 6920, -10454, 7186, -9883, 7515, -11955, 7378, -13112, 7834, -13577, 7105, -12557, 6426, -11344, 6377, -12265, 7793, -11959, 9010, -11836, 7740, -12423, 7410, -12121, 7128, -12219, 7255, -11801, 7320, -11030, 7570, -11615, 7269, -11588, 7583, -11968, 7624, -11589, 6875, -9387, 9631, -10381, 12439, -14620, 14282, -13968, 14390, -14193, 14423, -14413, 14790, -14621, 14736, -15768, 14617, -16415, 13243, -16619, 12032, -17561, 10332, -17963, 10076, -18112, 10273, -17720, 10829, -15097, 11322, -15698, 11782, -16002, 11052, -15952, 9684, -15205, 7990, -14420, 8185, -13465, 8873, -13551, 8590, -14008, 8403, -14874, 8700, -15117, 9353, -15403, 9926, -15935, 7594, -15696, 6939, -16150, 8302, -16790, 10799, -15282, 9596, -15737, 9017, -15779, 8414, -15997, 8524, -15407, 8424, -15292, 9074, -15837, 8681, -15148, 9419, -16117, 9389, -14431, 8428, -11788, 8634, -10291, 11713, -16140, 13691, -16229, 14133, -15486, 13940, -15107, 13628, -15688, 13590, -16519, 13308, -18151, 11955, -17809, 9974, -16563, 8450, -17152, 8307, -15552, 8496, -16866, 9302, -17207, 10710, -18165, 10329, -17440, 9852, -16375, 8950, -16821, 7580, -15148, 6969, -14542, 6814, -12932, 7363, -14426, 8575, -15815, 8787, -16196, 8784, -15481, 9192, -15945, 6869, -16802, 6709, -13500, 7191, -17844, 9798, -14955, 9441, -15762, 8312, -17218, 8266, -16803, 7856, -14647, 7720, -15679, 7345, -15798, 6960, -16104, 7326, -16373, 7460, -15611, 6695, -13932, 8056, -11657, 10217, -17636, 10932, -17220, 11966, -18285, 11850, -17484, 11166, -17931, 11166, -18017, 10851, -19042, 9967, -18786, 9403, -16541, 8480, -15357, 8832, -13473, 8184, -14402, 7992, -16705, 9123, -17940, 8906, -18025, 7807, -16472, 6985, -16575, 6773, -16206, 6227, -15076, 6309, -14220, 6431, -14759, 7642, -15109, 7476, -15224, 8287, -16391, 7550, -16319, 6797, -16390, 6920, -14115, 6737, -17409, 8128, -15006, 9421, -17821, 7728, -15973, 9063, -16088, 9742, -14909, 9165, -13876, 7982, -15184, 7329, -16299, 6217, -16855, 5813, -15881, 5490, -13056, 7244, -12669, 8360, -17421, 8006, -17862, 8400, -17260, 9273, -18342, 8966, -18906, 9423, -17543, 8803, -19234, 9132, -18490, 8731, -18429, 7534, -16833, 7808, -13862, 7768, -14184, 6759, -16665, 7218, -17561, 7300, -17550, 7045, -15693, 6509, -15248, 7241, -15106, 7103, -13433, 6729, -11010, 6388, -13987, 7239, -16632, 7512, -14532, 7539, -14570, 6963, -15427, 6599, -14843, 6899, -13201, 6683, -15871, 7012, -16042, 7967, -17924, 7138, -16369, 8712, -16233, 8820, -17437, 8718, -16951, 7773, -15362, 6658, -15999, 6015, -13579, 6411, -11359, 6403, -10421, 6913, -13061, 6751, -16931, 6826, -15886, 6379, -16624, 7241, -16645, 8923, -17021, 8315, -16194, 7878, -17948, 7937, -17589, 7900, -16959, 7061, -15768, 6724, -16569, 6894, -15548, 7153, -18117, 7218, -17260, 7036, -18431, 7379, -14319, 8424, -12673, 7512, -13172, 7312, -13837, 6645, -12032, 7019, -9039, 6719, -11874, 7356, -14114, 7072, -14597, 6223, -10827, 7138, -13245, 7987, -15629, 7608, -16722, 7879, -17014, 7645, -14350, 7936, -15078, 9015, -15425, 9609, -16103, 9845, -16969, 9680, -15562, 7343, -16654, 6686, -14299, 6778, -11476, 6406, -10121, 7543, -8904, 7386, -12545, 6638, -11207, 6231, -12521, 7098, -13895, 8549, -15534, 8470, -16338, 8153, -15442, 7438, -17633, 7251, -17117, 7614, -15379, 7934, -18621, 8027, -17517, 7317, -16084, 7577, -16163, 7033, -16645, 6653, -15038, 6995, -14730, 7075, -14902, 6522, -13107, 6192, -12367, 6580, -11097, 6553, -13223, 6386, -14950, 7605, -13903, 6989, -12129, 6985, -12096, 8176, -16077, 8602, -16396, 7583, -16208, 7472, -12761, 6497, -14838, 8321, -16049, 9185, -16103, 9320, -17827, 9484, -18559, 7471, -16488, 6548, -14790, 6534, -14390, 5992, -11688, 7381, -9851, 7513, -14295, 6430, -11662, 6710, -10778, 7643, -11860, 9310, -11914, 10642, -13039, 10296, -13422, 8850, -15116, 8351, -14702, 8205, -15574, 7885, -17193, 8217, -16800, 6431, -17945, 7220, -18129, 6860, -16560, 7313, -13524, 6595, -16182, 6619, -14808, 6109, -14294, 6180, -13506, 6856, -12818, 6596, -14467, 6552, -15503, 6770, -14300, 6837, -14802, 7038, -15712, 8413, -17227, 8363, -16579, 7977, -16070, 7859, -15307, 7140, -16020, 8077, -16914, 8831, -17837, 8634, -19144, 8489, -18795, 8042, -17439, 7683, -15763, 7086, -16608, 6584, -13822, 7181, -11222, 7723, -14576, 6670, -13481, 6860, -12643, 6861, -12525, 8142, -12988, 9860, -13356, 9641, -13803, 9506, -14527, 9806, -16195, 9201, -15760, 8803, -14505, 8592, -13057, 7074, -13409, 7006, -14886, 6891, -15594, 7131, -14449, 6746, -17205, 6617, -13218, 6460, -15465, 6637, -14881, 7793, -15216, 7802, -15791, 7266, -14099, 7312, -16890, 7998, -15861, 7590, -15878, 7879, -15559, 8728, -14161, 8634, -14824, 8342, -15230, 8247, -15859, 9267, -15003, 9725, -15974, 9491, -17034, 9508, -15399, 9340, -14506, 8587, -12471, 8021, -12381, 7682, -11422, 7719, -12285, 8180, -15570, 7003, -14625, 6986, -13865, 7509, -12906, 7768, -12134, 8647, -13223, 8751, -13135, 9893, -11553, 10192, -13854, 9319, -14481, 8531, -13693, 8911, -13358, 8729, -12386, 8390, -12965, 8463, -14904, 7775, -16350, 6782, -15377, 6971, -14020, 8118, -13649, 8292, -14857, 8067, -15966, 7754, -14732, 7435, -15232, 8230, -14915, 8207, -12671, 7880, -13008, 8074, -11843, 8652, -12009, 8553, -12567, 8704, -13232, 9409, -13955, 9454, -13783, 9924, -16800, 9601, -15986, 9426, -13785, 9134, -12610, 8775, -12156, 8504, -12515, 7379, -12516, 7630, -13141, 7992, -14742, 7419, -13816, 7177, -13772, 7680, -14446, 7977, -11581, 8174, -11681, 7890, -11728, 8765, -12026, 9999, -13381, 9467, -13916, 7915, -13452, 7918, -11630, 8330, -11199, 8987, -12085, 8686, -14860, 8139, -15826, 7564, -13716, 7477, -11349, 8712, -14154, 8177, -14968, 7425, -15202, 6836, -12949, 7566, -13568, 7801, -16306, 7454, -15885, 6946, -15203, 7256, -13785, 8163, -13839, 7408, -13109, 7142, -13695, 7293, -14595, 7708, -14889, 7952, -16225, 8307, -15435, 9389, -14248, 9505, -13848, 8646, -12437, 8113, -12804, 6388, -12399, 7286, -13097, 7469, -14370, 6772, -13034, 6851, -13507, 7436, -13809, 7596, -11780, 7550, -11040, 6676, -11438, 6954, -10841, 8498, -12281, 8775, -14722, 8836, -13170, 8415, -11969, 8390, -12349, 8844, -13219, 8597, -14788, 7505, -15337, 7464, -13472, 8760, -12378, 9388, -14952, 8129, -15771, 6350, -14852, 6345, -13100, 6742, -15717, 7084, -14055, 6444, -13972, 6397, -12884, 6926, -14812, 8183, -15175, 8206, -14303, 7056, -13917, 5852, -14864, 6486, -15408, 7348, -15541, 8430, -16990, 8893, -13959, 9910, -14228, 9059, -15002, 8577, -13125, 6911, -11961, 6845, -12638, 6971, -15771, 6198, -14474, 6561, -13464, 6825, -13885, 6651, -13142, 6520, -11934, 6086, -12130, 5661, -12400, 6911, -11397, 6615, -14444, 7594, -12545, 6784, -12381, 6605, -13981, 6419, -14318, 6618, -15207, 6355, -15288, 6487, -14329, 7592, -13015, 7519, -14840, 5817, -16363, 5668, -14857, 6168, -14684, 6128, -15222, 7115, -14289, 6531, -14684, 6370, -14036, 6878, -15020, 7786, -15775, 8758, -14775, 6580, -14669, 5399, -13344, 5664, -15509, 5938, -16019, 7651, -15480, 7872, -14709, 8791, -15088, 8229, -15742, 8524, -15145, 7048, -12748, 6395, -12464, 6174, -15439, 6002, -13720, 5403, -14112, 5292, -12839, 4997, -12992, 5234, -13518, 5392, -12200, 5472, -13149, 5260, -10242, 5345, -14229, 5010, -13702, 4932, -12181, 6453, -13070, 7665, -14050, 7295, -13628, 6257, -13505, 6089, -13442, 6445, -13899, 6318, -13574, 8173, -14213, 7336, -14055, 7081, -14426, 6891, -14489, 5558, -14666, 5652, -14442, 6259, -14555, 6057, -15881, 5883, -16244, 6720, -16397, 5641, -15396, 4374, -7771, 4202, -10431, 5650, -15054, 6512, -15280, 6638, -16263, 7743, -15615, 8291, -15385, 8131, -17077, 7113, -14244, 5872, -11430, 6539, -16120, 7141, -12218, 6766, -12380, 7058, -11470, 7433, -13619, 5438, -11361, 5138, -11189, 5296, -11698, 3271, -6832, 3372, -8749, 3509, -8539, 4270, -8001, 4486, -7036, 6264, -4773, 9134, -9278, 8542, -10742, 8186, -9291, 7418, -10614, 7260, -9704, 8260, -10754, 8749, -11453, 9678, -12753, 9007, -11832, 8227, -12606, 7662, -14280, 6836, -13259, 7321, -14056, 7736, -14045, 7656, -15735, 7265, -14276, 3724, -8571, 4926, -12412, 5636, -15363, 6346, -16640, 6029, -14871, 6406, -15180, 6380, -15784, 7052, -15764, 6544, -13621, 5292, -10026, 6532, -13170, 6034, -11017, 3850, -7284, 3161, 2793, 3226, -7719, 2914, -5360, 4333, -8277, 2287, -6375, 2322, -1845, 1684, -4275, 1586, -2884, -194, 323, 1156, -395, 250, 3451, 4624, -4494, 3324, -2575, -389, 3801, 4683, -6678, 319, 2331, 4068, -5288, 3925, -3883, 5244, -4916, 373, 3692, 3538, -6091, 4290, -6227, 5834, -9057, 4072, -6642, 5231, -9187, 6774, -11165, 6201, -10487, 3907, -8261, 5229, -11400, 5299, -13339, 5588, -16196, 5910, -13186, 5744, -15243, 5287, -12230, 5280, -14145, 5580, -12389, 5856, -10484, 5469, -8818, 3918, -10568, 3051, -8635, 3566, -9916, 3215, -8794, 3980, -3908, 3130, -6602, 2524, -5430, 2419, -5194, 2679, -2932, 3536, -6666, 3112, -5422, 1451, -1432, 6019, -6422, 2355, -5278, 2477, -2438, 4726, -5766, 3348, -5961, 6209, -6943, 5778, -8315, 642, 507, 5459, -6718, 4413, -6345, 1498, -2803, 2058, -4195, 2583, -5840, 2541, -4533, 3242, -7896, 2588, 583, 1752, -5376, 3033, -7157, 3218, -8012, 4107, -10512, 5550, -15586, 6122, -14725, 4597, -10448, 5478, -6745, 4904, -9935, 4429, -10908, 6102, -10095, 6446, -9853, 5325, -11000, 5402, -10916, 5761, -13212, 4275, -11435, 4439, -9103, 4186, -9839, 4607, -8451, 3401, -8252, 3280, -6521, 3444, -8593, 3903, -6157, 4105, -6655, 5472, -10433, 3947, -2929, 4159, -11719, 4350, -8058, 5580, -9377, 2192, -4226, 3269, -8708, 7943, -9667, 5793, -10452, 7071, -10843, 3854, -5904, 5060, -10152, 3470, -6883, 3855, -8948, 4301, -10504, 4880, -9793, 4267, -8056, 3910, -8062, 5437, -5968, 4844, -12532, 6128, -15217, 5733, -14574, 4634, -10231, 5733, -6405, 5225, -10699, 4143, -10430, 6053, -10098, 6824, -11743, 6502, -11580, 5999, -13517, 5658, -12138, 5631, -11069, 7019, -10127, 4303, -10804, 5022, -11584, 4969, -11260, 5442, -11529, 4325, -12885, 4921, -10990, 5802, -12011, 5491, -13411, 4946, -12185, 6283, -12085, 6011, -10811, 3818, -10428, 3652, -10006, 5053, -5939, 4436, -11306, 4509, -10733, 5129, -13047, 4445, -11237, 4430, -10531, 5338, -11919, 5813, -13440, 6095, -13617, 6098, -15645, 6293, -13418, 6284, -14829, 5780, -14952, 5681, -13376, 6048, -13989, 5653, -14187, 5703, -14203, 6269, -10758, 5886, -10726, 4382, -10990, 6376, -11828, 7716, -13086, 7617, -12843, 6616, -13551, 5949, -12939, 6748, -14990, 7630, -14447, 5880, -13356, 6154, -14846, 6772, -15949, 6384, -14319, 5439, -11159, 6769, -11093, 5469, -15152, 6187, -15132, 5955, -13636, 5819, -13087, 6741, -12684, 5637, -12636, 4873, -12035, 4663, -13457, 5524, -11109, 5767, -13709, 7110, -15048, 6017, -13379, 6279, -12818, 6412, -15585, 6778, -15855, 5493, -10877, 5340, -11580, 5907, -11476, 6818, -15580, 7176, -17615, 6697, -15729, 6420, -14348, 6180, -14910, 6312, -16545, 7311, -12220, 6871, -12661, 5149, -12232, 6741, -11305, 8897, -13614, 7126, -14092, 7193, -14375, 6366, -15598, 7330, -13651, 7961, -14714, 6630, -12562, 6233, -14108, 5800, -15378, 5654, -13316, 5189, -11382, 6325, -12748, 6712, -16631, 6484, -13697, 6312, -15966, 6896, -15650, 7133, -15671, 6414, -13839, 6771, -14196, 6042, -14801, 6655, -13465, 5559, -14692, 10015, -13913, 7680, -14907, 5903, -14254, 6193, -13648, 6508, -12427, 5528, -11980, 5186, -8651, 5657, -10209, 7906, -14558, 7838, -15429, 7280, -12118, 5914, -13074, 6507, -13593, 7050, -14670, 8199, -13224, 7950, -11093, 5723, -12148, 6115, -11375, 7865, -12914, 6899, -15317, 7027, -12685, 7165, -14034, 7367, -14738, 8193, -13698, 8274, -12728, 6833, -12240, 5896, -11077, 5258, -11890, 6076, -13857, 6834, -12373, 7058, -16413, 6258, -11153, 6120, -14518, 7914, -14721, 7597, -15377, 7161, -13539, 6871, -14867, 6757, -16102, 6499, -13761, 6409, -14446, 9304, -13302, 7327, -14303, 6436, -14103, 6053, -12100, 6368, -13414, 6093, -11360, 4679, -10558, 5883, -13767, 6215, -16617, 6899, -14466, 6545, -15984, 5986, -13685, 8218, -12998, 7936, -12990, 9120, -11800, 7105, -13304, 5986, -12503, 7142, -11474, 7573, -13793, 6869, -13177, 8335, -11521, 7187, -14208, 7979, -15330, 7595, -13206, 7554, -13271, 7594, -13577, 6294, -11577, 5977, -13908, 7055, -15895, 6270, -14072, 5723, -12285, 6320, -13618, 6203, -14804, 6606, -13759, 6780, -13909, 8371, -12656, 8045, -12904, 7120, -14256, 7983, -13787, 7022, -13614, 8728, -11604, 7084, -14104, 6268, -15524, 6919, -15092, 6415, -13633, 6019, -14831, 5242, -11458, 5263, -11854, 6332, -15348, 6346, -14627, 5640, -16388, 5901, -10895, 7479, -12484, 7403, -12477, 7447, -12868, 6449, -14029, 5817, -11667, 6793, -12873, 7570, -15210, 6991, -13882, 6698, -14874, 6777, -14960, 7238, -18032, 7114, -14643, 6849, -14413, 7448, -12561, 7542, -11493, 5621, -11101, 6373, -12686, 6098, -14113, 5818, -12150, 6346, -14160, 7176, -16229, 6984, -14093, 6159, -12560, 7874, -10808, 7668, -12961, 7399, -16292, 7934, -14228, 8065, -15468, 8692, -15754, 6885, -11835, 5960, -12990, 6569, -14526, 6302, -12900, 5955, -15593, 5377, -11474, 6054, -12360, 5920, -15244, 6427, -15217, 6097, -14350, 8416, -10300, 8405, -14124, 8082, -12458, 7074, -13660, 6299, -13399, 5031, -11776, 8223, -14232, 8620, -16163, 8315, -14556, 6698, -15899, 6790, -13134, 6799, -15257, 7188, -14803, 6998, -15263, 7084, -13187, 7234, -14039, 6503, -14450, 5584, -12445, 6267, -12510, 5824, -11996, 5797, -10269, 6059, -13370, 6009, -10618, 6346, -10104, 7180, -11300, 6819, -12398, 6971, -16676, 7678, -16909, 9268, -14261, 10189, -15014, 7451, -13636, 6097, -12689, 6541, -12959, 6144, -13971, 6212, -12753, 6510, -10759, 6630, -16200, 6664, -16077, 6674, -12970, 6888, -15042, 7273, -15375, 7224, -13719, 7906, -13853, 8063, -13334, 6365, -14528, 5132, -12817, 7353, -11270, 8229, -15508, 7451, -14063, 6856, -15035, 6850, -10246, 6424, -12436, 7154, -14470, 7153, -13742, 7208, -15379, 7938, -14253, 6976, -13841, 6901, -13074, 5777, -8709, 6234, -11316, 5915, -10952, 6400, -9402, 6065, -11637, 6427, -9306, 7513, -11702, 6270, -13616, 6918, -16890, 6564, -16394, 8116, -14558, 9943, -14444, 7895, -14423, 6491, -13950, 7207, -14955, 6359, -15962, 6999, -11967, 7030, -9855, 6508, -15199, 6307, -15177, 7372, -10486, 7697, -15247, 7822, -17687, 6843, -15450, 9054, -15841, 9011, -15318, 7593, -14459, 5495, -13165, 7169, -11619, 8223, -13680, 6980, -16243, 6209, -14765, 6705, -10674, 6369, -11449, 7090, -13510, 6840, -13772, 7566, -14171, 7864, -13151, 7314, -13792, 6703, -15080, 6227, -10235, 5419, -10395, 5836, -11094, 6041, -12531, 6764, -12380, 6464, -12943, 7961, -11393, 6162, -13086, 6747, -15851, 7637, -13879, 7800, -14352, 9167, -13748, 8469, -14313, 8264, -14437, 7731, -12948, 6903, -14711, 6744, -16508, 6909, -14178, 6819, -15478, 6602, -15145, 7139, -11329, 7498, -15613, 7869, -16713, 7988, -16253, 10089, -14624, 9286, -15083, 9171, -14163, 6400, -11651, 6386, -12014, 7615, -13210, 6243, -13891, 5843, -11140, 6840, -11642, 6486, -13480, 7790, -12011, 8291, -14971, 10514, -13362, 8816, -14600, 8093, -14741, 7899, -14370, 7827, -12837, 6147, -12109, 6710, -14451, 7183, -16424, 7940, -16368, 7278, -14118, 6711, -12320, 6238, -14460, 7833, -14607, 7881, -14351, 8243, -14043, 9017, -13361, 7232, -14838, 7490, -12202, 7377, -12916, 7117, -14906, 6469, -15173, 6288, -14242, 7112, -17314, 6398, -15338, 7505, -12281, 7849, -16824, 7465, -16809, 8111, -16779, 9094, -13718, 9064, -13942, 9333, -13171, 6735, -12252, 6119, -11505, 6704, -13773, 5860, -11388, 5271, -9158, 6663, -10412, 7662, -16063, 8392, -13078, 8451, -15415, 10209, -15160, 9694, -14517, 9393, -15361, 8716, -14580, 7848, -12999, 6632, -12129, 6807, -11456, 7684, -16398, 8279, -16616, 7975, -13051, 6612, -12907, 7105, -12339, 7078, -13970, 8131, -14253, 8380, -14791, 8718, -13289, 7184, -14550, 7330, -10609, 7607, -12542, 7553, -13544, 7492, -12277, 6431, -13261, 7000, -13190, 7102, -14645, 7832, -13355, 8056, -14744, 7284, -16586, 7448, -16133, 7716, -14259, 8481, -13602, 8619, -12610, 6818, -11686, 5212, -9811, 5624, -11572, 5227, -9016, 5840, -9316, 5513, -8942, 6385, -11043, 7876, -11337, 7694, -11590, 8452, -11727, 8348, -11195, 7475, -10994, 7421, -11890, 6915, -11969, 6369, -11271, 5692, -6176, 6060, -12927, 7256, -11950, 7547, -10152, 6731, -9184, 6606, -9994, 6967, -10209, 6864, -10956, 7890, -11318, 7345, -10411, 6553, -12372, 7187, -10015, 6473, -10708, 6872, -10311, 6497, -11075, 5471, -8015, 7563, -9025, 7110, -11296, 7670, -10121, 7282, -11244, 5535, -13056, 6326, -11240, 6764, -12292, 7438, -10408, 6758, -11122, 6180, -9691, 8878, -8478, 9467, -8376, 9482, -8135, 9192, -8100, 9406, -8115, 9090, -7852, 9808, -8700, 9522, -8793, 9103, -8289, 8782, -8268, 9945, -9505, 9960, -9461, 10783, -10193, 10024, -9855, 10334, -10042, 10378, -10069, 9564, -9403, 8450, -8541, 8584, -9266, 8592, -9133, 7622, -7743, 8075, -8199, 8653, -9032, 7600, -8226, 8289, -8260, 9055, -9223, 8265, -8251, 7949, -8513, 8749, -9121, 9747, -9390, 10149, -9942, 10104, -9988, 9886, -9815, 10356, -10330, 10371, -10027, 9553, -9685, 10102, -9936, 9584, -9613, 9664, -9550, 9089, -8510, 9152, -9205, 10226, -9655, 12766, -11850, 11831, -11478, 13090, -12582, 12560, -12161, 11571, -11582, 10898, -10974, 10076, -10559, 9452, -10270, 10314, -10954, 10448, -10843, 10440, -10884, 10503, -10932, 10674, -10903, 11113, -11183, 9964, -10452, 9455, -9642, 9221, -9391, 9604, -10292, 9041, -9713, 9368, -10277, 9629, -10527, 9168, -10367, 9395, -10251, 9462, -9830, 9084, -9208, 9342, -9953, 9661, -10582, 10757, -11397, 9675, -10587, 10566, -10972, 10692, -10755, 10482, -10955, 10205, -10380, 9736, -10273, 9669, -10202, 9956, -10886, 9325, -9478, 9834, -9398, 10346, -10266, 10644, -11139, 11855, -12345, 12285, -12496, 12109, -12358, 11425, -11196, 9968, -10266, 10342, -11103, 9987, -11039, 8700, -10514, 9402, -10350, 10271, -11291, 9706, -10879, 10080, -11049, 11095, -11714, 11022, -11425, 9897, -10810, 10590, -11380, 10118, -10084, 10652, -10670, 9512, -9935, 10740, -10903, 10781, -11241, 10520, -10658, 9501, -9592, 9966, -9536, 9653, -9262, 9367, -9527, 10533, -11125, 10021, -10563, 10595, -10894, 10867, -11310, 10397, -11080, 9766, -10991, 9826, -10951, 10695, -11621, 9778, -10656, 9618, -10170, 8469, -8877, 8714, -8625, 10651, -11109, 10712, -11697, 10726, -11458, 10464, -11898, 10735, -11805, 10319, -11120, 9405, -10333, 8984, -9946, 9354, -10618, 9120, -10457, 8971, -10139, 9732, -10696, 9956, -10898, 10986, -11537, 10129, -11223, 11407, -11874, 10997, -10859, 10629, -10668, 9828, -10310, 9926, -10216, 9675, -10380, 9990, -10689, 9705, -10548, 9064, -10122, 8598, -10022, 9568, -9964, 10072, -10533, 9209, -10347, 10256, -11126, 10122, -10512, 11472, -11306, 11014, -11327, 9904, -11016, 9379, -10245, 9921, -10803, 10965, -11564, 9766, -9971, 9691, -9935, 8072, -8003, 9043, -8695, 9437, -9578, 9053, -10346, 9802, -10729, 10142, -10835, 10032, -10945, 9693, -10758, 9765, -10452, 9875, -10580, 10171, -10793, 10059, -10025, 9568, -10230, 9089, -10223, 10062, -10821, 10931, -11758, 10470, -10955, 10775, -11142, 10553, -10772, 10391, -11495, 9973, -10901, 9536, -9801, 9979, -10546, 10675, -11177, 10044, -10736, 8942, -9788, 9334, -10485, 9697, -10911, 10190, -10888, 9846, -10613, 10035, -10171, 10976, -11019, 11323, -11277, 9606, -10752, 9441, -10759, 9283, -10496, 9230, -10394, 10375, -11124, 9395, -10342, 9277, -10303, 5735, -6076, 6824, -6755, 8979, -9433, 8634, -9430, 8996, -9324, 9019, -10085, 10271, -11156, 9034, -10132, 9451, -10577, 9922, -10652, 9499, -9888, 10617, -10435, 10677, -10944, 10440, -10987, 10829, -11021, 10765, -11140, 11149, -11253, 11822, -12054, 10812, -11224, 9538, -10122, 9071, -9355, 9049, -9573, 9317, -9465, 8966, -9528, 9706, -10310, 8922, -9749, 9472, -10017, 9496, -9625, 9880, -10611, 9645, -10463, 11193, -11170, 11338, -10615, 10498, -10454, 10329, -10605, 10228, -10352, 10885, -10602, 10696, -10879, 11224, -10640, 10233, -9793, 7733, -8424, 4553, -5604, 5769, -5880, 7546, -8020, 7601, -8048, 8116, -9248, 8902, -10456, 9471, -10309, 9306, -10127, 9570, -10234, 9648, -10470, 9362, -9863, 9661, -9874, 10008, -10491, 10535, -10777, 10968, -11096, 10816, -10785, 11683, -11419, 12215, -12145, 11000, -11948, 10038, -11231, 8982, -10042, 9251, -9873, 9414, -9991, 8869, -9292, 8896, -9636, 8671, -9825, 8815, -9655, 9150, -9835, 10344, -10893, 10751, -10603, 11517, -11273, 11483, -11142, 10601, -10748, 10583, -10972, 10682, -10750, 10481, -10529, 10765, -10818, 10873, -10770, 10130, -9989, 9373, -9764, 6917, -7289, 7866, -7922, 7730, -8243, 8442, -9088, 8471, -8968, 9075, -9493, 9836, -10217, 8585, -9732, 9037, -9948, 9328, -10094, 9184, -9639, 9637, -10275, 10076, -10949, 10273, -10775, 11129, -11563, 10631, -11375, 11666, -12007, 11280, -11736, 10557, -11231, 10687, -10852, 9618, -10346, 9163, -9434, 9184, -9786, 9358, -9573, 8803, -9465, 9090, -9827, 9520, -9849, 10086, -10900, 11003, -11154, 11002, -11104, 10275, -10742, 10967, -11313, 10775, -11236, 10634, -10797, 10654, -11272, 10326, -10992, 10051, -10852, 9675, -10640, 9566, -10079, 9366, -9936, 9593, -9401, 9502, -9397, 8606, -9021, 8687, -9413, 8628, -9004, 8927, -9354, 9946, -9978, 9413, -9981, 9331, -10170, 9029, -9825, 8403, -9605, 9150, -9734, 9598, -10320, 9958, -10377, 10843, -11393, 10303, -10899, 10715, -11681, 10277, -10736, 9845, -10433, 9871, -10244, 9121, -9892, 9936, -10360, 9956, -10474, 9463, -9593, 9841, -9782, 8932, -9304, 10161, -10704, 10054, -10674, 10799, -10999, 10068, -10458, 9701, -10523, 9490, -10139, 10352, -10549, 10407, -10539, 10509, -10825, 9935, -10440, 10218, -10602, 9756, -10322, 9527, -10293, 9749, -10433, 9835, -9594, 9575, -9129, 8548, -8557, 8710, -9210, 8889, -9020, 9713, -10066, 10270, -10291, 10644, -10653, 9204, -9936, 9033, -10095, 9009, -9824, 9554, -9988, 9513, -10500, 9921, -10669, 9853, -10461, 10278, -10508, 9500, -10399, 9994, -10294, 9881, -10030, 9719, -9778, 9325, -9876, 9855, -10446, 9617, -10065, 10166, -10200, 10115, -10536, 10106, -10943, 10412, -10970, 10195, -11021, 10520, -11149, 10621, -10818, 10221, -10274, 10181, -10365, 10400, -10757, 9727, -10826, 10131, -11286, 9822, -10904, 9984, -11218, 9619, -10397, 9447, -10171, 9425, -10008, 9735, -10156, 10350, -10457, 8739, -8640, 8691, -9428, 8760, -9507, 9958, -10564, 10450, -10855, 10885, -11334, 10637, -11088, 10009, -10851, 9466, -10447, 9989, -10898, 9053, -10241, 9655, -10469, 8834, -10009, 9999, -10546, 9385, -10473, 9683, -10232, 9595, -9890, 8867, -9533, 9038, -9900, 9124, -10121, 9841, -10522, 9930, -10309, 9736, -10757, 8900, -10437, 9861, -10819, 10231, -10589, 10409, -11104, 9710, -10247, 10560, -10462, 10338, -10238, 11122, -11195, 10043, -10533, 10084, -10416, 8591, -9402, 9056, -10006, 8812, -9425, 8951, -9580, 9642, -10248, 9426, -9778, 9922, -9866, 9191, -9211, 9423, -10245, 9435, -10293, 10596, -11147, 11024, -11373, 10978, -11299, 11430, -11877, 10545, -11076, 9958, -10440, 9328, -10232, 9338, -10151, 9218, -10343, 9058, -9881, 9820, -10325, 9818, -10479, 10476, -10992, 9848, -10149, 9680, -10414, 10329, -10952, 11480, -11527, 11782, -11694, 11111, -11298, 9490, -10753, 9627, -10679, 9978, -10376, 10193, -9839, 9161, -9798, 9565, -9815, 10467, -10922, 9762, -10029, 10828, -10619, 9618, -9578, 9743, -9478, 9599, -9477, 9405, -9755, 9547, -9855, 9583, -10073, 10528, -10740, 9746, -9331, 9935, -9270, 9649, -9469, 10541, -11240, 10545, -11339, 10232, -10923, 10723, -11163, 10799, -11292, 11436, -11526, 10821, -11002, 10121, -10148, 9532, -9565, 9240, -9099, 8888, -9478, 9488, -10120, 10289, -10919, 10390, -10694, 10668, -11284, 10436, -10853, 9875, -10011, 10471, -10862, 11606, -11983, 11311, -11583, 10502, -10483, 10298, -10866, 9922, -10545, 10226, -10324, 11005, -10225, 10248, -10763, 9648, -10061, 10376, -10938, 9318, -9844, 10613, -10754, 9870, -9612, 9268, -9508, 9826, -9858, 9190, -9742, 10126, -10315, 10124, -10592, 10721, -10802, 10393, -10215, 10984, -10564, 9597, -8959, 10891, -10976, 11016, -11330, 10370, -10958, 10329, -10768, 10577, -10982, 10853, -11412, 10624, -10659, 9721, -9888, 7884, -8326, 8276, -8358, 7788, -8517, 9470, -9935, 10430, -10477, 10886, -10959, 10555, -10747, 9303, -9533, 9391, -9713, 10294, -10791, 10531, -10767, 10103, -10239, 9291, -9324, 9932, -10111, 9763, -9824, 10321, -10566, 10504, -10560, 10121, -10926, 10191, -10591, 10583, -11289, 10777, -11149, 9907, -9424, 4436, -4173, 6287, -6172, 9033, -8397, 8920, -9160, 10683, -11022, 9624, -10418, 10573, -10638, 9965, -10223, 10966, -10913, 9210, -9014, 9227, -9274, 9856, -10207, 9160, -9484, 6298, -6521, 9197, -9125, 8462, -9484, 9481, -9838, 7927, -8452, 6108, -6660, 6575, -6068, 6978, -6877, 7070, -7010, 7405, -6771, 5711, -5466, 8991, -9270, 9071, -9160, 6184, -6559, 7523, -7180, 7210, -6554, 7708, -7239, 8221, -7803, 8368, -8487, 8104, -7771, 9424, -9198, 9327, -9149, 9108, -9202, 8708, -9109, 9226, -9339, 8795, -9429, 8501, -8659, 3865, -4424, 5788, -5263, 9082, -8838, 8827, -8824, 9533, -9942, 8560, -9476, 8636, -10310, 9075, -9704, 9986, -10230, 8039, -7539, 6421, -6563, 6595, -6599, 3230, -3525, -2628, 2333, 4260, -4496, 1921, -2265, 6381, -6260, 3012, -2904, 984, -1434, 1490, -636, 2479, -2110, 2137, -2114, 3587, -3636, 1335, -942, 3868, -3613, -1728, 1705, -3535, 3625, 3142, -2641, 1229, -1082, 2714, -2576, -883, 1070, 3708, -2778, -288, 695, 2315, -2626, 3690, -4047, 6597, -6901, 3859, -3879, 6015, -5649, 4102, -3811, 5717, -5412, 4999, -4670, 5567, -5524, 6995, -7143, 8290, -7806, 8177, -9092, 8073, -8871, 6988, -8131, 7963, -8614, 8162, -8087, 5619, -5675, 4087, -3943, 5521, -5646, 5203, -5528, 4483, -3966, -77, -334, -4159, 3987, 493, -260, 69, 280, -1764, 1780, -1105, 454, 909, -837, -1144, 2055, 1849, -1202, 3415, -3935, -3201, 2880, -760, 525, 367, -253, 2572, -1498, 3174, -2801, 3580, -3430, -3743, 3189, 2224, -2214, 1941, -2064, 221, -458, 1685, -888, -1690, 1745, -3068, 3138, 1782, -1473, -3432, 3100, -290, 694, 3524, -3138, -2707, 3159, 4338, -3848, 8110, -7593, 7925, -8383, 4953, -5767, -876, 226, 5576, -6027, 7334, -7393, 1898, -2121, -1519, 1456, 4617, -4514, 6249, -6690, 6194, -6975, 4754, -5848, -2626, 2456, 2284, -1801, 4704, -4809, 3316, -2642, 5100, -4789, 1219, -269, -2551, 2221, 3140, -3267, 4511, -4244, -2381, 2472, 328, -516, -1948, 2439, 3240, -3009, 1222, -1415, -3595, 3081, 4707, -3935, 6626, -6198, 4088, -4127, -1506, 1818, 4102, -3122, 12, -448, -1392, 1337, 5760, -6261, 2761, -2895, 4225, -4292, -240, -232, -3760, 3251, 3122, -3678, 8544, -8348, 7644, -7689, 1920, -2719, -821, 1174, 5182, -4566, 6772, -6297, 2690, -2711, -115, -673, 5953, -6247, 7849, -7545, 6984, -6898, 4739, -4406, -2094, 2416, 764, -340, 7968, -7752, 6961, -6774, 6260, -6928, 6282, -5922, 2112, -1618, 7264, -6493, 9628, -9576, 4744, -4528, -1816, 1150, -5283, 5768, 5632, -5795, 2424, -2967, -7400, 6525, -1154, 1300, 6215, -6202, 5263, -5888, 435, -452, 4391, -4536, 6756, -7377, 6172, -5770, 7154, -6913, 7993, -7647, 7951, -7862, 6847, -7755, 4233, -5061, 6956, -7011, 7870, -7730, 7009, -7220, 7321, -7644, 4017, -3677, 4383, -3557, 7479, -7216, 6958, -7447, 7917, -8908, 7274, -8101, 7411, -7712, 7472, -7359, 2631, -2850, -1841, 1679, 2906, -2506, 8436, -8839, 8343, -7694, 7281, -7008, 3725, -4297, 4671, -4384, 8565, -7435, 9460, -9049, 7971, -7851, 4005, -4330, 1203, -945, 7304, -7356, 5618, -5735, -475, 51, 3057, -3011, 7048, -7315, 4685, -5278, 5081, -4820, 6809, -6764, 8341, -8699, 8227, -8056, 6497, -6296, 7395, -6915, 7518, -7823, 8793, -9144, 8917, -8989, 8501, -8534, 8171, -7729, 8415, -8787, 7711, -8753, 5724, -6331, 5705, -5905, 8594, -8521, 9602, -10367, 7978, -9247, 8874, -8642, 8453, -8951, 7995, -8427, 4306, -4810, 2941, -3195, 6134, -6513, 7397, -7758, 7505, -7132, 6222, -6945, 5467, -6304, 5595, -6371, 8073, -8275, 8562, -8469, 8419, -8662, 7662, -8064, 7459, -7475, 7701, -7336, 7584, -8010, 7152, -7205, 7570, -7448, 6354, -6589, 1821, -2738, 4988, -4505, 7514, -7708, 8359, -8283, 6600, -7347, 5451, -6181, 7017, -6885, 7496, -8680, 9325, -9601, 8468, -8406, 7960, -8470, 8330, -8671, 7958, -8329, 8111, -8257, 6003, -6227, 6452, -6253, 8062, -8456, 9235, -9256, 8728, -9815, 9577, -9682, 7430, -7984, 8200, -8703, 7876, -8362, 7048, -7388, 7344, -8151, 7701, -7573, 7699, -7630, 7435, -7993, 8091, -8146, 8450, -7950, 8946, -8963, 7950, -8137, 7627, -8285, 7557, -8799, 8954, -9034, 8543, -8262, 8386, -8331, 8095, -8609, 8247, -8503, 6711, -7615, 3116, -3054, 5719, -5586, 7278, -8245, 7600, -8725, 7562, -8820, 7460, -7880, 8159, -8344, 9350, -9508, 9667, -10293, 8396, -9037, 9287, -9531, 8751, -9244, 7161, -8617, 8817, -8823, 8346, -8616, 7160, -7431, 7683, -8056, 8273, -8430, 7667, -8150, 9258, -9234, 7479, -8135, 9553, -9514, 9268, -9196, 9096, -9776, 7675, -8791, 7948, -8463, 7994, -8622, 8566, -8660, 8404, -8041, 8953, -8131, 8947, -8481, 8920, -9057, 9016, -9793, 7722, -7837, 9074, -9612, 7050, -7667, 8446, -8314, 8574, -9014, 7813, -8377, 7558, -7653, 5764, -5855, 7890, -8122, 8482, -9069, 7888, -8638, 8645, -9211, 9012, -8870, 8604, -8845, 9474, -9685, 9779, -10418, 8872, -9727, 10105, -10161, 8454, -9414, 8236, -8814, 10216, -10024, 9429, -9700, 7416, -7473, 6900, -7358, 7793, -8038, 8330, -7944, 9009, -8852, 9822, -10194, 9825, -9935, 9878, -10239, 9524, -10196, 8351, -9035, 8814, -9357, 8584, -9711, 8662, -8841, 8596, -9252, 8051, -8277, 8734, -9539, 9224, -9784, 9322, -9885, 8776, -8830, 8977, -9373, 7030, -8285, 8032, -8479, 8630, -8675, 8482, -8554, 8074, -8503, 8087, -8089, 7600, -7960, 8143, -8872, 7547, -8373, 8962, -10014, 10072, -10118, 8387, -9433, 8439, -9116, 9540, -9356, 9854, -9973, 9435, -10054, 8174, -9214, 8691, -8858, 9013, -9170, 8351, -8808, 7463, -7614, 7529, -7906, 7607, -7223, 8427, -7988, 8507, -8806, 8763, -8555, 9450, -9820, 10261, -10726, 10173, -10582, 8924, -9567, 8372, -9105, 9488, -10407, 8910, -9941, 9014, -9022, 8655, -9214, 9337, -10038, 8742, -8783, 8926, -8836, 7531, -8152, 8176, -8805, 7127, -7615, 8360, -8433, 8518, -8932, 8403, -8958, 7672, -8759, 8590, -8540, 7793, -8512, 8653, -9082, 8567, -9179, 9587, -10030, 9241, -9167, 8787, -9137, 10046, -10249, 10272, -10235, 9744, -10143, 10063, -10425, 8694, -8620, 8154, -8663, 8663, -8450, 8506, -8326, 8528, -7975, 8716, -8554, 7460, -7229, 7616, -8034, 7377, -8705, 8894, -9148, 8383, -8850, 9851, -10207, 10175, -9953, 9431, -9696, 9756, -9636, 9339, -9385, 8926, -9174, 8608, -8358, 8301, -8366, 8492, -8771, 8284, -9375, 7878, -8187, 8589, -8858, 7693, -7947, 7242, -6706, 8924, -8573, 8481, -9266, 8939, -9322, 7203, -7785, 7909, -8116, 8013, -8898, 7960, -9072, 9230, -9848, 9288, -10088, 8503, -8455, 8968, -8863, 9729, -10033, 9622, -9362, 9243, -9467, 9777, -10449, 9185, -9528, 8347, -8508, 7911, -8231, 7908, -7976, 8836, -8277, 9177, -8676, 8078, -7435, 7032, -6895, 8281, -8748, 8475, -8732, 8294, -9075, 9143, -9839, 9706, -9758, 9457, -9429, 8830, -8267, 9186, -8914, 8698, -8737, 8105, -8754, 7487, -8150, 7917, -7760, 8735, -9491, 9007, -9341, 9371, -9416, 6818, -7289, 6791, -7055, 7406, -8217, 8567, -8982, 8347, -8439, 8773, -8701, 8129, -8548, 8683, -9314, 8776, -9199, 9079, -9335, 8832, -9222, 8570, -8815, 9020, -9251, 9473, -8677, 9077, -9171, 8820, -8806, 8530, -9047, 8642, -9295, 8485, -9297, 6886, -7738, 6697, -7063, 7621, -7709, 8454, -8631, 9084, -8708, 7299, -7639, 8620, -8952, 7798, -8876, 7989, -8185, 9348, -8930, 8238, -9070, 8712, -9033, 8975, -9390, 8713, -9008, 9050, -9557, 8285, -8872, 8402, -8770, 9325, -8956, 9852, -10404, 9876, -10245, 9233, -10149, 8225, -9016, 6945, -7555, 8581, -9414, 8743, -9758, 8513, -9575, 9328, -9856, 8442, -8996, 9006, -9474, 7267, -8451, 7391, -8759, 7934, -8602, 8481, -9002, 8472, -8711, 8616, -9456, 8266, -9187, 8103, -9249, 7950, -8981, 9025, -9481, 7646, -8880, 6476, -7528, 7215, -8054, 6916, -7657, 7174, -7824, 9264, -8845, 8007, -7908, 8051, -7922, 6543, -6878, 7698, -7084, 9203, -9283, 8424, -8467, 9551, -9999, 8394, -8676, 7804, -8542, 8404, -9355, 7787, -8421, 8937, -9171, 9078, -8813, 10047, -9861, 9344, -9380, 9266, -9272, 7468, -7479, 7466, -7635, 8472, -8706, 9045, -9107, 8368, -8399, 9407, -9289, 9190, -9006, 8741, -8687, 8232, -8521, 8238, -8529, 8566, -8991, 7615, -7087, 8114, -7663, 7504, -7209, 8217, -8260, 6999, -7462, 8561, -8516, 9133, -8700, 8622, -8760, 7901, -7732, 8166, -8333, 7130, -7376, 7794, -8120, 9510, -8961, 8812, -7970, 7169, -7051, 7541, -6806, 7887, -6998, 8008, -7871, 8008, -8332, 8838, -9205, 9033, -8549, 8120, -8173, 8880, -9077, 8020, -8170, 8672, -8671, 9632, -8848, 7787, -7358, 9183, -9107, 8889, -8954, 8404, -8399, 7697, -7617, 8390, -7808, 8582, -8283, 8637, -8590, 8463, -8333, 8797, -8160, 8690, -8494, 9469, -9459, 8848, -8836, 8926, -9044, 7397, -8009, 7432, -7858, 7522, -8192, 8177, -8251, 8235, -8101, 7906, -7209, 9190, -8318, 9442, -9164, 8719, -8541, 8329, -8141, 8668, -8286, 8637, -8513, 7562, -7269, 8321, -8309, 8480, -8552, 8165, -8163, 9004, -9007, 8863, -8726, 9010, -8737, 9187, -8957, 9573, -9356, 9105, -9047, 9580, -9486, 9407, -9206, 8927, -8927, 9371, -9297, 8695, -8702, 9417, -9207, 8699, -8587, 9012, -8624, 8757, -8681, 7830, -7561, 9009, -8651, 9552, -9256, 9503, -9222, 8445, -8312, 8876, -9017, 9812, -9914, 9256, -9230, 9520, -9505, 9055, -8983, 8357, -7998, 8701, -8407, 9078, -8817, 8949, -8931, 8988, -9077, 9179, -9267, 8747, -8716, 8558, -8724, 9709, -9618, 8899, -9065, 8835, -8690, 9967, -9884, 10815, -10689, 10285, -10139, 9303, -9296, 8930, -8803, 9500, -9346, 10469, -10282, 10384, -10254, 9397, -9286, 8464, -8309, 9854, -9629, 9361, -9335, 9673, -9650, 10329, -10373, 9740, -10018, 9724, -9685, 7514, -7501, 8067, -7927, 8553, -8329, 5560, -5502, 9060, -8940, 9599, -9610, 9197, -9302, 8897, -8649, 8065, -7736, 9237, -9326, 10585, -10425, 11358, -11118, 9831, -9599, 9486, -9219, 10829, -10575, 10373, -10288, 10644, -10756, 10868, -11021, 10394, -10568, 10020, -10007, 7553, -7584, 8595, -8662, 8917, -8924, 7032, -6824, 9572, -9404, 9797, -9813, 9872, -9889, 9078, -8970, 9418, -9252, 10071, -10186, 11339, -11240, 11533, -11386, 10746, -10669, 11073, -10995, 11461, -11510, 10661, -10949, 11136, -11384, 11036, -11144, 10995, -11023, 11186, -11172, 11714, -11650, 10712, -10700, 10121, -10081, 9197, -8971, 10023, -9902, 10389, -10411, 9824, -9914, 9798, -9710, 10091, -10098, 10269, -10160, 11266, -11033, 11283, -11277, 10376, -10415, 11866, -11994, 12252, -12424, 11626, -11823, 12046, -12233, 11824, -11901, 11830, -11747, 11583, -11691, 11421, -11568, 11031, -11018, 10538, -10642, 9271, -9350, 9661, -9643, 9743, -9891, 9649, -9680, 8919, -8697, 9334, -9338, 10250, -10133, 10515, -10454, 10175, -10174, 10180, -10114, 11224, -11154, 10726, -10718, 10838, -10756, 9959, -9981, 10510, -10574, 10828, -10728, 10335, -10280, 9170, -9035, 10063, -10147, 10078, -10292, 8792, -8811, 7590, -7572, 7956, -7751, 7400, -7283, 6308, -6288, 7216, -7018, 7816, -7785, 8172, -8197, 8354, -8573, 7344, -7549, 9421, -9477, 9357, -9165, 9118, -9184, 8973, -9074, 9120, -9245, 9268, -9177, 8658, -8660, 9168, -9145, 9374, -9363, 8903, -9162, 9209, -8953, -1263, 1345, 4795, -4394, 3467, -3482, -2403, 2312, 6391, -6489, 5858, -6067, 3618, -3487, 5909, -6169, -2917, 2539, 7842, -7562, 4915, -4971, 6543, -6597, 3561, -3579, 3038, -3069, 5756, -5786, 5391, -5399, 3318, -3338, 8660, -8594, 3292, -3510, 6600, -6505, 187, -42, 6278, -6299, 3770, -3817, -1676, 1708, 7837, -7707, 4857, -4850, 4507, -4524, 7331, -7438, -8424, 8344, 4335, -4037, -1928, 1950, 5100, -5354, 2754, -2864, 6493, -6609, 5802, -5923, 6442, -6540, 6148, -6316, 8211, -8676, 5170, -5699, 5498, -5533, 8101, -8131, 8382, -8493, 6852, -6975, 5378, -5499, 7793, -7696, 7055, -7140, 8098, -8350, 8984, -8933, 6758, -6888, 7681, -7705, 6622, -6309, -9573, 9629, -6247, 6538, 8034, -7643, 6281, -6225, 8051, -8008, 7922, -7759, 4475, -4846, -4234, 3978, 6206, -5980, 8224, -8242, 8820, -9036, 9237, -9336, 7778, -7944, 7963, -8101, 8686, -9019, 8839, -9069, 9059, -9102, 7751, -8098, 8414, -8459, 7784, -7789, -593, 479, 4510, -4383, 9683, -9416, 8360, -8249, 9178, -9212, 8541, -8762, -282, 404, -9361, 9168, 5450, -5155, 7499, -7482, 8447, -8384, 9645, -9816, 9307, -9317, 8789, -8896, 9865, -9710, 9836, -9902, 9708, -9900, 8768, -8707, 9156, -9117, 8625, -8393, 6819, -6846, 8926, -8810, 10340, -9839, 10485, -10493, 10162, -10374, 9790, -10332, 8716, -8707, 4654, -4989, 9000, -8826, 7446, -7558, 9367, -9296, 10573, -10508, 10816, -10523, 9800, -9759, 9945, -9864, 11193, -11027, 10857, -10889, 10283, -9997, 9655, -9681, 10789, -10496, 9416, -9399, 10652, -10717, 12171, -12058, 12333, -12465, 11833, -11901, 10758, -10852, 10745, -10425, 8201, -8139, 7856, -7461, 7771, -7819, 8687, -8528, 9033, -9161, 8811, -8805, 8077, -8049, 9049, -9134, 9625, -9551, 8761, -8856, 8703, -8866, 9023, -9023, 8914, -8908, 8946, -9016, 9158, -9184, 10028, -10163, 9885, -9879, 10106, -10103, 9162, -9284, 9265, -9294, 7203, -7377, 7331, -7421, 6784, -6912, 7424, -7936, 7552, -7680, 7936, -7936, 8064, -8320, 8064, -8576, 7424, -7936, 7424, -7680, 7808, -7936, 7552, -7808, 7424, -7808, 7296, -7552, 7296, -7552, 7680, -8064, 7296, -7680, 7680, -7552, 7808, -7680, 7552, -7552, 7168, -7552, 6912, -6784, 7552, -7808, 8576, -8832, 8960, -8832, 8192, -8192, 8448, -8704, 8704, -9216, 8192, -8960, 7680, -8448, 7680, -8064, 7296, -7936, 7168, -7936, 7296, -7808, 7552, -8192, 8064, -8448, 7808, -7936, 8576, -8576, 8064, -7552, 8192, -8320, 7680, -8064, 7552, -7424, 7680, -7936, 9088, -9344, 9472, -9600, 8576, -9088, 8192, -8320, 7808, -8448, 7808, -8448, 8064, -8832, 7936, -8704, 7424, -7936, 7680, -8192, 8064, -8704, 8192, -8704, 8576, -8960, 8064, -8704, 7936, -8192, 8064, -8448, 7040, -7424, 7168, -8064, 6272, -6400, 7680, -7936, 8704, -9344, 9088, -9728, 8832, -9472, 8448, -9344, 7552, -8576, 8192, -8832, 8320, -8960, 8192, -8832, 8320, -8704, 8320, -8960, 8448, -9088, 8320, -8704, 8448, -9216, 9216, -9728, 8320, -9088, 6912, -7936, 7296, -7808, 7552, -8320, 6912, -7552, 7680, -7936, 8320, -9088, 8192, -9088, 8704, -9344, 8832, -9728, 8448, -9472, 8576, -9088, 8192, -8832, 8064, -8832, 8960, -9600, 9088, -9728, 8704, -9216, 8320, -8960, 8832, -9216, 9216, -9344, 9472, -10112, 8448, -9600, 8448, -8704, 8448, -9088, 8320, -8960, 7808, -8448, 8448, -9344, 8064, -9344, 8576, -9088, 9088, -9600, 8576, -9472, 9216, -9728, 8960, -9344, 8704, -9344, 8960, -9728, 9344, -9984, 9216, -9472, 8576, -9216, 9088, -9600, 8960, -9344, 8576, -9088, 8576, -9344, 8832, -9600, 8960, -9472, 8320, -8448, 8320, -8704, 8704, -9344, 8320, -9216, 9088, -9216, 8832, -9216, 8576, -9088, 9216, -9600, 9600, -9728, 9856, -10240, 9472, -9856, 9216, -9600, 8576, -9216, 7680, -8576, 8448, -8832, 8832, -9088, 8448, -8704, 7808, -8192, 8320, -8704, 8576, -9216, 8576, -8320, 7808, -8192, 9088, -8960, 8064, -8704, 7296, -7424, 7808, -7936, 8064, -8576, 8576, -8832, 9472, -9728, 9088, -9216, 9728, -9728, 10112, -9984, 8960, -9472, 8576, -8704, 8320, -8448, 8320, -8192, 8192, -8832, 8704, -9088, 8448, -8704, 8320, -8448, 8576, -8192, 4992, -5760, 6144, -6528, 6528, -7424, 6144, -6016, 7040, -7424, 7168, -7808, 7168, -7040, 7808, -8448, 5248, -6016, 7424, -7936, 8704, -8832, 8704, -8960, 7680, -7552, 7424, -7808, 7552, -8320, 7296, -8064, 8320, -8576, 8448, -8832, 7168, -7424, 7552, -7424, 5376, -6400, 7040, -7808, 5760, -7168, 4608, -6272, 7168, -7680, 7168, -8320, 7040, -7552, 6784, -7424, 3712, -4480, 5888, -6528, 6912, -6912, 4992, -5120, 4736, -4608, 7424, -7296, 7424, -8320, 7808, -8576, 8704, -8832, 8448, -8448, 7040, -6656, 7040, -6144, 7936, -8576, 7936, -9088, 6656, -7936, 6528, -7808, 7808, -8576, 7680, -8832, 7936, -8832, 8192, -9088, 7040, -8576, 7424, -8448, 5376, -5376, -5632, 5120, -5760, 4992, 6656, -7168, 7680, -8576, 8064, -8704, 8192, -7936, 256, -256, -5504, 5504, 3200, -3072, 7936, -8320, 8320, -8832, 8192, -8960, 7936, -9216, 8576, -9088, 8320, -9344, 8448, -9600, 8704, -9600, 7936, -8832, 8064, -8576, 6016, -6400, -640, -128, -512, -256, 6400, -7168, 8448, -8960, 8448, -8704, 7296, -7040, -6272, 5376, -7680, 7552, -2560, 2816, 7808, -8192, 7936, -9088, 8704, -9344, 8448, -9088, 8576, -8832, 8320, -9216, 9216, -10112, 9344, -9984, 9088, -9728, 8064, -8576, 6912, -7808, 5632, -6528, 6912, -8192, 8192, -8832, 9088, -9472, 8960, -9216, 8064, -8192, 3840, -4864, -2432, 1152, 4992, -5120, 7552, -8448, 8448, -9344, 8960, -9728, 8448, -9600, 8064, -9088, 8320, -9216, 9216, -9984, 9088, -9728, 8704, -9472, 8320, -9088, 7936, -9216, 7424, -8576, 8704, -9600, 8960, -9728, 9088, -9728, 9088, -9600, 8448, -8960, 7424, -8192, 6400, -8064, 6912, -6784, 7552, -8192, 8192, -8832, 7936, -8192, 7936, -8192, 7936, -8704, 8064, -8192, 8064, -8576, 7680, -8192, 7552, -7936, 7552, -7680, 7552, -8320, 7808, -8576, 8320, -8704, 7936, -8064, 7808, -8064, 8448, -8704, 7936, -8448, 7680, -8448, 7424, -8192, 7424, -7296, 3846, -2021, -3856, 277, 2787, -773, -5507, -3022, 3054, 93, -7605, -5039, 2655, -2573, -9345, -6775, 3599, -2078, -9232, -6956, 3375, -1435, -8872, -6410, 3412, 747, -8056, -5737, 3162, 1408, -8368, -5881, 2766, 250, -7630, -5090, 2245, -840, -7427, -5000, 2368, 1288, -6131, -3862, 2862, 1403, -4208, -2060, 1508, -284, -3307, -1057, 1595, 422, -3504, -1745, 2300, -3044, -3108, -1385, 2049, -853, 341, 2084, 2657, -3806, 3151, 4218, 2636, -912, 2318, 3262, -1439, -4849, -648, 603, -1547, -375, -2237, -1142, 938, 3060, -3307, -2071, -2184, 2184, -4423, -3216, -3512, -325, -4068, -2699, 849, 3907, -196, 1646, -5128, -1478, 3540, 5009, 1225, 3113, 1128, 2313, -543, 5712, -778, 569, -823, 5016, -2256, 157, 2951, -208, 913, 2186, 1547, 4453, 647, 1882, -1542, 314, -482, 1303, 2170, 2252, -1532, 10, 3217, 405, -1556, 47, 3341, 2830, -485, 859, 1829, 2666, -319, 1160, -499, 2653, 504, 2068, 742, 862, 1608, 2774, 1740, 2304, 1190, 2878, 1375, -1212, 2104, 3769, 3125, -761, 682, 4467, 3368, -2355, -2426, 3129, -2533, -626, -3182, -597, -30, -2020, -6122, -2930, -116, 1501, -6931, -3783, -973, 1094, -6209, -2936, -179, 2928, -5548, -2191, 1311, 477, -5361, -2395, 1540, -1007, -3908, -1584, -209, 2011, -2846, -88, -981, 3652, -115, 2327, -1121, 103, -574, 1568, -1139, 289, 180, 2298, -102, 2219, 1012, 4092, 964, 3628, 1785, 4160, -3082, 1450, 847, 3095, 915, -1595, 2409, 5185, -496, -3694, 5191, 6728, -2915, -6855, 3109, 4969, 1210, -2480, -377, 1158, 1456, -3979, -2991, -1502, 350, -3721, -3923, -1773, -770, -4150, -3659, -2215, -354, -4638, -1999, -1149, -233, -5169, -1109, 769, -2902, -1476, 127, 2468, 4213, -3486, -180, 2063, 3309, -2005, -429, 2210, -6128, -2829, -3931, -139, -1269, -5283, 1912, 3933, 3748, -1926, 518, 2640, -1676, -319, -22, 1736, -1306, -2420, -335, 1357, 519, -1189, -1372, -74, 1876, -1802, -655, 1000, 2648, -2796, 129, 1888, -3632, -2958, 709, 2977, -1258, -2567, 3026, 4328, 4573, -265, 3484, 5968, 61, -230, 4675, 6563, -3620, -1585, 3833, 9384, 382, -3092, -3023, 2629, -1098, -1922, -4623, -2379, -813, -764, -5256, -2170, -594, 1278, -2521, 782, -724, 2218, -2518, 770, -1582, -187, -1249, 2406, -1246, 1198, 26, 3528, -958, -90, 1027, 3768, -1040, -499, 1490, 4282, -4068, 2350, 3392, 5379, -2983, 4855, 2387, 3883, -2608, 8508, 3223, 4703, -2616, 2252, 1158, 4528, 30, -3231, -16, 3329, -545, -5304, -435, 2395, 1535, -4869, 2905, 6044, -2076, -1710, 3338, 5545, -3367, -3514, 2894, 4937, -1227, -6186, 3509, 5266, 1097, -1818, 3040, 4836, -701, -5674, 1152, 3375, 1938, 1128, 1433, 2777, -4257, 2227, 3219, 4097, -3698, -833, 1350, 3573, -1248, 836, 1736, 4492, -3779, 2346, -265, 2262, 3192, 5118, 505, 3682, -7111, -2086, -2433, 1244, -2683, -2740, -354, 2659, 6708, 1576, 2344, 4759, -2023, -1205, 1091, 3331, -4404, -500, 47, 2178, 1961, 5079, -1009, 1071, -3082, 5393, -812, 883, -1678, 3636, -2364, -475, -4955, 5672, -2722, 742, -2692, 940, 953, 3116, 2918, -2559, -322, 3294, -438, -3750, 2277, 4640, -4732, -4280, 682, 6803, -2119, -2484, -3167, 2846, 6795, -2504, -3600, -1518, 361, -730, -2974, -823, -2281, -1230, -2763, -142, -2661, 2752, -550, 1379, -1166, 2749, -830, 1640, -2090, 1811, 1350, 4017, -419, -129, 2414, 5244, -42, -2136, 4865, 6566, 2826, -1309, 3325, 3997, 1144, 1518, 2009, 2708, -720, -522, 1951, 3002, -3149, 2517, -7, 2366, -661, 1995, 542, 3633, -5635, 3476, 3267, 5608, -365, 1675, 3382, 5980, -1545, 1388, 1874, 4316, -1557, 1214, 1049, 3164, -1513, -1287, 1238, 2456, -2875, -660, 2701, 4749, -2102, -3897, 1624, 3577, -1152, -4750, 2614, 4778, -112, 778, 3137, 5222, 1423, 5381, 1976, 4363, -3872, -2916, 1665, 3516, -715, -4195, 1353, 3141, -4481, 2669, 874, 4213, -5611, -2829, -377, 3935, -3166, 2494, -276, 3609, 3112, -5598, 2621, 5524, -1489, -4233, 675, 3348, -2143, 5001, -2745, -329, 6463, 5440, -4404, -2482, 4514, -37, -4717, -3454, -2688, -1006, -4178, -2719, 751, -1853, -7334, -3566, -3696, -110, 864, 3143, -3969, 2024, -3011, 1221, 406, 3333, 1013, 3309, -310, 4012, 317, 5555, -3137, 856, -1589, 4509, -2535, 3488, -1068, 1322, -227, 635, -1169, 834, -482, 1423, -874, 1229, -2823, 133, 602, 1162, 255, 5122, 1179, 2493, -3492, 3118, 3070, 4221, 1257, 1390, 1768, 4453, -2847, 3330, 1874, 3922, 464, -408, 3173, 5283, -1093, -5475, 2871, 5244, 1129, -10050, 4343, 5711, -2320, -7781, 2446, 4632, -1269, -2773, 1593, 3646, -3871, -943, 1046, 3113, -268, -658, 2188, 4426, 73, 7734, 1592, 3626, -1518, 6276, -1592, -347, 7710, 8575, -2881, -1812, -2433, 8473, -527, 88, -8149, 7702, 1011, 2440, -4666, 4589, -2603, -483, -1233, -603, -450, 2120, 4839, 4715, 2459, 4818, -8456, 5988, 1722, 3635, -3073, 4150, 96, 1117, 5776, 1445, 203, 1828, 3952, 2017, -908, 1029, -7774, 1506, -453, 2507, -532, 997, 62, 2915, -714, 1695, -458, 3018, 4401, -6104, -1777, 1226, -1435, -3860, -1042, 642, 1775, -5409, -2646, -1276, -2430, -8457, -1484, -32, 3245, -3378, -3501, -1039, 3250, 2748, -1344, 1572, 6180, 5198, -1882, 2646, 3324, 5427, 4944, 7656, -6099, 2570, 2248, 7385, -4571, -1259, -65, 5680, -2549, 10729, -1854, 602, -914, 5574, -537, 1724, 377, -272, -1986, 338, 6001, 2992, -1562, -1062, 1158, -2295, -1847, -979, -1542, -2692, -741, 133, -1712, 1749, -2192, -62, -2978, 74, -442, 2014, 463, 2456, 2893, 5845, -6523, 3151, 591, 3538, 2685, -5514, 2812, 4218, -1948, -3960, 4186, 6209, -3601, -3202, 4735, 6894, -2617, -708, 2879, 4245, -796, 1967, -3, 1704, 5115, -812, -2456, -672, -3405, 4151, -1416, -136, -1093, -2162, -2125, 9, -8904, -3183, -630, 139, 5952, -906, -1778, -314, -2788, 437, -1590, 40, -5516, 8054, 1603, 3879, -2066, -6187, 4927, 7684, 2217, -4171, 2769, 5394, -507, -3042, 2546, 4085, -1469, -4154, 1884, 3193, -712, -7273, 2962, 3694, -4051, -6688, -2217, -49, -1976, -1780, -2003, 848, 6974, 10015, -3315, -614, -10482, 5439, -2210, 684, -3001, -1091, 213, 2340, -117, -966, 299, 2657, -3444, -46, 1013, 2854, 881, -6343, 1482, 3438, -1184, -446, -709, 2539, 6189, -5613, 1362, 6515, 1160, -5393, 10444, 14534, -5651, -4361, 5494, 11542, 6560, 1137, 2062, 7428, -5485, -1823, -183, 2645, -4863, 12340, -393, 2605, -2720, 9380, -2034, 663, 113, 537, -2842, -796, -680, 3100, -3990, -2301, -930, 2028, -3525, -1915, -1549, 2573, -3005, -358, -617, 801, -4095, -450, 2908, 1182, -26, 3763, -5239, -344, -1006, 3187, -2090, -83, 17, 2013, 1839, -206, 503, 2205, -3788, 5462, 1312, 3476, -5034, 1282, 2044, 3354, -473, 3735, -2986, -1394, -481, -3760, -3800, -1868, 2754, -10740, 1661, 2858, -3986, -10039, 653, 2853, -3595, -5655, 2546, 3341, 656, -11604, 3377, 4919, 568, -8117, 4296, 6546, 736, -8120, 3380, 6112, -4501, -4126, 4269, 6288, 1699, -589, 4418, 6822, 4061, -4114, 4804, 7168, -6631, -2903, 3973, 6557, -1144, -5049, 3448, 5399, -2441, -1490, -1345, 868, -3241, 3802, -5441, -2980, 4429, -8989, -4576, -1280, -9877, 1065, -4332, -446, 3422, -2777, -201, 2738, 817, -538, 193, 3481, -97, -1341, 824, 3875, 2240, -415, 664, 2933, 840, -2909, -136, 2568, 976, -5603, -693, 2320, 880, -10949, 3169, 6068, -2296, -10958, 1271, 6542, 1873, -3489, 4702, 10656, -841, -3504, 1134, 4451, -2686, -6635, -129, 3578, -1305, -1268, -2250, -206, -2563, -170, -5697, -3130, 2472, -1214, -7284, -4842, -2204, 8, -7807, -5355, -1631, 3126, -9686, -6084, -2264, 7803, -9650, -5726, -148, 9116, -6254, -2553, -7061, 1162, -4332, 950, 1925, 7371, -5175, -1831, 1949, 1322, -4384, -2807, 767, -418, -3128, -991, -4423, -468, -1769, 314, 6674, 7146, 856, 3464, -6690, 11311, 1916, 3967, 2658, 1735, 4367, 5985, -4878, 7063, 4102, 5728, 2075, 1729, 4744, 6311, -3309, 2467, 5385, 7071, 4285, -2499, 7212, 9272, -1063, -6847, 5308, 7948, 2721, -1825, 2239, 4069, 1679, -7689, 2071, 4079, 1294, -8337, 1195, 3045, -3423, -9697, -986, 1650, -1706, -5456, -1894, 380, 929, -5241, -3168, -731, -2544, -3052, -5871, -4473, 7989, -3891, -6319, -4692, -4545, -4489, -4925, -949, -1467, 1390, -1940, 1784, -1169, 1508, -3537, 229, 720, 2006, -3069, 681, 2638, 3100, -2731, 753, 2793, -1771, -1751, 885, -3427, 509, -3381, -758, 946, -1672, -3417, -845, -894, -745, -1742, 3051, 439, -6262, 3379, 9210, 4098, 3597, 653, 4337, 2398, 2777, -2027, 1072, -408, -1176, -2223, 578, -1093, 839, -5840, -2798, -1279, -2704, -8598, -5505, 60, -3328, -7688, -4180, 1688, -5301, -8345, -3794, -2075, 103, -10895, -6988, -6014, -2495, -9351, -5118, -1555, 2138, -5623, -259, 2890, 2669, -7278, -2708, -2821, 5038, -7915, -4778, -1702, 5534, -7244, -4328, -2167, 8230, -6524, -3099, 5125, -3556, -1613, 1774, -3081, -9956, 2007, 4638, 7248, 2516, 3709, 5087, 2044, -4021, 2807, 4097, 1245, -5324, 3704, 5402, 2050, -4909, 5689, 7709, -1837, -7995, 5091, 6829, 6778, 1787, 2993, 5252, -6073, -15, 2128, 4640, -1261, -2573, 979, 2912, -469, 320, -829, 907, -2292, 4964, -5129, -3141, 838, 9667, -6408, -4003, -539, 6694, -6161, -3931, -5682, 5889, -6693, -5068, -442, 1648, -8008, -5626, -3013, 2667, -6755, -3589, -2492, 8048, -5601, -1802, -4540, 10408, -5846, -1494, -3180, 10005, -6040, -1360, -1628, 9901, -7718, -4085, -2073, 6612, -10073, -7097, 64, 1714, -7598, -5234, 2521, -2, -6794, -4371, -2501, -4156, -3233, 1121, -703, -3350, 1815, 7058, 2338, -1609, -1562, 2588, -645, -2333, -3228, 260, 322, -732, -4354, -1259, -1093, -3399, -6256, -3563, -607, -44, -9680, -6994, -1670, -2233, -10029, -6776, 629, -3339, -11544, -7149, 384, 34, -8105, -4369, -3052, -1582, -8458, -3846, -6601, -4029, -8487, -3039, 1935, 752, -10655, -4879, 3173, 1772, -11049, -7131, 796, 1841, -10682, -7740, -2535, 1107, -7704, -4182, -8043, 3681, -2252, 1497, -1164, 4239, 3744, 7008, -704, 1361, 4294, 6737, -2006, 9887, 3599, 5898, -984, 6210, 2912, 4454, 338, 5500, 1913, 4075, -2134, 5079, 1215, 3154, 3005, 3362, 722, 3530, 1862, 529, -1319, 1750, -594, 2268, -2163, -868, 1012, -696, -4844, -2866, 10, -189, -8402, -5637, 1587, -2057, -7879, -5090, -1995, -2602, -7795, -5037, -649, 1264, -8121, -6021, 1118, 495, -9125, -6541, -399, 638, -6431, -3080, 2110, -5117, -5998, -1468, -5499, -1398, -2078, 3471, -4845, -2606, -2720, 3038, -589, -1530, -3773, 727, 149, -2216, -5775, -2705, -1355, -4379, -5390, -3729, -1286, -5822, -5069, -3190, -2960, -5453, -4166, 407, -2963, -6309, -297, 5547, -896, -2764, 281, 4302, -2120, -3852, -1851, 1770, -2082, -1255, -3289, -120, -173, -461, -5492, -3085, 2063, 73, -8916, -6689, -656, -1339, -11742, -9306, -337, -2586, -11996, -8443, 2529, -3447, -9378, -5866, -1600, -191, -9726, -4601, -6444, -1613, -7710, -3427, -147, -4987, -10424, -5591, 307, -630, -11865, -8210, 777, -3383, -10713, -7636, -1936, -3854, -7889, -4504, -3455, -5141, -4066, 1033, 4229, -432, 3922, 9042, -3044, -857, 6045, 9581, -3431, -10128, 2259, 5659, -3129, -8326, 1231, 2997, 475, -6270, -755, 1107, -450, -1251, -368, 2665, 10515, 3133, 560, 3233, -5641, 2122, 1660, 3914, -4369, -2238, 836, 1775, 1621, -2076, -2909, -1313, 3284, -1505, -6727, -4138, 2496, -5707, -7035, -5724, -243, -9216, -7885, -6514, -1603, -6661, -8326, -6891, 833, -7368, -8590, -6648, 3323, -4663, -7919, -5321, 1251, -4447, -7160, -4455, 2250, 418, -2561, 1335, 651, -2281, -2711, 1886, -2022, -6312, -2731, 629, -1177, -5580, -5195, -3162, -836, -7611, -3747, -2802, -566, -6493, -3577, -1870, -2085, -6448, -3881, 872, -4263, -2662, -521, 4664, 37, -5337, 618, 3175, -478, -3400, -1226, 1531, -1040, -5006, -1879, 924, 55, -1881, -4523, -2408, 2216, -3131, -7640, -5860, 1058, -3123, -10260, -8669, -168, -1987, -11094, -8358, -1288, -851, -9708, -6658, -3188, -3848, -10468, -5551, -1745, -910, -7363, -3744, -741, 436, -9446, -6633, -1063, -2211, -10675, -7750, 596, -4279, -10314, -7413, -2025, -2519, -8692, -5977, -1258, -3413, -5830, -1887, -703, -6834, -1584, 2932, 2809, -7226, 1832, 5381, -6322, -4284, -811, 1735, -4892, -3305, -680, 412, 829, -2499, -2711, -1553, 3419, 2854, -1368, 1539, 1540, -3009, -247, 3373, 2690, -5832, 1960, 4411, -735, 1040, 987, 2038, 67, 6551, -854, 691, 2120, 4701, -6644, -3306, -814, -796, -6440, -4978, -2060, -2363, -6620, -5362, 207, 1270, -5136, -3765, 2142, -616, -6936, -5219, -5518, 2469, -5865, -3507, -2103, 1322, -4030, -1370, 597, -3400, -2990, 95, -2467, 494, -3823, 222, 864, -4022, -1962, 578, -1326, -6295, -2722, -1470, -950, -4645, -5491, -4606, -2049, -6318, -3736, -2681, -6590, -5857, -5249, -728, -240, -8649, 1442, 6264, -743, -8159, 1992, 3245, -481, -6155, 98, 1869, -2107, -3807, -464, 1240, -1580, -2720, -2352, -886, 601, -2854, -5818, -4326, 363, -3398, -7924, -6832, 664, -2720, -9338, -7278, 2265, -2884, -8477, -6123, -6538, -3059, -7814, -3390, -1041, -4366, -4148, -800, -1046, -1310, -4963, -2748, -2041, -6225, -6172, -3758, -468, -6687, -5793, -3663, -2539, -3261, -6412, -4243, -2339, -2086, -5361, -2742, -1848, -3172, -3140, 167, 1008, -5174, -1643, 1255, -797, -5281, 525, 2678, -7346, -1918, 1570, 2688, -10, -785, -168, 853, 3771, 1890, 249, 2949, -3306, -3154, -496, 3857, -197, -2442, -739, 1831, 4686, -2711, 166, 2180, -1441, -2692, -3434, -744, 2769, -5946, -5790, -948, -2418, -243, -4487, -1468, 1042, 1194, -6529, -4888, 108, -7964, -1996, -472, -379, 3734, -959, 1342, -2324, 3675, -1710, 1055, -2709, 5441, -2017, 1750, -150, 1295, -3251, 524, -1594, -1863, -3101, 1969, 165, -7712, -5312, -2905, -1024, -2921, -7365, -5705, 1787, -3505, -7764, -6447, -434, -5587, -5328, -4395, -4667, -5435, -5893, -1092, -4559, -3820, 566, 5009, -1390, -1641, 2413, 2554, 746, -5613, 754, 1782, -390, -1571, 343, 1164, 462, 2201, -540, 360, -906, 278, -2704, -1634, 2517, -545, -4346, -3911, 1663, 1059, -6340, -4617, 1599, -929, -5940, -3877, -2751, 1697, -4945, -59, -2451, -3482, -2781, 121, -1154, -2721, -3311, -1280, -1691, -1142, -3240, -2222, -3223, 779, -3503, -2780, -3232, 2009, -5101, -3308, -1189, 3622, -4263, -2471, -3047, -2453, -2253, 53, -1697, -2779, -1292, 795, -2421, 820, 959, 2355, -4277, 321, -82, 740, -178, -999, -332, 436, 793, 710, 427, 2394, -1270, 1151, -2895, 716, -1054, -68, -3374, -1243, -189, 1229, -3275, -1137, 2096, 8612, -3703, -1784, -20, 3066, -4300, -655, -2148, 3923, -3564, -397, 326, 3762, -4281, -2616, 282, 1326, -3050, -1457, 117, -1004, -95, 3121, 12915, 11251, 1940, 4335, -15653, 13762, 616, 4294, -1817, 3894, -3105, 990, -3532, 2438, -3335, 1327, 197, 2806, -4596, -1286, 511, 273, -5471, -3763, -2381, -1979, -7084, -6128, 803, -2895, -5653, -4447, -5822, -4902, -5612, -1057, -4402, -114, -1006, 3076, 1026, 200, -64, 325, 3925, 9244, -545, 341, -2182, 8097, 887, 1726, -3735, 11668, 2403, 3286, -5132, 8487, 502, 1910, 1521, 7465, -53, -212, -2537, 977, -4225, -3186, 2443, 5821, -4694, -2505, 2295, 177, -5093, -1914, -9995, 11777, -5843, -2649, -1495, 8475, -7382, -4583, -3839, 10141, -4059, -2512, 9723, 17039, -2078, -495, -5277, 21566, -924, 1164, -1676, 11742, -2911, -754, 1384, 6510, -1867, -499, -5034, 12655, 1470, 2354, -3678, 4363, 1395, 3224, 6073, 8967, 1042, 2259, -3874, 4034, 667, 1712, 4101, 9388, 1057, 2680, -3991, 7464, -2987, 1, 1288, 9426, -2615, -1252, -2043, 7330, -3789, -2340, 4919, 4182, -2003, -129, -1602, 2577, -920, 1464, -793, 9230, -501, 1740, -3673, 8665, -1894, -143, 363, 4174, -2297, -727, 3577, 7522, 778, 2869, 13189, -6815, 3189, 6095, -10413, -9091, 884, 4583, -4648, 3265, 556, 4116, -7792, 2763, 52, 4489, 1686, 6296, -3119, 278, -3877, 5276, -3393, -1311, 1041, 2519, -5564, -4282, 112, 3576, -4739, -4086, -3111, 1824, -4871, -1115, -2418, -1027, -906, 3894, 4548, 7577, 969, 1445, 3818, 2904, 89, 1560, 9181, 6892, 3460, 4631, -5333, 1417, 6643, 8290, 5730, 3433, 2603, 4643, -9062, 4137, 5359, 4388, 3511, 7176, -1485, 1069, 11574, 7038, 1634, 4051, -7508, -1450, -1477, 1209, 10361, 921, -2580, 561, -6679, -3262, -3154, 810, -6617, 8491, 2457, 5064, 6311, -7697, -63, 3240, 3151, -9350, 2600, 5387, -1490, -1029, 1329, 3408, -4081, 16955, 4923, 5992, -3158, 1467, 5008, 6973, -4839, 3920, 4969, 7434, 7775, -1235, 4227, 6028, -4608, 3575, 2252, 4091, -796, 16426, 6024, 7127, -4913, 10628, 1244, 3898, -1513, 6293, 3550, 5444, 8244, 13627, 435, 2505, -7635, 17028, -836, 697, 4867, 14112, -2873, -1109, 3294, 13762, -349, 571, -5620, 12437, -1738, 733, 932, 18214, 276, 1369, 2612, 10703, -1391, 399, 10871, -4811, 2487, 5634, -11418, 23, 1917, 4501, -621, 9002, 2811, 6376, -3519, 4139, 2338, 6549, -1216, 2808, 1903, 6532, 1744, 1743, 393, 4241, -338, 6149, -1114, 289, 704, 4051, -989, 1091, -3050, 2205, -935, 3236, 1960, -6727, 1583, 7275, 1742, -424, 7308, 8913, 6271, -5097, 3816, 6955, -1868, -2525, 5000, 6278, -494, -10518, 6054, 8685, 5712, -1846, 6478, 10304, -3232, 2691, 10715, 11846, -4185, 174, 4040, 7591, 12209, -1936, 5377, 8762, -12936, 2669, 5930, 9126, 14861, -14279, 3071, 6003, -6441, -2935, 1071, 4709, -4625, -12239, 3519, 6405, -3357, 1214, 4248, 7872, -998, -10604, 1864, 6144, -3238, 10748, 7006, 9114, -4726, -18085, 5130, 7142, -1051, -11778, 6294, 8300, -7364, -9462, 5542, 9024, -4813, -4134, 4508, 7469, 6371, -7348, 2193, 4443, 1318, -13832, 7291, 8753, -3179, -6530, 1383, 4501, 1893, -12610, 7222, 9540, -1669, -9878, 4171, 5037, -1240, -10760, 2745, 4897, 9417, -2855, 3707, 6080, -10519, -1719, 5505, 8075, 2554, -5972, 3193, 7171, -301, -1452, 8231, 10383, -1656, -1146, 4679, 7420, -15120, 5024, 3103, 6897, 6381, 11052, 5378, 7161, -314, -950, 4795, 8876, -9472, -1905, 1644, 5519, -4006, 1272, 1563, 6267, 4292, 2745, 2103, 6169, -2445, 9668, 6648, 9098, 2783, 2161, 1517, 5802, -2405, 387, 1875, 7007, 3721, 603, 4727, 11495, 3755, 744, 10035, 13185, -1399, 658, 4042, 7890, -1185, -11126, 7662, 10293, 1093, -12484, 6545, 8967, -6393, -6354, 5918, 9792, 7928, -10119, 9400, 12003, -3480, -7878, 6474, 10208, -3808, -9926, 3297, 7308, -6429, -9703, 6885, 10012, 4583, 11060, 3115, 5952, 6860, -4272, 3960, 7508, -4539, -3060, 10770, 12757, -5212, -8271, 4019, 8605, 5206, 1660, 4181, 7993, -5470, -12463, 8883, 12276, 8507, -123, 6772, 9105, -5510, -358, 8675, 10377, 5335, -5850, 2912, 7042, -11632, -5430, 4674, 8681, -663, 13666, 7791, 8714, -5163, -3247, 3555, 6467, 4575, 8173, 3592, 6186, 2558, -3516, 6497, 9110, -5315, 4223, 10078, 11114, 188, -3798, 5568, 9029, 7162, -7283, 7592, 10928, -3985, -9286, 9273, 12269, -4304, -6136, 5143, 7125, 3471, -11764, 5873, 7967, -5397, -6498, 5675, 9030, 7780, -7937, 6442, 10929, -2958, -11663, 10150, 12332, -10731, -4733, 4280, 9167, -3315, 275, 802, 4758, -4493, 600, 1880, 6673, 4976, -1299, 4589, 9078, -4642, -11649, 10459, 13259, 4787, -4659, 2192, 6684, -5421, -4007, 2728, 8608, 5839, -5101, 4596, 10989, -4544, -12038, 7775, 10553, -1084, -6832, 2957, 7609, -54, 2172, 2891, 5828, 1491, 3767, 3867, 5981, -6073, -5485, 6058, 9393, 6544, -3198, 8546, 10066, -4928, 604, 8211, 12192, -1588, -7072, 3745, 7722, -4757, -9934, 6776, 9979, -949, -14960, 4338, 9577, -3232, -5694, 3104, 5514, -3998, 7339, 7790, 10029, -104, -6141, 4674, 8476, 1876, -6237, 3939, 7747, -5257, -3144, 6008, 10075, 4771, -823, 8788, 13049, -940, -2305, 8949, 11900, 8211, 158, 3769, 8223, -6495, 1095, 4534, 8190, -2255, -11321, 10417, 12653, -4460, 2771, 6433, 10090, -451, -11857, 6634, 9644, 2993, -7635, 7265, 10209, -1498, -15829, 9402, 11616, -404, -2680, 6436, 9741, 2751, -11909, 4494, 7497, -6761, -9539, 6261, 9935, -6988, -2839, 4751, 7594, -455, -6958, 2839, 4893, -3058, -5353, 1095, 4748, 739, -8980, 2041, 5383, 3601, -11325, 5456, 7832, -6254, -4492, 4062, 7238, -3268, -2290, 511, 3363, -4086, -676, 1546, 4904, -2062, -9876, 2914, 7418, 7434, -3787, 9971, 12369, -9092, 4928, 6237, 9705, -4400, -3724, 1375, 8665, 2147, -8436, 1379, 6977, -1709, -1654, 378, 890, -705, -7254, 2040, 5192, 7489, -5924, 1675, 5201, -6330, -59, 3957, 8032, 2492, 3190, 6829, 10992, -1300, -3058, 8979, 11808, -3225, -7491, 5020, 9676, -2071, -4426, 2625, 5766, -1523, -5531, 3993, 6613, 2769, -754, 4088, 7744, -3828, 3293, 9266, 11699, -3254, -13224, 8887, 11980, -2099, -2302, 5953, 9829, -681, 4884, 7446, 11442, 3430, -3963, 4042, 7704, 2747, -9063, 7509, 10436, 548, -4276, 8044, 10366, -3686, 1470, 4766, 9492, 1348, -9873, 5428, 8983, -2859, -5172, 7607, 10183, 6737, -6232, 8931, 12341, -7885, -290, 8046, 11115, 6108, 3744, 9211, 10672, -4224, 3610, 6475, 7791, -3404, -5089, 5563, 8980, -6860, -2935, 4914, 7454, 2711, -3012, 5461, 8093, -4525, -3974, 5519, 8381, -7600, 8608, 2345, 4285, -100, 5313, 1166, 3341, -10514, 4204, 2542, 4671, 2258, -858, 2150, 3599, 2372, -3217, 3253, 5683, -2833, -3700, 881, 4588, -4715, -7075, 2113, 5474, -2375, -5066, 3123, 7271, 2209, -4039, 8257, 10891, -2519, -8535, 5806, 8142, -904, -4421, 932, 8359, -1549, 731, -309, 5531, 316, -8243, 1672, 2353, 450, -5095, -740, 911, -1373, -2885, 1207, 4121, -1464, -7789, 4552, 9189, 1632, -4803, 8159, 11774, -3795, -4017, 9062, 12296, 2761, -768, 3743, 7704, -8140, 2983, 1603, 4862, 4205, 6534, 1320, 4511, -1839, 1353, 4029, 7123, -6156, -5872, 11091, 14379, -407, -7342, 4672, 7752, 1196, -7794, 5230, 9542, 2272, -2510, 5908, 9637, -3366, -3287, 4787, 7519, -1871, -4747, 3740, 5065, 855, -7357, 4662, 6626, 1540, -10520, 3988, 8321, -394, -1198, 7318, 11570, 1312, -5983, 8352, 11761, 1751, -7281, 3823, 7216, -255, -4199, 6148, 10979, -2189, 1995, 9257, 11600, -845, -6311, 7785, 11381, -57, -3193, 5036, 8977, -7445, 403, 4932, 7317, 2053, -1966, 6516, 8269, 403, 1979, 6169, 8650, 5998, -12356, 4601, 6846, -9673, -7608, 5360, 7355, -5141, -7297, 1890, 4090, 4677, -20, 2056, 3910, -6814, 2729, 2577, 4495, 6492, 4768, 1253, 5337, 883, 2473, 4276, 6263, -4768, -921, 2435, 5623, 4894, -2920, 7082, 10103, -3150, -5491, 7997, 10732, -3784, -3445, 1574, 8554, -1693, -2695, -1535, 4404, -2249, -2252, 2539, 3827, 1245, -610, 1345, 3845, 3970, 5093, 4156, 6970, 1788, -5249, 3803, 8190, 541, -5660, 5294, 8302, -751, -4592, 4122, 8183, -504, -2633, 6583, 10272, 1528, -2844, 2154, 5253, 1565, -5765, 3809, 6322, -10761, -8787, 5337, 7416, -1885, -7372, 7371, 9094, -2450, -4022, 2830, 5642, -4396, -856, 1835, 5525, 7090, -5751, 5165, 9029, -988, -520, 4902, 8542, -7726, 9233, 4904, 7720, 4413, -1664, 3275, 5435, -2188, -756, 1576, 4447, -3629, -6173, 3929, 8448, 2148, -1355, 5579, 8942, 976, 678, 2792, 6742, -2010, -3360, 5255, 10852, -943, -3057, 9231, 11665, -2084, 434, 7459, 11394, -3905, -3398, 4192, 9401, -177, -4815, 5572, 8066, -2098, -54, 6280, 9160, -1345, -10787, 8532, 10119, -4637, 6346, 5813, 7790, -8226, -5235, 4226, 6772, 721, -2429, 2141, 4310, -3694, 1218, 2075, 4359, -1762, -564, 3053, 5496, 2910, -3407, 1238, 6013, 436, 4325, 8386, 11781, 674, 10783, 3229, 7576, 3532, -626, 7661, 11159, 629, -3979, 3577, 8223, -7746, -1843, 2084, 8448, -119, 7058, -1439, 5131, -5608, 9109, 1560, 4554, 3337, 5314, -292, 3771, 5093, -7191, 3108, 6452, -6741, 3844, -2224, 1659, 360, -2782, 662, 3703, -4595, -5320, 639, 5427, 1232, -7563, 7001, 11523, -3433, -9714, 4427, 8128, 6102, -2820, 8985, 12159, -3793, -2444, 4410, 7039, -4109, -1110, 10093, 11289, 2219, -3708, 4031, 6839, -1130, 9168, 3532, 5914, -1387, -3573, -4, 4026, 762, -3188, 1921, 6477, -5552, -6982, 3565, 7945, -1013, -2026, 3157, 6467, 3843, 423, 2383, 5925, -9463, -3993, 3504, 7481, 9145, -2347, 7252, 11048, -4848, -511, 1308, 5572, 6033, -7003, 6335, 10641, -6516, -4442, 8724, 10654, -1026, -2865, 5044, 9467, -3028, -155, 1444, 4880, -4559, -1453, 3563, 6402, -921, -6034, 4594, 7972, -1239, -8827, 7339, 8387, 680, -13352, 5404, 8571, -2642, 4605, 798, 3209, 4412, 2979, 2428, 4772, -5650, -6831, 2184, 5200, 199, -7531, 6185, 9043, 5575, 316, 4166, 7534, -2757, -7893, 8501, 12272, 2173, -11544, 3929, 7641, 3338, -10468, 7850, 11387, 4053, -5482, 4445, 9770, -7293, -3893, 4422, 11059, 248, -9347, -2261, 3992, -2195, -9584, 1043, 4638, 7221, -5558, -486, 3895, -9100, -5815, -1230, 2868, -3910, -7746, -2541, 1994, 894, -4692, -1923, 714, 416, -6068, -2041, 1651, -2438, -6900, 2663, 6142, 3569, -869, 4541, 6971, 976, -2218, 4991, 7835, 5908, -2382, 3199, 6753, -8189, 579, 7544, 10471, 3776, -879, 7627, 10685, 1213, -12426, 4934, 7123, -4349, -1795, 390, 2983, 376, -5246, -283, 2432, -1534, -2278, 615, 3794, -976, 1154, 792, 4242, 2764, -2871, 5594, 10071, -3405, -8692, 3018, 7673, 2353, -6600, 3398, 8196, -2170, -4268, 3508, 6595, 4501, -3049, 3804, 6847, -4232, -4566, 6076, 8719, 9667, 179, 4319, 8445, -9827, 148, 371, 3773, 1375, -105, 1468, 4427, -577, -4898, 3740, 7783, -5574, 976, 5327, 7368, 7661, -4200, 7561, 9918, -1079, -11050, 3237, 6320, 483, -10040, 2139, 4521, -2023, -937, 1767, 3728, 3801, -390, 3297, 5093, -5525, -5087, 5559, 7943, -6595, -1495, 3672, 7123, -6372, 454, 7039, 9607, -1418, 6077, 6694, 9707, 610, 1865, 4320, 9338, -1332, -3138, 3339, 10717, -1692, 535, -154, 6656, -3648, 848, 678, 5224, 8652, 738, 2148, 7634, -7736, 888, -1898, 1942, -7447, 6622, -4721, -765, -5122, 6650, -2599, 1259, 1181, 299, -2227, 352, -182, 920, 544, 3115, 5895, -10436, 2076, 4595, 9382, -9189, 4395, 6967, -5154, -8330, 2403, 6554, 243, 540, 1177, 5065, -7978, 4133, 3098, 5975, -1587, 4036, 3815, 5934, -4497, 1355, 2233, 4734, -3285, 4191, 1959, 2905, 1800, 2229, 4981, 7839, 4592, 152, 3262, 5572, -1295, -5505, 3176, 6650, 3046, -5892, 3219, 7896, -1880, -3944, 2561, 7637, -5686, -349, 5302, 10950, 741, 917, 5765, 10425, 406, 186, 7328, 10619, 4670, -2156, 2806, 7516, -1969, -3030, -604, 2384, -4325, -7945, 4562, 7635, -2271, -5592, 1467, 5740, 8586, 2748, 5375, 6984, -11347, 2596, 3660, 5864, -7980, 2145, 1570, 4293, -1078, 2306, 1832, 4325, -424, 3927, 4870, 7895, -2061, -5121, 1645, 3006, -1776, -8223, 2193, 4475, 804, -3441, 6885, 11195, 3418, -10234, 7210, 10165, -7678, -5213, 9782, 12249, 4122, -1437, 5982, 9705, -303, -2865, 2051, 8149, 5734, -1467, 761, 6988, -6297, -244, 1616, 6334, 1064, 4997, -2610, 2676, -5852, 2091, -5000, -1223, -4948, 3967, -527, 3199, -1404, 2186, -968, 3526, -5084, -3803, -685, 2836, 3117, -6391, 1288, 4405, -713, -2540, -910, 1462, 7726, 4291, 794, 2743, -8011, 1820, -428, 3744, -3033, -7451, 1993, 7314, 6815, 1727, 3764, 7434, -2592, -2395, 499, 4814, 5345, -637, -271, 2577, -15316, 4325, 6447, 7859, -3872, -5533, 3953, 7511, 8394, -7292, 7131, 9781, 3278, -5526, 7156, 9464, -8599, -3996, 4796, 9813, 1053, -1730, 1768, 6661, -544, -8242, 1517, 6680, 595, -4293, 4867, 9813, -988, -2027, 5018, 9242, 4464, -2749, 336, 5991, -686, -638, 1239, 4285, -5191, -4313, 1313, 3868, 750, -2990, 1491, 4445, 1233, -4598, 3106, 5217, 1715, -4786, 1623, 4803, -4577, -339, -1130, 2372, 4, -4814, 1239, 4945, -3025, 1500, 2796, 6673, -579, 1750, 1752, 5432, -838, 676, 316, 2814, -868, -5803, 1989, 7094, 1944, 653, 5170, 8331, 447, -1932, 9044, 11152, -4841, -2434, 3806, 6372, -1959, -239, 111, 5768, 3414, -2302, -1410, 4917, -6591, -1217, -574, 4128, 1667, -7615, -1227, 4922, 858, -452, -3464, 133, -7074, -12805, 2897, 6045, -1781, -4055, -2304, 1735, -432, 2836, -3006, -988, -4507, 3740, -3758, -1222, 155, 1109, -4176, -1464, 4762, -1917, -2389, 1734, -9493, -8800, -4194, 1344, -1639, -4873, 1561, 7245, 9006, -12696, 1517, 6435, -4139, -9514, -741, 3706, -5661, -12294, 421, 2695, -2314, -16051, 3335, 5063, -2464, -3659, 1285, 3547, -3920, -1219, 1865, 5151, 3198, 2220, 7441, 10789, -4625, -2544, 4180, 9675, 9066, -5054, 2684, 6533, -8372, -1155, 483, 4338, -3186, -6015, 3305, 8217, -1551, 2481, 3873, 8871, 2148, -4859, -538, 5517, 723, 1200, 4470, 8369, -2768, 2612, 1629, 4686, -4194, -3921, 1560, 4443, 2387, -10872, 5624, 7502, 2878, -8181, 453, 4232, 3353, -5780, -628, 2430, -5487, -2177, 500, 3956, -2907, -11224, 1670, 6838, -3798, 193, 556, 5296, -3623, -1907, -1876, 1626, 6673, -2383, -319, 5147, -1281, -1027, 6316, 10229, 1704, -3228, 5792, 9595, -339, 2223, 6260, 9813, 942, 45, 2134, 8563, -3409, 2850, -4887, 1542, -152, 1869, -1821, 2532, 3885, 5201, -5548, -63, -9670, 4665, -2050, 1700, -5939, -640, 387, 2741, -3728, -7543, -1321, 2099, 2223, -2814, 210, 2850, 1422, -7533, -2429, 1919, -4727, -5204, -755, 2328, 4144, -3065, -4617, -822, -1003, -1148, -9789, -5205, -2284, -5777, -3326, 1005, 2452, -6835, -3685, 46, -5837, -3654, -4079, 690, -10263, 2148, -1066, 1624, -127, -808, -1396, 583, -1474, -1027, 2097, 4508, 1039, -4608, 121, 3598, -1184, -13651, 5232, 9448, 5202, -2132, 2296, 7373, -8237, -1998, 1453, 4814, -293, -3677, 3447, 7470, -827, -6322, 3304, 8208, -1460, -13994, 3635, 9070, 506, -1271, 1130, 7451, -3196, -6190, 4034, 8746, 5401, 283, 1524, 6687, -3464, 4932, -846, 1706, -6218, 8525, 2428, 4209, -1248, -778, 1241, 3530, -2835, 691, -1153, 1900, 9050, -1954, 1764, 6003, 583, -2080, 3486, 7450, -6880, -4647, -587, 3724, 907, 3916, -5415, -1221, 1641, -1120, -700, 5136, 1026, -2829, 4772, 8866, 1074, -183, 1275, 5719, -1237, -8067, 5365, 10294, -2066, -7286, 1287, 9317, -3213, -5874, -4374, 804, -5115, -3118, -2274, 836, 9880, -4677, -3984, -410, -9063, -6275, -1353, 1591, -9982, -4426, 1393, 4872, -2775, -2016, -962, 2467, -272, -8032, 1530, 4770, -1401, -5952, -1348, 3252, -5314, -9904, 1216, 4222, 7575, -1459, -2566, 645, -1172, -6159, -8485, -3685, -241, -5775, -5339, -2455, 1459, -5997, -4891, -2433, -2397, -7072, -4601, -6, -7202, 6669, -3222, 812, -6613, 2159, -2399, 1301, -588, -1652, 1041, 4349, 1289, -2280, 2855, 5642, 6927, -4048, 4435, 7273, -7160, -3292, 3225, 7506, 3000, 678, 2588, 6330, -4887, -1316, 4146, 6861, 1846, -6686, 4222, 7935, -452, -3155, 2876, 6253, -3380, -5348, 1412, 6249, 11432, -1449, 3025, 6411, -5909, -10142, 2293, 7145, -5539, -3085, 289, 4055, -2425, -2684, 366, 3712, 4794, 7877, -3254, -283, -4352, 7690, -2377, -328, -835, 829, -793, 2697, 2679, -1395, 3038, 7310, -5650, 3023, -1422, 1886, 112, -1008, -556, 4251, 2927, -3048, -44, 5176, -443, -4862, 3923, 8240, 3818, -4071, 1695, 6304, -6330, -4552, 3426, 7713, -2256, -3624, 123, 7466, -1733, 468, -4940, 921, 447, 6113, -3195, 704, -185, 1165, -3143, 1569, -2561, -2622, -3892, 134, 2006, 2976, -4713, 66, 239, 6640, -5287, -1084, -5201, 1928, -3060, 667, -917, 3234, -4176, 801, -5847, 2729, -1660, 1857, 4547, 3293, -1986, 2404, 4687, 3273, -7124, -1647, -3378, 185, -5482, -1515, -760, -117, -6133, -2702, 2304, 3003, -5391, -431, 2147, 8400, -5905, -757, -241, 5428, -5080, 167, -1434, 2677, -1821, 2498, -2582, 355, 1198, 5599, 2018, -1758, 242, 4640, -2818, -2506, -800, 4692, 1192, -729, 520, 5999, -386, -4305, 1926, 5890, -716, -3652, 1465, 5892, 5292, -1674, 616, 5653, -1825, 992, -594, 4677, 4317, -113, -1183, 3479, -748, -762, -697, 4428, -2493, -2195, -1021, 4592, -1426, 3024, -2308, 4317, 8911, 3907, -5011, 7, -5297, 3433, -4061, -78, -5185, 959, -4486, 770, 5581, -1970, -1337, 3751, 243, -1570, -3748, 265, -1251, 5304, -5636, -493, 1173, 4584, -3904, 1268, -46, -145, -2908, 2368, 2108, -2993, -2113, 3620, 1036, -3647, -3922, 1343, 717, 2520, -2923, 3672, 3112, 4021, -4161, -1007, -1637, 5916, -4491, -1998, 2180, 4779, -5925, -4257, 1470, 4906, -5694, -4407, 51, 6087, -5397, -4561, 35, 5702, -5216, -4400, 947, 5284, -4439, -3690, 1488, 5916, -4024, -2759, 440, 6752, -3113, -1376, -139, 6584, -3205, -1387, 2597, 3147, -3741, -2135, 3329, 2108, -3762, -2071, 1505, 3584, -2619, -112, 2403, 4164, -2151, -398, 1568, 4205, -2280, -1973, 292, 3686, -2085, -2360, 4742, 952, -2653, -2809, 1325, -643, -3826, -3906, 3751, -1241, -3323, -4018, 4953, 151, -3002, -4543, 4863, 1415, -4232, -5446, 4660, 188, -3428, -4710, 161, 402, -2688, -3277, 6462, 2430, -1485, -2296, -3124, 1626, -724, -1550, 2830, 2270, -2129, -2788, 5403, 2086, -3858, -3109, 1867, 1888, -5066, -2049, 2149, 2897, -2275, -1686, 3037, 2360, -2815, -3120, 410, 2976, -3740, -3077, 2506, 1901, -3299, -3068, 3177, 1274, -4190, -3772, 2193, 1805, -4528, -4009, 4040, 1691, -4681, -4262, 3587, 1932, -3992, -3631, 2540, 1308, -2504, -2500, 2601, 1450, -2662, -2826, 2751, 2151, -2072, -1688, 2550, 2940, -2758, -541, 4841, 2519, -3468, 2349, -8268, 4494, -1031, 2705, 1479, 1814, -3331, -980, -18, 3788, -2176, -645, -3026, 2563, -1805, -1242, 502, 4162, -1855, -1085, 775, 6974, 252, 688, 800, 4776, 219, 685, 3962, 2456, -326, 747, -2435, 2950, 520, 776, -3917, 3385, -429, -122, 103, 1358, -1221, -148, 1948, 3835, -386, 2003, 541, 2538, 669, 1952, -1379, -234, 1374, 1070, 739, 1900, 2435, 2214, -218, 3983, 2368, 3039, -4175, 484, -1366, -697, 2617, 633, -2415, -3229, 2422, -1202, -1549, -3635, 2370, -1349, -2195, -3014, 1061, -2389, -495, -2363, -2222, -1581, -731, -2634, 1252, -700, 1038, -797, -3560, -3139, 636, -422, 964, -219, -281, -358, 1745, 1267, -1810, 1128, -2080, -4276, -4852, 697, -1562, -3918, 170, 1551, -1512, -1225, -665, -1127, -552, -3150, -2196, -1060, -613, -2353, -2172, -953, 537, -332, -2411, -1540, 447, 685, -2424, -1557, 283, -1001, -2435, -1760, 518, -1324, -2222, -896, 806, 944, 1042, 651, 354, -465, 204, -815, 2134, 705, 2096, 2276, -3997, 1194, -1196, 2704, 4107, -5344, -4078, 2667, -6233, -7539, 308, 4182, 3186, -2030, -474, 1531, 476, -951, 162, 1834, -2534, -2398, -33, 805, 4593, -3284, 529, 1437, 2538, -1732, 2824, 3986, -4776, -2778, 3175, 5106, 1522, -4801, 2344, 4228, 941, -5321, 3659, 2923, 232, 104, 3502, 871, -1006, 3485, 265, -1720, 715, -1882, -41, 1308, -2514, -3607, 1816, 3690, -1245, -3212, 2104, 2871, 2191, -3925, 3465, 3815, -540, -4889, 2972, 4285, 1436, -234, 286, 1924, -479, -2333, -1863, -1455, -758, 2259, 149, 16, -723, -2260, -1646, -1307, 2393, 2242, -311, -285, -343, 5273, 2400, 1835, -1750, 3516, 2324, 2153, 1195, 758, 2823, 2640, 1659, 1283, 3395, 3291, 2067, 2522, -677, 3698, -4238, 2346, -3710, 2888, 369, 3214, 3098, 6639, -1035, 2874, 2506, 4273, 22, -36, -1493, 641, -1301, 16, -1628, 830, 1601, 2749, -1146, -412, 2542, 3517, 245, 243, -695, 2805, 438, 885, -502, -935, -727, 1985, 194, 2283, 4370, 4749, 2134, -1894, 2647, 1990, 1257, 554, 2449, 4455, -6463, -4671, -1415, 4159, -278, -1035, -5962, 2137, -657, -1488, -1548, 3001, -1558, -4672, -2327, -420, 2517, -4800, -417, 684, -3685, 1087, 222, 539, 1225, -2082, -43, 503, 1326, -5888, 1809, 3467, -2410, -5665, 1641, 4252, -2404, -2726, 361, 1792, 2319, 1259, 404, -793, 6203, 4778, 2307, -892, -1028, 5349, 1835, -567, -2273, 2844, -183, -361, 573, 1515, 696, 1303, -11, 1110, 1168, 2250, -959, -859, 609, 1732, -966, -2684, -363, 1189, 3088, 341, 270, 1879, 2846, 150, 1572, 1643, -271, -1457, 1094, 1149, 1866, -153, 872, 1594, 2095, -2833, 1224, 1694, 1579, -725, 1483, 1835, -829, -1541, 253, 1206, 2675, -2042, 822, 1325, 343, -353, 2643, 2931, 246, -2035, -224, 3185, -2917, -2894, -2830, 2846, 524, -3483, 2947, 6428, -495, -2836, 3302, 5562, -3386, 1739, 2965, 6470, -1155, 3325, -1469, 1894, 3244, 2308, -1379, -503, 3481, 3057, -341, -773, 483, 2877, -368, -370, 3495, 2218, 20, 1696, 1838, 4116, 4700, 6504, -7506, 2561, 4383, 5003, 898, 5709, 2079, 5474, -5234, 1350, -3334, 1583, 3257, 3153, -6669, 2049, -3277, 1985, -1470, 4101, -4394, 4038, -1380, 709, 4195, -528, -89, -488, 510, -742, 2406, 639, 2336, 1390, -416, -895, 470, 717, -831, 177, -2251, -507, 452, 3086, 3085, 7466, 3116, 5478, -2109, 6191, 1923, 4353, 1607, -3313, 1515, 1872, -1625, -6122, 1533, 709, -2696, -3067, 309, 672, -2634, -745, 404, 1370, -1577, -2237, -258, 820, 946, -337, 782, 2089, -1060, 1869, -101, 875, 1505, 701, 453, -185, 2592, 3946, 144, -1712, 4212, 3136, -209, -2132, -2147, 3279, 486, -206, 948, 112, 859, 983, -1115, -653, 1271, 2646, 2551, 3459, -686, 706, 1338, 2081, -16, 860, -182, -376, 2681, 2447, 2162, 486, 915, 1504, -977, -83, -963, 1178, -190, -2532, 1415, 3348, 1638, -1552, 3789, 6816, -4900, -2648, 2923, 6960, -2262, 230, -1276, 3239, 809, 573, -2250, 671, 1019, -2809, -1204, 922, 302, -3936, -184, 1522, -973, -2101, 1329, 3487, 732, -6749, 3455, 7437, 5399, 2337, 2573, 6026, 1603, 13499, 2462, 7590, -10442, 11636, -462, 5224, 717, 795, -6149, 2884, -1256, 3014, -2217, 2468, -2299, 4658, -1193, 1791, -2281, 1102, 275, 941, 3235, 3361, 737, -631, 1270, 1598, -430, -1918, -2688, 1345, -301, -294, -3184, 416, 939, 1309, 5082, 5853, 5647, 7283, -6655, 2876, 3811, 7638, -1545, -118, 32, 3730, -453, 1295, 2751, 4856, -2163, -1950, 273, 1883, 306, -1729, 1350, 3222, -3351, -1642, 1106, 2212, 53, -1933, 760, 1191, 3237, 846, 119, 280, 1020, 4891, -468, -1160, 2616, 5477, -495, -1544, -359, 2467, 1065, -2111, 573, 2453, 51, -1880, -1966, 6616, -1303, -2413, -2116, 3449, -1049, -1030, 1836, 2445, 290, 1423, -3232, 325, -1281, 242, 583, 1293, -1697, -539, 2469, -139, 701, 1192, -1894, -3741, -308, -274, -2234, -3121, 427, 871, 2202, -3511, 1811, 4377, -4871, 96, -1113, 3417, 1254, 967, -1416, 3726, 24, 2562, 265, 4408, 523, 4307, 218, 3254, 780, 2024, 5, 3029, 312, 17, 759, 3413, 1148, -1753, 676, 4394, 12620, -1662, 2309, 6720, 2479, -1658, 3358, 8402, -11951, -1798, 1788, 6894, 3702, 3760, -5994, 2405, -6717, 3938, -2953, 340, -4002, 3077, -4108, -1383, 3186, 4891, -1425, -439, 2722, 2680, 638, 839, 1269, 2470, 1412, 1519, 529, 2600, 2123, 3220, -1569, 2418, 2634, 3506, 2604, -2925, 5230, 7699, -7014, -5335, 2920, 7194, -710, -20, -1554, 3367, 476, -1268, 1651, 4276, -1057, 414, 1035, 2438, -387, 997, 193, 1591, -2656, 1795, 430, 1439, -2622, 4294, 769, 1753, 4014, -1983, 626, 1650, 249, -5293, -369, 645, 649, -5938, -685, -448, -122, -4088, 1500, -227, 2310, -4559, 474, -937, 204, -4316, -140, -1236, -1834, -1728, -955, -220, 1571, -4230, -125, 1223, -796, -3858, -1477, 90, 157, -2902, -2547, -906, 1447, -1613, -672, 109, 1159, 2285, 2219, 3346, -3100, 1221, 1503, 2795, 2686, -2759, 875, 2659, -3728, -3545, -2729, 1658, 1476, -1815, -966, 4122, 385, -686, 1850, 5807, -2315, -6, 1734, 4233, -829, -74, 1389, 4461, -801, 3035, 3059, 5769, -1423, -1654, 1405, 4115, 3720, -7143, 2015, 5656, 2062, -17419, 4225, 9785, -8514, -12867, 1757, 7827, 1086, -5382, -6087, 2570, -2931, -7931, -2328, 1484, -1452, -6634, -5152, -2979, 1233, 1072, -2352, -1864, 1991, 1611, -1299, -1223, 1026, 2997, -622, -42, 2871, 3136, 318, 2328, -606, 2474, 836, 2827, 1976, 657, 2261, 4781, -5611, -1041, 1848, 5168, -1089, -3287, -1415, 3464, -932, -1219, 805, 4443, -995, -295, 496, 2031, -1717, -571, -117, 596, 745, -158, 1071, 1814, -825, 1742, -970, 388, 2447, 2993, -1692, 204, -1858, 455, 221, 1936, -92, 1447, -225, 773, 3018, 534, 1561, 752, 2363, -1600, 2215, 1078, 1518, -3952, 1761, 1422, -2197, -5201, -424, 1104, -292, -2149, -1487, -367, -43, -3582, -2096, -231, -597, -4159, -1843, 85, 1153, -2996, 540, 1637, 291, -1372, 2041, 3989, -5039, -1461, 591, 2674, -882, -985, -367, 356, 228, -1443, -821, 1872, 1576, -3838, -836, 2729, 325, -3777, 2393, 6469, -2265, -2817, 1367, 4221, 2418, -2031, 1697, 3897, 78, -2457, 1661, 4063, -2336, -1832, 1346, 3912, 2010, -3056, 1745, 5087, 2479, -6522, 2901, 7671, -2410, -3818, 111, 5276, 259, -5141, -5216, 3556, -551, -3242, -2395, 2344, 402, -3305, -4920, -1344, -837, -5348, -3304, -1238, -716, -3165, -2490, -327, -1279, -3259, -1255, 1241, 1088, -2564, 841, 3896, -1119, -1847, -99, 2949, 2402, -594, 923, 3077, -3918, 169, 1608, 4371, -1644, 1403, -1509, 2927, 1268, 2536, -2360, 2200, 1043, 4497, -1217, 1998, -280, 2383, -6, 1306, 2096, 1627, 135, 1245, 595, -2230, -1021, 517, 1573, -4673, -1231, 505, 1306, 391, 666, 2456, 782, -1517, -655, 438, 1200, -3412, 764, 1168, 2361, -3004, 2463, 1984, -851, -4132, 2059, 2045, 714, -376, -798, 1333, -1632, -750, -2509, 216, -1362, -1452, -1113, 458, -644, -616, -1059, 306, 215, 717, -751, -174, 1062, 737, -1432, -309, 1377, 2211, -1951, -819, 525, 2658, 150, 94, -1899, 2219, -701, 606, -1489, 2863, -1471, 370, -72, 1870, -1878, 664, -477, 4234, -2341, 749, 970, 3743, -2348, 240, 2492, 3363, -2294, 138, 2397, 5116, -1085, 1031, 1937, 4595, 1101, 2853, 392, 1787, 312, 4811, -3673, 1916, -2509, 3866, 1211, -552, -4228, 4755, -1888, 773, -3263, 3348, -680, -2870, -5090, -173, -1302, -4292, -3976, -1154, -1933, -3990, -3934, -1210, -1709, -2586, -2878, -413, -3, -3879, -1120, 1477, 2067, -1655, -2259, 1043, 2380, 1314, -1305, 1917, -2518, 347, -608, 4197, -1307, 1009, -2713, 2891, 1507, 193, -2705, 3217, -91, 1905, -1922, 2829, -1652, 1384, -972, 1503, 461, -15, -1541, 711, -840, 1696, 89, 1908, 1751, 4648, 2127, 4386, 232, 3004, 800, 3587, 3223, 2937, 328, 2701, -2630, 5370, 2120, 3080, 756, 1989, 2619, 2666, 1227, 1118, 3107, 3934, -1464, -660, 63, 2992, 362, 120, -1095, 821, -1811, 1233, 56, 275, -1154, 266, -2548, -1820, 209, -487, -2225, -2551, -172, 249, -3761, -4177, 421, -1104, -3532, -3775, -872, 979, -1960, -2081, 1142, 1426, -1503, -232, 438, 1013, -1882, -384, 536, -1460, -2833, -680, -642, 38, -2455, 765, -699, -1127, -2513, 339, 848, -345, -2254, 295, 65, -1340, -1029, 1117, -1335, -3609, 1117, 2838, -1132, -3642, 168, 5475, -2624, -2004, -2756, 4389, 1984, -3646, -3695, 4967, -2816, -1306, -3319, 4085, -1997, -3102, -3974, 1542, -3432, -4148, -3516, 278, -1314, -3578, -3352, -148, -1000, -3761, -4384, -2127, -1451, -3592, -4191, -1846, 2369, -2608, -3039, -387, 1494, -1855, -3537, 715, -1429, -359, -4178, 1700, -2254, 561, -4157, 2302, 2197, -1551, -3883, 1817, 1309, -2886, -2259, 1989, -784, -2128, -1349, 1249, -1696, -2721, -2344, 345, 974, -2965, 93, 2372, 3384, 364, 2519, 4207, -2041, -64, 1891, 3952, 1945, -3374, -83, 2043, -4341, -4078, 1667, 2865, 1317, -2127, 2566, 3824, 350, -1076, 1756, 4662, 3453, 1785, -1460, 2619, -115, 736, -1801, 608, -2444, -1972, 506, 1219, -1780, -459, -1559, 370, 2063, -384, -2971, -1484, -2150, -3223, -3732, -2329, -65, -1642, -3910, -3149, -2245, -477, -3197, -2219, -1349, -2472, -2665, -1160, 96, -3741, -4032, -1741, 1467, -2024, -4179, -1469, -932, -3866, -3997, -775, 901, -4603, -3011, -158, 560, -5073, -3057, -560, -1668, -3774, -1315, 279, -1409, -3950, 908, 1310, -683, -4815, -797, 3143, -2160, -2786, -3625, 3419, 1671, -2483, -3615, 4070, -865, -3647, -2890, 2957, -1134, -3432, -2728, 1438, -3017, -3839, -2720, 427, -459, -2419, -3179, -686, 779, -2208, -4344, -2637, -194, -1959, -5598, -3457, 1115, -1723, -4033, -1738, 697, -2663, -3959, 59, -373, -3275, -4984, 289, -1153, -1056, -4562, 1552, -1074, 149, -3466, 1294, 184, -2687, -2453, 570, 237, -2802, -1627, 439, -2152, -1686, -3586, -1034, -376, -2838, -2370, 545, 3420, -5913, -2, 2463, -1468, -7205, -105, 2481, -1161, -3004, -541, 2156, -2991, -2018, 412, 2654, 22, 719, 1407, 4005, 717, 302, -1987, 3181, 1937, -295, -3240, 2233, -1380, -1984, -2886, 231, -738, 1652, -1733, -605, 107, 3385, -2607, -3, -362, 3584, -6543, -1921, -1988, 1666, -4888, -1818, -611, 845, -3976, -2837, 438, 3128, -4145, -2949, 527, 3881, -5044, -3431, -4088, 3264, -7495, -4122, 1952, 4288, -4618, -1453, -2330, 285, -6096, -2520, 1547, 908, -3623, -921, 670, -593, -2871, -1210, -1792, -1271, -472, 342, -763, -2708, 1137, 1121, -1275, -676, -1097, 2563, -4023, -724, -3458, 3703, 1514, -1623, -5285, 1674, -1517, -4170, -2673, 885, -909, -3105, -1715, 1404, -44, -1441, -1899, 773, -1142, -711, -3487, -1126, -277, 15, -3966, -2064, -339, 378, -5172, -3762, -636, -99, -4429, -2665, -274, -938, -4812, -1736, -749, -1254, -5426, -1556, -371, -2624, -4563, 481, -1844, 1173, -4025, -502, -172, -1837, -4206, -2197, -961, -2672, -3146, -1448, -1292, -1381, -4028, -1900, -483, -215, -3949, -1498, 1, -3185, -3487, -1395, 103, -2979, -3427, -1910, -988, -1364, -4822, -3302, -3735, 600, -3925, -1334, -987, 2208, -2983, -167, -2934, 1515, -6394, -1110, 61, -983, -5345, 262, 1108, -383, -2961, 578, 909, -428, -3137, -1028, -2405, -2104, -4141, -742, 1426, -1175, -7368, -341, -2440, -616, -6169, -1828, 92, 390, -4839, -3112, 1277, -2526, -5016, -3468, -2950, 1179, -4782, -2887, 2363, 5294, -8474, -4089, -2883, 4012, -5513, -1232, -3099, 1173, -4734, 519, -1053, -817, -5480, -582, -171, -2149, -3000, 107, -1441, -532, -1173, 90, 490, 15, 1211, 1068, -1808, 440, 55, 3805, -4278, -927, -2123, 5272, 1605, -317, -5919, 1162, -2344, 3101, -1477, 2040, -1026, -1322, -2528, 348, -467, 906, -3383, -874, -963, 1689, -4577, -2125, -3269, 1300, -3206, -1630, -137, 1974, -2786, -1831, -240, 3185, -3208, -1690, 501, 2845, -4271, -1548, -2357, 3783, -6669, -3270, 1768, 2459, -4825, -1591, -3089, 334, -5367, -3063, -1188, 1248, -6429, -4646, -2967, 1052, -6192, -4204, 131, 1795, -5963, -4039, -2726, 1175, -5688, -3241, -507, -918, -6124, -3744, -981, -840, -6632, -5243, -2997, -921, -8333, -6812, -2590, -884, -9128, -7348, -864, 1437, -6350, -4378, -932, -136, -7458, -3971, -283, 440, -7167, -3291, 911, -256, -5867, -3364, 309, -323, -4946, -2560, 274, 2640, -5362, -3012, -1450, 684, -8319, -2224, -74, 554, -5194, -2091, -253, 2758, -4316, -2365, 4039, 1105, -3343, -1463, 2114, 2310, -4462, -2224, 7864, 7367, -9181, -5030, -11249, 8203, -7817, -3997, -6514, 1914, -6144, -792, 16, 1485, -5944, 166, 546, 131, -1402, 2700, -1334, 1092, -49, 1869, 561, -99, 874, 1848, -2952, -2187, 151, 5111, -4608, -2504, -2536, 4729, 1783, 211, -6247, 38, -1240, 1241, -2362, 841, -724, 7586, -4669, -1854, 1480, 7935, -4312, -2090, -3547, 16012, -2744, -763, -3331, 6330, -4728, -3879, -98, 7196, -2251, -1969, -2347, 3752, -3910, -2372, 3282, 9636, -4109, -1829, 453, 9291, -6796, -3742, -3438, 8571, -7654, -5201, -2535, 9976, -8142, -5910, -1664, 11535, -7448, -5332, 4772, 11818, -8682, -6652, -3076, 13497, -7612, -5909, -2547, 11211, -6242, -3949, 1260, 12056, -5766, -3532, -2175, 14191, -5356, -3522, -1682, 4752, -8265, -6393, 3432, 12322, -7020, -5189, -6346, 8108, -6676, -4535, -1040, 6119, -6886, -4364, -2756, 6484, -7208, -4384, 452, 13061, -5438, -3409, -183, 5986, -7510, -5936, 778, 5958, -6891, -5322, -1713, 3611, -8804, -4676, 2244, 6334, -4618, -3167, -2558, 5543, -4994, -3908, 1652, 4173, -4302, -3289, 5958, 5077, -2937, -1160, 8119, -7051, -8017, -4123, -9226, -7394, -7224, -3802, -6288, -922, -5565, -1607, 657, 2077, -5420, 178, -1126, 3015, -3573, 1339, -2725, 3549, -704, 1149, -1125, 1728, -218, 980, -2923, 824, -1359, 2376, -4605, 2017, -3936, 1939, 3108, 1011, -5086, 378, 584, 11293, -1795, 1699, 1576, 6045, -4850, -1654, 13651, 974, -5177, -3326, -2319, 1283, -5574, -3799, 3161, 5241, -3222, -2454, -3264, 14173, 1099, 2075, -1165, 9624, -3626, -1889, 9530, 8045, -4673, -1941, -5354, 3965, -6202, -2987, 5036, 7535, -7338, -4490, -6798, 5518, -9047, -6063, -3322, 3933, -9147, -6372, 3619, 595, -9242, -6815, 4397, -2767, -9890, -8083, -2022, 6452, -6592, -4464, 2763, 7624, -5697, -4129, -1940, 2368, -5828, -4445, -7352, 5773, -6842, -4774, 4383, -382, -8863, -6824, -3691, 1953, -7077, -4771, -74, 11567, -4633, -2971, -3588, 7058, -7163, -5088, -824, 4368, -7605, -5582, 4050, 9290, -7689, -6205, -6229, 11379, -6806, -5792, -1609, 10541, -7905, -5505, 1670, 12039, -4657, -2832, -2151, 8597, -6482, -4805, -566, 16387, -2858, -1379, 2552, 13351, -2936, -991, 3074, -306, -6871, -3562, -5039, -185, -5704, -3301, -6365, 6915, -5694, -3086, -2012, 364, -5656, -726, 890, 1740, -3180, 1234, -1348, 1589, -1793, 47, 131, 14387, 28, 2537, -3063, 9280, -2082, 2399, -4554, 5188, -5251, 1265, 8614, 5195, -1330, 3731, 162, 12307, 1983, 6980, -6983, 1152, -2509, 779, 2632, 1472, -3461, -1632, -55, -8711, -4476, -2382, 14598, 1858, 502, 1318, 713, 3534, 2104, 2934, -14700, 3598, 811, 2004, 8541, -953, -5578, -1826, -8109, 1820, -5213, -1065, 6394, -7446, -7517, -3988, -8122, -5143, -6936, -3396, -1997, 9465, -4292, -519, -2809, 874, -6716, -3723, 4975, -3267, -6249, -3770, -1246, 9190, -3590, -1358, -627, -7508, -4487, -3534, 592, -6612, -2657, -1701, -5744, -2138, -4490, -1549, -4425, 9102, -3932, -1034, 9929, -2838, -3815, -2168, 1972, -5778, -4229, -3121, -12481, -4771, -3873, -2272, 1119, -9004, -5785, -4353, 98, -3473, -5534, -4439, -918, -7322, -6186, -4558, 8211, 4784, -3169, 54, -7259, 4980, -2568, 14, 10063, -2039, -4976, -2489, 1286, -49, -4265, -2613, -3595, 697, -4308, -1821, -6332, 1424, -4149, -1347, 2171, 13023, -940, 1050, -8930, 7969, -2766, -320, -7341, -1492, -5768, -1636, 2548, 93, -3366, 1136, 13353, 9278, 790, 3734, -1881, 10857, 112, 2961, -7992, 6254, -2568, 2442, -5835, 4539, -5964, 2468, 12160, 5519, 3276, 8043, -4943, 4199, 4328, 9459, -11881, -2554, 767, 4081, -67, -8230, -1737, 871, -1551, -10397, -2353, 521, 6882, -9622, 2531, 3702, 2661, -12246, 2171, 3708, -10573, -5778, 1167, 2557, 5478, -9573, -4826, -936, -5467, -10831, -4452, -1072, 4253, 1507, -5275, -1663, 13712, -2019, -2956, -551, -2561, -3074, -1617, 852, -13651, -4091, -968, 878, 13256, -3192, -3037, -204, -1266, -6084, -3849, -866, 11925, 10627, 4335, 6550, -5935, 13552, 5304, 7250, 5811, -957, -2025, 2269, -6018, -3671, -4427, -936, -381, 16646, 2468, 4164, -3808, 1638, 809, 2779, -935, 490, -1320, 1184, 14610, 3566, 630, 2018, -585, 7592, 1170, 2423, -8051, 6239, 1497, 3162, 10227, -9065, -1729, 1670, -6124, -10047, -1372, 1274, -1949, -8932, -3431, -1218, 4146, -16830, -2896, -1195, -1578, -10030, -3755, -1375, 13683, -5671, -914, 298, -1172, -4989, -562, 1114, -15415, -5352, 136, 2157, -4835, -2317, -4029, -558, 1602, -3890, -3026, 810, 15252, -4300, 29, 2612, -2106, -7470, -328, 1968, -10429, -1791, -660, 3295, -4938, -2128, -6272, 2961, 10296, -9567, 2258, 7590, -4504, -13533, 4736, 9304, -9701, -6750, 1811, 4576, -1205, -3200, -1373, 606, 2888, -368, -2054, 239, 11039, 1647, 4343, 5176, 3486, 988, 3824, 6226, -13064, 1564, 3359, 5512, -1245, -4923, -3325, -378, 182, -8072, -2367, 559, 1180, -8128, -3905, -429, 9831, 157, 653, 2595, -2430, -9810, 1584, 3380, -5315, -6546, 1260, 2826, 7269, -5475, -1165, 2818, -490, -7866, -1317, 3054, 12512, -2212, 5801, 8088, -5337, -2171, 6635, 9087, -2939, -6058, -80, 4848, 12664, -1107, 389, 3529, 3682, -1046, 2917, 4627, -15829, 1555, 3794, 5975, -3484, -990, -2510, 1252, 10047, -6185, 1423, 2692, 194, -13251, 1876, 2677, -7709, -5209, 2581, 3820, 1404, -7778, -229, 2087, -5809, -12715, 210, 2523, -1939, -4909, 292, 1726, -1708, -3591, 2152, 3052, -685, -8410, -888, 1646, 5011, -11159, 1989, 3902, -546, -18140, 1390, 3538, -6255, -9873, 168, 1418, -2368, -1410, -1970, 55, 1577, -494, -136, 2350, 6742, -7649, 484, 3153, 4268, -5930, 1705, 3460, -11772, 2371, 807, 3613, -6661, -5903, -5613, 2666, 3759, -9076, -953, 5996, -1350, -13561, 3414, 7234, -697, -9718, 2311, 3191, 4742, -1156, -833, 1009, -1454, -1523, -3012, 411, 13004, 4284, 6439, 8578, 685, -8543, 4770, 8583, -13339, -11959, 3148, 5539, -899, -3743, -1010, 1535, -2753, -4300, -190, 2431, 5778, -2119, -1046, 2286, 10559, 1499, 3650, 4934, -5909, -5050, 2371, 3561, -8296, -406, 1581, 4153, 2072, -1613, -264, 4352, 971, -7903, -769, 4438, 10697, -14566, 6268, 9183, -4827, -17108, 7351, 10168, -4773, -8658, 2589, 7443, 4739, -9489, 1691, 5568, 3368, -18052, 3526, 7363, -6583, -11990, 2939, 7037, -6456, -578, -1736, 3460, 6696, 11620, 4690, 7102, -6402, 3215, 5828, 6629, -5211, -8567, 1333, 3930, -2577, -4781, 2569, 4071, 4063, -2639, 1183, 3023, 4505, -172, 111, 1743, -4466, 1473, 1081, 1808, -2890, 3650, 330, 1721, -1165, -994, 3265, 4372, 704, -3363, 3806, 5746, 2304, -4452, 2241, 3474, 159, -1878, 1672, 3749, -2193, -4467, 1160, 3037, -736, -4356, 1852, 3653, 8317, -9247, 3781, 5312, -9578, -7636, 2096, 5093, -7143, -3312, -4332, 2861, 5508, -608, -2336, 4525, 214, -2595, 957, 4073, 250, -1935, 2261, 2189, 2184, -4051, -63, 1454, 1162, -5665, -1472, 2067, 10835, -10109, 4499, 7086, -5483, -12145, 4792, 8492, -9150, -3974, 2940, 4792, -1757, -791, -398, 1020, 2866, 4349, -120, 2968, 1774, -1633, -485, 2304, 2609, -9227, 4400, 6086, -8799, -14096, 4106, 6205, -109, -4650, 373, 4180, 1493, -1534, -2879, 2075, -264, -886, -1407, 3943, 6032, -6806, 5032, 6909, -936, -10946, 7408, 8306, 1480, -6646, 2884, 6010, 3098, -5529, 3178, 8190, -1080, -7999, 3811, 8421, 2851, -7260, 1377, 6880, 2309, -1955, -8, 5171, 5532, 8668, 6896, 10863, -11281, 3706, 8741, 10294, -6370, 2421, 248, 3652, 3097, 3256, 1668, 2941, 225, -146, -153, 1247, 2801, -3020, -2, 519, 2800, -4702, -1652, -830, -4493, -777, 740, 1471, -3504, -1185, 3659, 3959, 1437, 1893, 1815, 3061, -1590, 2015, 509, 2608, 105, 403, 896, 3204, 4459, 12665, 5770, 9207, 464, 7954, 5561, 7340, 8214, -1799, 6112, 8265, -5508, -2554, 2708, 7746, -9063, -121, -3356, 4172, 957, -2308, -3755, 3520, 1336, -1788, 624, 5442, 89, 1293, 2220, 4152, 1140, 3879, -1378, 1026, 2746, -4210, -1225, 1832, 3750, -10383, 3522, 6243, -263, -11923, 4408, 7738, 600, 3641, 3892, 6169, -2680, 5485, 3297, 5186, 3463, 1408, -1207, 1498, -5990, -5120, -936, 250, -15, -8750, 2411, 2540, -5031, -5293, 1950, 2489, 1913, -2839, 110, 2512, 5304, -5016, -4864, -943, 3741, -693, -1542, 2388, 4065, 2085, 5993, 6562, -5988, -211, 7295, 7257, 1287, -1326, 2120, 4302, 1579, -7598, 2508, 6054, 2644, -2538, 3580, 8351, 4195, -1346, 1837, 7309, 8089, -410, 5652, 9377, 3487, -5746, 8024, 12028, -12088, -5052, 8928, 11288, -4590, -4556, 200, 4396, 1098, -2587, 1391, 3215, 1194, -6035, 1539, 3275, 654, -4954, 2096, 2434, -2712, -3389, 724, 2829, -74, -6197, 3510, 6197, -838, -992, 4385, 6416, 1149, -1954, 2418, 4034, 8, -294, 2445, 5499, 9386, 816, 3871, 7038, 4253, 7742, 6004, 10096, -9106, 6158, 6853, 9272, 2416, 173, 4856, 9819, -5432, -2672, 1855, 11183, -7325, 2435, -3091, 7072, 2515, 3262, -4655, 2193, -2484, 3282, -1868, 3722, 4853, 910, -795, 2165, 796, -2771, -3070, 60, -4586, -1590, -897, 1432, 1940, -5495, 2296, 3768, 2963, -5553, 2813, 4355, 4645, -4697, 5247, 6918, -3788, -5001, 5243, 6620, -63, -3142, 1242, 3687, -556, 251, 2074, 3435, 2217, 8676, 6809, 7471, -6316, 7956, 6825, 7046, -2722, 2827, 858, 1976, 3839, -2539, 594, 3069, 1250, -7218, 1117, 3532, 4711, -9960, 5283, 6015, -2816, -4812, 6880, 8452, 4248, 6045, 2558, 6434, -1821, 4060, 3033, 7479, 2813, -1420, 2166, 7742, -699, -6514, 1841, 6307, 9455, -9319, 4536, 7277, 1236, -14153, 7638, 11098, -11032, -10835, 7588, 10641, -3276, -3437, 1073, 4688, 252, -3729, 2435, 4772, 71, -5147, 1240, 2680, 2772, -4827, 4434, 4715, -4136, -4278, 2035, 4306, 4356, 1913, 2232, 4404, -3278, 1479, 1937, 4564, 3614, -3707, 1640, 3291, 332, -2370, 941, 5026, 6884, -1893, 2985, 6399, 4447, -7997, 5665, 10008, -7129, -4565, 6538, 8709, 1022, -5531, 3474, 8694, -1135, -2927, 1132, 11486, -6847, 1585, -2989, 9395, 3619, -2759, -4789, 3180, -2305, -3441, -2601, 5173, 4110, 3343, 209, 6640, -3687, -1053, 543, 6804, -1815, -2505, 621, 4448, 810, -3832, 975, 2886, -198, -3864, 844, 2248, 3314, -7997, 3572, 4809, 378, -6594, 4139, 4604, 742, -5727, 1968, 2639, 6136, -995, 1825, 2992, 2333, -4057, 4791, 5447, -5511, -3835, 6633, 7017, -4532, -4752, 1646, 2480, -1610, -2558, 1270, 2610, -1014, -4464, 870, 2799, 2569, -3996, 1064, 3259, 2978, -3241, 3427, 4808, 1364, -3716, 2662, 6110, -5209, -5693, 3100, 8100, 2587, -5040, 1051, 7953, -1217, 2096, 2221, 7788, 5604, 1592, 3997, 8120, 1774, -9118, 6253, 10016, -3060, -5226, 3917, 6842, -2685, -179, -122, 3504, -3255, 116, 1799, 4679, 1078, -2590, 554, 3245, 3164, -2248, 3711, 4996, -2653, -3100, 902, 3878, 2555, -5401, 45, 2423, -4637, -6951, 190, 3275, 88, 111, 1364, 3502, 6541, -1510, 1040, 3533, 2664, -2712, 2361, 5067, 3370, -8907, 5722, 9774, -4814, -6719, 6315, 9431, -1515, -6997, 4506, 8613, 552, -10164, 1349, 11360, -4792, -8074, -3299, 10561, 3458, 7286, -1527, 7663, -3678, 2836, -52, 8975, 4777, -1041, -333, 7418, -7303, -2213, 324, 6785, -1128, 843, -788, 3076, -740, -78, -23, 2653, -120, 2570, 2061, 3775, 2526, -37, 1847, 2332, 3840, -2669, 1929, 1985, 3436, -1823, 1567, 2217, -1620, -4768, 1322, 3581, 1825, -8683, 2699, 4617, 309, -6883, 4081, 4869, -2155, 2777, 2778, 4076, -2862, 1020, -1007, -309, -57, 3177, -951, -281, 1168, -589, -2220, -521, 4904, 611, -460, 183, 685, -5967, 330, 3318, -445, -6363, 1060, 6409, 4125, -3182, -665, 6384, -328, -3071, 2023, 7525, 7221, 2321, 5105, 9186, -4368, 1665, 7316, 11324, -6040, -2135, 3349, 7389, 1275, -1809, -166, 3688, -4077, -4287, 6, 2837, 2285, -3675, 383, 1933, 4877, 798, 170, 346, -7230, -419, -1334, 923, -1117, -1293, 809, 2645, 2464, 2103, 951, 3676, -869, 1051, 563, 3152, -1358, -2072, 1755, 3851, 3130, -7103, 4877, 6007, 2043, -8554, 5669, 8052, -1512, -5394, 4274, 5939, -3768, -3719, 4675, 6223, -1326, -6680, 774, 6594, -2045, -7011, -4555, 6382, 3716, -779, -1257, 7669, -6710, -1436, 315, 10627, -378, -5839, -259, 8282, 120, -3962, -418, 5215, -2812, 3640, -1728, 1521, 1101, -925, -989, 1410, -340, -1891, 2159, 3715, 1128, -2746, 1801, 2430, 3487, -37, 4267, 4569, 1259, 3330, 1762, 3880, -1208, 809, -1004, 2299, 1835, -941, -562, 1823, 5438, 2402, -285, 637, -1047, -512, 593, 1943, 3630, 1923, -1686, -1027, -1193, 3442, -2227, -1099, -3227, -1715, -1120, 447, 6210, 2298, -387, 811, -1898, 7075, 1847, 5122, -5477, 1153, 1415, 6257, -180, -4862, -259, 6287, 1635, -6593, 902, 6049, 6471, -9731, 4835, 9562, -4521, -8065, 5891, 11849, -2817, -1164, 3447, 8611, -492, 3487, 1383, 6407, -3210, -4279, 566, 3435, 1497, -4482, 1684, 2154, 3952, -4605, -750, -188, -2895, -4276, -1610, 592, -554, -2611, 720, 2597, 2543, -2453, 488, 3720, 937, 184, 553, 4449, 2307, 3271, 4193, 7511, -5699, 119, 6046, 7126, -275, -8179, 2011, 4714, 6661, 4700, 6088, 8727, -3958, 7787, 7476, 9435, -7186, 4983, 3068, 7843, -4634, -478, -4748, 4552, 2285, -8267, -1820, 6546, -4859, -9281, -150, 10888, -3049, -5030, -1586, 6410, 7382, -1412, -303, 3103, -2875, -5833, -1283, 464, -1272, -3203, -75, 1296, 1728, 810, 1156, 2548, 1497, 312, 1148, 2316, 3429, 2865, 4545, 5508, -609, -1941, 3007, 5120, -4180, -3111, 195, 2919, 515, -5378, 1044, 3456, 3375, -6943, -2072, -30, -2326, -6864, -735, 1434, -1890, -6644, 180, 727, -1895, -6518, 73, 590, -986, -658, 1804, 1910, 12285, 279, 4837, 5293, -2621, 1303, 3277, 6468, -9523, -2694, 1359, 5760, -1304, -2525, -1401, 4164, 284, -137, -664, 5087, 4663, -7036, 2838, 8198, -1475, -8394, 3595, 10398, 1730, -2053, 3490, 8843, -648, 2663, 1067, 6639, -4325, 2066, 681, 4594, 650, -2561, 1455, 2313, 1275, -6270, 2622, 2763, -164, -4502, 663, 1710, 2473, -1706, 1270, 3246, 1084, -1487, 851, 5313, 323, -5012, -414, 5512, 1215, -6721, 3458, 9206, -2891, -6966, 3337, 6609, 6769, 1102, 1192, 4665, 5609, -1842, 6851, 8851, -3805, -674, 8595, 10975, -7030, 5050, 4077, 8915, -4901, 3408, -4884, 4006, 971, -4231, -3582, 3707, 76, -7683, -1480, 7215, -725, -2870, -2960, 3481, 3193, 964, -838, 1209, -3189, 3902, 2038, 3441, 507, -2949, 259, 1522, 2547, -1746, 645, 1673, 7805, 1128, 2186, 2484, 1380, -360, 4224, 4931, -6681, -3567, 6311, 7373, -1449, -1575, 1731, 3922, 1313, -6804, 2295, 3160, 1066, -8052, 1839, 3053, -1449, -2765, -436, 1989, -2321, 1001, 2404, 4388, -1840, -524, 2544, 4443, 36, -3477, 2039, 3370, 6645, -8331, 4929, 5688, -1255, -13196, 3196, 5837, -2331, -5656, 33, 4048, 79, -3730, -422, 3729, -2091, -3649, 11, 4003, 2318, -6703, 898, 5564, 670, -8026, 1601, 6737, 2687, -3807, 2614, 7648, -575, -4063, 1380, 7657, -2765, -629, 103, 5931, -4913, 2708, 577, 2949, -290, -1005, 2517, 3478, -749, -1827, 2669, 3807, 825, -2957, 2970, 5056, 932, -3952, -92, 5435, 557, -5162, -1130, 5974, -3809, -7714, 1487, 7584, 430, -918, 438, 5768, 7124, -1622, 80, 5177, 4555, -6769, 3600, 8042, 813, -6999, 6171, 10191, -4541, -3415, 1210, 9278, -9175, -2672, -3784, 7447, 1509, 286, -5642, 921, -2056, -4894, -5430, -39, 8574, 2634, -5590, -1729, 1704, -3085, -3042, -2222, -4096, -3199, 632, 2825, -965, 383, 2052, 4344, -1900, -4151, 578, 3008, 4651, -7821, 2621, 4052, 2331, -11340, 5292, 6710, -3705, -4808, 5604, 7048, -1355, -2571, -763, 2140, 2499, -2890, -786, 760, 2039, -4937, 268, 244, -1573, -4189, -3191, 146, 476, -389, -1941, 2622, -1794, 298, 1185, 4789, -649, -305, 1365, 3589, 1719, -751, 1569, 3200, 4767, -3220, 66, 2761, -1388, -3589, -2051, 1745, 1854, -187, -1436, 2651, -1120, -2789, -186, 2557, 1939, -4612, -877, 2555, 2677, -4516, 497, 3567, 2268, -3934, -3, 5030, 2574, -4708, -1944, 3726, -260, -4546, -1550, 5086, -2259, 590, 1607, 6166, 2574, 11781, 3799, 7730, -6674, 9745, 1725, 5391, -926, 7887, 587, 4597, 536, -1793, -1516, 4172, 1764, -9806, -2519, 4447, -1108, -6099, -998, 3648, -1257, -4514, -2129, 3621, 2680, -3905, -2722, 3743, 2065, -9921, 407, 5762, 2549, -6380, 1187, 6656, -1569, -10076, -1621, 8343, -6918, -5841, -4543, 6807, 1653, 463, -5209, -65, -2726, 4427, -3855, -879, 3885, 7, -3513, -420, -2932, -801, -1416, 211, -6049, -3601, -1102, 1304, 918, 1031, -595, 1972, -1859, 1049, -702, 1218, 5715, 1771, 857, 2058, 2023, -2620, 4885, 5303, -5431, -3182, 4259, 6109, -1998, 63, -1659, 1558, 1171, -1148, -1421, 1106, -1222, -391, 796, 1183, 651, 1283, -2342, 549, -253, 4025, -4887, 56, -1403, 1085, -239, 3871, 2037, 395, 1225, 3402, -174, -173, 1032, 3281, -571, -1382, -296, 2723, -3679, 422, -1329, 2327, 833, 487, -1009, 2879, -1920, -1192, 346, 3081, -2392, -910, -251, 2027, 1129, -388, -439, 2311, 689, -2440, -84, 4614, 2393, -3674, -892, 4592, 910, -3084, -668, 5297, 771, 161, 1495, 6105, 1820, -3382, 2585, 7903, -1515, 607, 1317, 5755, -2789, 2062, -1879, 2973, -5079, 421, -1247, 3171, 4002, -761, -1308, 3283, -6632, 2286, 313, 3102, -4690, 1380, -2393, 1792, -132, -179, -3561, 3138, 732, -4209, -991, 4933, 923, -5391, -1812, 4154, -134, -8832, -1679, 6543, -1873, -4486, -3899, 5205, 2048, 3160, -5401, -672, 3174, 3798, -3247, -804, -119, 4730, -200, -562, -786, 5366, 397, -99, 679, 3142, -1231, -1229, -411, 2331, -2725, -2208, 935, 2781, -2307, -1673, 2671, 4173, -1750, -1049, -1119, 4800, -539, -115, 4925, 2904, -349, -972, -278, 1356, -751, -2433, -1336, 2224, -1671, -2915, 1444, 3649, -2126, -2626, -1597, 3724, -3506, -1658, 1951, 5937, -2746, -792, 751, 3526, -2744, -950, -117, 5043, -2803, -1105, 272, 4253, -3347, -2047, 254, 4520, -3696, -2678, 118, 4387, -4735, -2633, 2710, -4182, -7089, -1840, 4408, -3124, -3900, -1699, 2156, -2731, -149, -229, 2958, -4163, -125, 109, -721, -3459, -1278, -757, 219, 1645, -2653, -3595, 275, -1566, -2009, -3528, 2269, -3152, -487, -1248, -1121, -1790, 1276, 2202, 2332, -421, 2809, 3417, 1956, 224, 1276, 1252, -3393, 785, 320, 620, 3339, -2410, -1094, -478, -2526, -2304, -2900, -422, 3154, -205, -894, 1659, -5237, 564, 73, 3851, 1954, 7154, 563, 5307, -2732, 1216, -1642, 2611, 3550, 3539, -2844, -205, -3664, 3175, -5712, -1754, 2723, 1171, -6733, -1707, 1136, 3880, -1786, -505, 2394, 3654, 1157, 543, -3035, 765, 2569, 1816, -34, 6767, 1117, 2956, 2379, 4662, 164, 1838, -5614, 2631, 877, 1147, 1047, -985, 1514, 1442, 1348, -1609, 1818, 2534, -508, -1438, 1690, 1174, -2648, -652, 342, -174, -2745, -901, 153, 637, -76, -1737, -273, -74, -1805, -1108, -1270, -700, 3888, -4114, 538, 1933, 341, -388, 131, 3674, 6422, 5342, 3090, 7152, -11268, 4941, 4637, 7228, 7819, -470, -2545, 1826, -1141, 5558, -7825, -1583, 576, 45, -8002, -3003, 964, -2058, -2872, -2048, 4132, 4160, 2900, 2063, -4087, 2002, 5332, 1221, -1923, -2415, 918, 158, 961, -2809, -85, 1328, -3709, -910, 1064, 1246, 328, 892, 1591, 1092, 2491, 641, 1254, 2098, 4103, 704, 1798, 1660, -2445, 636, 1422, 251, -2494, -1533, -300, -81, -215, -1476, 147, -86, 1117, 196, -22, -186, -116, 41, 1016, 1372, 5503, -5516, -176, 2277, 4523, -12219, 3144, 6354, -7571, -8023, 4149, 6315, 2322, -3906, -1420, 2958, -1502, -11141, -6724, -570, 696, 492, -7874, -1155, 6105, -1287, -2016, -234, 6302, -1859, 2363, 2030, -4655, -2225, 6069, 1623, -4434, -2468, 2213, 242, -1421, -322, -137, -800, -1329, 114, 802, -1186, -2069, 423, 563, -1156, -1644, -844, -1387, -755, 1241, -2419, -896, -1568, -1038, -3646, -431, -1360, 863, -1627, -1563, -415, 1278, -772, -438, -440, 2085, -547, -8, -387, 4811, 848, 1210, 37, -1511, 2310, 849, 24, 2846, -6140, 998, 2242, 719, -5096, 88, 1595, 2227, 1775, -1263, 530, -6133, -1364, -3173, 312, -156, -1784, -7708, 164, 3085, -2881, -3032, -229, 3336, -9247, 438, 922, 1606, -6104, 2527, 1072, -378, -3169, -1502, -1050, -546, -1447, -2956, -1855, 1914, -1041, -2221, -3514, -1862, 480, -1817, -3138, -2628, -1633, -3770, -3242, 1081, -172, -2592, -3536, 129, 1579, -1667, -1931, 1995, 1240, -3611, -1384, 2647, 3023, -1997, -1540, 2251, 738, -2035, -1953, 2523, -4068, -1087, -2917, 1553, -3023, -1451, -2693, -617, 2249, -2562, -1153, 2026, -236, -3096, -927, 2785, -4042, -2944, -1327, -6737, -2306, -3633, -1264, -552, 2368, -6639, 1199, 1155, 3654, -5129, -1090, 2134, 5880, -2726, -1685, 3037, 2910, -2622, -1456, -2428, 1343, -4964, -2545, -1510, 2419, -5927, -3289, -465, 3123, -5793, -4369, -915, 2802, -5585, -4366, -922, 5286, -4066, -2705, 1180, 5082, -3140, -2613, -1361, 5052, -3184, -2162, 1337, 6016, -4265, -1518, 471, 3506, -4422, -2333, 1679, 3456, -5490, -2206, 327, 3820, -4221, -3466, 978, 4703, -5160, -3717, -1101, 503, -6422, -2383, 576, 1349, -5004, -1131, -899, 293, -3914, -1188, -3365, -128, -4802, -1915, 1024, 7545, -6717, 743, 2774, 8048, -7242, -2862, -272, 7380, -7899, -6976, -3399, 13807, -5672, -4883, -400, 10698, -8192, -5697, -1336, 7271, -8159, -6025, 102, 8904, -7451, -6084, 70, 8588, -8567, -6790, 2576, 10140, -7696, -6770, -3558, 8226, -6660, -6217, -1166, 9020, -6472, -6724, -195, 7970, -7969, -7511, -1383, 6913, -7228, -6764, 613, 11520, -8194, -5869, -298, 10129, -7315, -6096, 1863, 6934, -8340, -6679, -3813, 8191, -7494, -4669, 831, 2366, -6621, -2744, 1762, 11469, -5166, -2491, -3658, 6520, -5432, -1737, 3026, 5062, -8375, -1543, -12982, 2065, -8098, -3099, 10492, -2124, -7990, -5413, -3061, -1722, -8945, -7260, 1640, -3030, -9617, -6109, 8313, 3185, -9845, -7041, -5051, 4930, -10365, -8031, 4883, 461, -10785, -7410, 1292, 11769, -6534, -4403, -6145, 4831, -9430, -6286, -1458, 10420, -8837, -7504, 6440, 2540, -9256, -7441, -3454, 8226, -8026, -7744, 2381, -578, -11939, -9816, 3516, 178, -10511, -8537, 5819, 1392, -10403, -8832, -4556, 2287, -11164, -9574, 3900, 737, -7201, -5348, 2529, 2520, -9762, -7152, -7356, 2552, -8286, -3461, 2516, -11645, -8534, -2955, -8730, -5466, -7274, -2838, 12033, 1102, -6585, -4099, -5377, 303, -7997, -6421, -24, -1006, -6029, -3710, 7787, -225, -9296, -7082, -6925, -6313, -10338, -8167, 10466, -2467, -6635, -3290, 1759, -4958, -6018, -3636, -7168, -1453, -6630, -3534, -2632, -3005, -9893, -7153, 4104, 6951, -5345, -2330, -3983, -2737, -7174, -5739, 1339, -4489, -8162, -6108, -439, -3218, -8812, -6517, 2104, -5118, -7673, -5981, -1452, -7801, -7775, -6429, 1310, -471, -5133, -4302, 5607, -4347, -6636, -3308, -9373, -1086, -7735, -2555, 3664, 2025, -5152, 1370, -3081, 1962, -5215, -276, 9560, -6127, -7379, -4752, -5548, -8606, -7583, -6024, -2493, 1776, -5052, -4650, 5740, -4784, -8086, -6612, -5402, -4880, -6125, -4919, 1328, -1339, -4909, -2744, -1430, -7720, -3810, -1633, -781, -5197, -5838, -1921, 7, -4764, -5630, -529, 8273, 3702, -2106, 1907, -10985, 3293, -1578, 1585, -3068, -397, -5729, -3356, -2215, -2865, -8100, -5372, -843, -960, -4567, -2497, 3740, 1216, -4259, -1064, 11652, 13896, 2352, 4284, -2059, 15681, 3460, 7297, -10209, 5321, -2155, 4161, 4786, 1034, -6479, 2230, -3375, -401, -4957, 2544, 978, -2278, -4790, -1437, 5176, -5583, -5106, -3085, -4092, -3616, -4733, -4660, 6118, -831, -6056, -4937, -6264, 1039, -4479, -3862, 4160, -3423, -4230, -2997, 2690, -3751, -4168, -2798, -4921, -1069, -5201, -1606, 2236, -2722, -3006, 2030, 5748, -13524, -2190, 2358, -10084, -12097, -1053, 2982, -2092, -1640, -4104, -1144, -2529, 499, -5250, -2411, -3490, -1967, -3815, -1325, 6757, -3283, -2504, 669, 14184, -3870, 4155, 6188, -2903, -4042, 4812, 7896, -12842, -3698, 569, 6170, 2005, 2303, -7828, 2317, -2928, -4456, -6144, 2748, -2049, -2914, -4075, -1187, 4495, -874, -2891, -2212, 272, 6230, -1338, -755, 674, 1765, -3117, -2196, -921, 130, -2920, -2847, 136, 194, -2020, -2394, 4955, -589, -3037, -3016, -3689, -1635, -3855, -1598, 7739, -2497, -1581, 2241, 2009, -3471, -2219, 2622, -10856, -950, -1717, 2559, -565, -1435, -4706, -1991, -1406, -2211, -4622, -1961, -1747, 1118, -2079, 350, 3336, 1768, -435, 2398, 6201, -12864, 2611, 4737, -1966, -14888, 4677, 8853, -8684, -4634, -133, 5530, 2953, -7576, -7791, 1685, -1441, -4576, -5266, 1453, -1602, 2641, -2485, -1685, 7682, -2872, -1158, -1455, 1421, -3587, -2152, -1879, -4085, -3828, -1118, -1153, -1423, -5074, -2688, -3204, 2793, -1388, -1142, -1924, 4399, -4894, -2453, -4043, -5398, -5098, -4490, -3778, 3081, -7454, -923, 912, 2173, -11749, -2115, 1463, -4746, -5582, -3160, 1290, -3835, -1294, -4411, -1593, 1209, -1734, -2870, -1780, 2057, -2712, -1491, 643, 3441, -1962, -1287, 1320, -727, -1532, 264, 1699, 1942, -1796, -650, 3280, -9986, 1351, -2509, 3306, 639, -5064, -4882, 1027, 4521, -3440, -4880, -1318, -1029, -1979, -3395, -3022, 1009, -1133, -1102, -1315, -187, -5158, -1829, -1523, 1440, -1575, -1356, -1118, -1719, -547, -2279, -2948, 3881, -965, -1632, -1703, -1880, 53, -1357, -2408, -958, -2924, -3736, -3004, -974, -886, -1894, -1999, 2121, -4568, -1382, -785, 1387, -4597, -3010, -16, -543, 730, -3202, -883, -1115, 3504, -2735, -2565, 35, 1038, -1704, -1153, 278, -3909, -1671, -264, -352, -3934, -498, 908, 1991, -8815, -1260, 3042, -6239, -4288, -2715, 2505, 391, 1304, -5300, -3377, 868, 1822, -4965, -4165, 652, 2865, -3736, -4361, -607, 3317, -3768, -4440, -2892, 3066, -3934, -4403, -1205, 1492, -4833, -4816, 590, 496, -4921, -5144, 1030, 1253, -4704, -5409, 460, 2529, -4799, -5537, 305, 3225, -4516, -5813, -194, 3225, -4593, -6348, -1219, 2694, -4829, -6452, 141, 2415, -5293, -6133, -172, 2548, -5855, -5974, 565, 3353, -5570, -5359, 556, 2940, -5124, -4631, 580, 3045, -5276, -4700, -1111, 3128, -5274, -5139, 254, 3322, -5440, -5359, -319, 2230, -5505, -4045, -670, -2000, -6708, -4622, 2224, -2681, -5614, -4977, 3685, -1907, -4423, -4710, -115, -856, -4813, -4718, -3362, 870, -5354, -5361, -1208, 3240, -5978, -5600, -818, 1593, -6144, -6398, 2985, 239, -5707, -6955, 2830, 632, -6217, -7114, -234, 745, -5955, -7424, 610, -570, -6450, -8015, -570, -143, -6340, -7639, 1511, -897, -6546, -7190, 2942, -1382, -7273, -6929, 2687, 357, -6830, -5974, 401, 3977, -5928, -3972, 2269, 10361, -4661, -1809, -2844, 7395, -5587, -3092, 3114, 3794, -8711, -5920, -2884, 3322, -8336, -4843, -1490, 783, -6424, -4854, 3111, 3003, -4914, -5377, 3299, 3641, -3878, -4751, 1409, 2312, -4365, -4424, 407, 4105, -5099, -4490, -112, 3088, -6227, -5272, -4242, 1577, -5708, -5535, 3284, -1023, -5356, -5923, 2340, -1031, -6197, -6024, -217, -1440, -6414, -6532, 218, -2304, -6350, -6629, -19, -3159, -6287, -5982, 1840, -2224, -6298, -5497, 3114, -1924, -6582, -4868, 3794, -2255, -6037, -3847, 9980, 1896, -4992, -1775, 2808, 4011, -4528, -1222, -6541, 3512, -4561, -1563, 4913, 1986, -8994, -4278, -3638, 2161, -9993, -4889, -1182, 813, -7433, -5054, 4498, 1571, -5611, -5445, 2994, 3049, -4446, -5098, -1383, 2391, -4417, -4606, 488, -892, -5450, -4617, -746, -2600, -6435, -4946, -3810, -2007, -5872, -5188, 2211, -455, -5826, -4771, 1991, -825, -7169, -5046, -199, -798, -6890, -5475, 605, -48, -6409, -5473, 449, -169, -6214, -4899, 1964, 219, -5969, -4626, 1499, 86, -5909, -4403, 3400, -911, -5399, -3650, 9290, -5057, -5306, -2139, 2871, -6368, -4465, -1073, -6793, -5710, -4919, -1300, 3713, -5072, -8714, -3396, -3311, -5000, -10101, -4436, -484, -138, -7587, -4307, 5810, -1002, -6338, -4463, 3227, -795, -4966, -4794, -3282, -1379, -4953, -4896, -777, -1637, -5342, -4892, -1032, -692, -6141, -5220, -1958, 1055, -5874, -5719, 1401, 1287, -6441, -5395, 252, 118, -7502, -4851, 797, -1334, -6870, -4978, 1302, -1072, -6356, -5000, 895, 120, -6324, -4559, 739, 1070, -5436, -3890, 1337, 665, -5445, -4023, 2176, 424, -5334, -4081, 1616, -1241, -5032, -2943, 2369, -7178, -4398, -321, -595, -6036, -5088, -1199, 1267, -2847, -7520, -3302, -4186, -1952, -8266, -3297, -268, -1028, -7738, -3612, 3258, -2445, -7082, -4118, 2389, -4251, -5648, -4591, -1121, -3204, -5809, -4861, -1278, -1112, -6260, -5316, -1825, -57, -6553, -5555, -315, -455, -6511, -5828, 147, -221, -7022, -5548, -818, 143, -7240, -4742, -141, 1338, -6505, -4765, 201, 1203, -6159, -4275, 2102, 403, -6535, -4076, 1100, 275, -5750, -3842, 1036, -700, -5868, -4222, 1142, -1885, -5553, -4414, -345, -1501, -5545, -4377, -153, -731, -5786, -3043, 2487, -849, -6476, -2851, -81, -1797, -7319, -3486, -4208, -1327, -7896, -3516, -1762, 1429, -7940, -3559, -1625, 2305, -7854, -4151, 1223, 539, -6435, -4604, -531, -677, -6771, -4758, -729, -498, -7014, -4694, -2297, -105, -6975, -5094, -851, 727, -7011, -5708, -144, 429, -7158, -5263, -530, 1857, -7164, -4819, -1206, 2410, -6691, -4750, -608, 1018, -7174, -4549, 819, 495, -7502, -4332, -342, -361, -6986, -4437, -355, -1032, -6823, -4135, 689, -1457, -6421, -4215, 225, -953, -6845, -4664, -317, -1042, -7432, -4497, 1257, -407, -7065, -3874, -683, -1120, -7475, -3449, -1212, -396, -7928, -3350, 312, 4299, -9417, -4454, -4409, 4631, -10064, -5359, 3371, 5828, -8458, -6618, -4083, 6820, -8202, -7225, -111, 4481, -8489, -6360, -1494, 3935, -8114, -6223, -984, 3692, -8497, -6905, 647, 3391, -8359, -6523, 740, 4890, -8307, -6507, -3213, 3313, -8355, -6102, -252, 1944, -8526, -5813, 771, 1765, -8032, -5881, -659, 1505, -7501, -5858, 1005, 2781, -7357, -6460, -478, 3518, -6942, -6132, -393, 2307, -7717, -6332, -1128, 2140, -7937, -5606, 2569, 1220, -7935, -5383, -571, 3800, -8585, -5330, -1202, 2713, -8168, -4301, 1119, 3562, -12148, -6611, -7431, 3682, -12286, -6658, 5339, 2268, -10153, -7423, -3151, 2818, -9722, -8094, -1492, 1278, -9386, -6782, 2513, 2498, -9518, -7347, -1483, 3216, -9893, -7540, 4681, 4126, -10257, -6929, 96, 6743, -10776, -8088, -6711, 5515, -10737, -7287, -1184, 4947, -9635, -6992, 3544, 5120, -8586, -6925, -3516, 5456, -8403, -7505, 824, 3732, -8804, -7683, -1127, 2450, -8205, -7382, -996, 2418, -8661, -7827, -1867, 2104, -9262, -7762, 2437, 1415, -8918, -6534, 647, 2820, -10249, -7052, -4256, 2589, -9009, -5424, 1908, -5065, -12142, -6343, -6814, -3924, -11727, -6265, 5110, 1054, -10406, -7794, -3035, 1384, -10275, -8543, -2561, 106, -9198, -6903, 4202, -191, -9438, -7349, -708, -217, -10117, -7443, 5836, -1300, -10361, -7123, 55, -2150, -11725, -9013, -7828, -1023, -11459, -8190, -138, 992, -10426, -7236, 4487, 9923, -8324, -6174, -5156, 8541, -8260, -6512, -1829, 1027, -8733, -6814, -416, -1216, -8468, -7105, -27, -2156, -8225, -7431, -789, -342, -8559, -6802, 4073, 3619, -7618, -5569, 2397, 6297, -7577, -4423, -3247, 2597, -8208, -4789, 2120, 32, -9526, -3654, -2830, 311, -9996, -4612, 4239, -3341, -9663, -6945, -1616, -3060, -9836, -7837, -2615, -275, -9035, -7072, 3142, -351, -9152, -7391, -1737, -611, -8922, -7055, 2957, -1482, -8742, -6809, 152, -3317, -8941, -6741, -3581, -3256, -9343, -5918, 6670, 994, -8366, -4874, 5076, 2650, -10511, -6610, -8230, 2618, -10061, -6887, -6674, 723, -7630, -5532, 352, -901, -8059, -6060, 1343, 158, -6794, -5337, 4168, 1091, -7308, -4263, 9711, 9596, -4622, -2065, -1692, 10739, -4800, -1691, -9377, 6596, -4635, -1759, 1836, -882, -9488, -3052, -2288, -1221, -9899, -4482, 775, -650, -7965, -5106, 1742, -1847, -8365, -6310, -2639, 244, -8592, -6395, 785, -162, -8731, -6487, -2091, -38, -7916, -6352, 1157, -2154, -7729, -6219, 868, -2202, -8218, -6353, -618, -279, -8415, -5458, 5259, -2449, -8173, -4621, 4911, -8682, -10289, -6075, -7780, -8735, -9483, -5490, -3099, -3318, -7566, -4762, -90, -1041, -7163, -4697, 2903, -1217, -6583, -4245, 6245, -2087, -6773, -3785, 10874, -2153, -4769, -1946, -2671, -2312, -4885, -1861, -13230, -2115, -3836, -1015, 816, 900, -10383, -2695, -2857, -1223, -10267, -3325, -926, -631, -7343, -4286, 5410, 1018, -6906, -5165, 456, 3723, -7440, -5886, -1895, 2397, -7420, -5120, -1002, -79, -6852, -5226, 1055, 307, -6283, -4938, 1776, -32, -7362, -5758, -107, -595, -7917, -5244, 4832, -2237, -7356, -4428, 2773, -3808, -8265, -4573, -6275, -3143, -7519, -3277, -412, -1798, -7253, -3624, 1281, -416, -6681, -3390, 2791, 557, -6594, -3369, 5207, -1630, -6620, -3094, 8634, -10828, -4662, -1232, -1699, -13536, -4616, -803, -10181, -7301, -5015, -829, 709, -2765, -10416, -3545, -3928, -1278, -9446, -3125, -1680, 682, -6654, -4182, 6416, -1611, -6481, -4747, 614, -2632, -7223, -5530, -5089, -2169, -6658, -4349, -206, -1965, -6227, -4652, 1306, -551, -5345, -5075, -7, -1216, -5896, -5655, -1631, -2543, -6779, -5341, 2458, -3952, -6270, -4380, 2572, -6391, -7431, -4782, -5062, -3658, -6658, -4209, -3037, 119, -5803, -3898, 516, -177, -6001, -3878, 1852, -1348, -6140, -3681, 3272, -1803, -5658, -3012, 3684, -3463, -5123, -1972, 1729, -4488, -6102, -1305, -7386, -2042, -6718, -2041, -258, -1459, -6208, -2740, -1072, -1928, -6424, -3504, -1593, -1228, -5247, -4263, 2118, -1564, -4567, -4140, -618, -2552, -4645, -4119, -3330, -1625, -4604, -3995, -449, -750, -4410, -4270, 1052, -1269, -4448, -4870, -1519, -599, -4240, -4644, -1911, -149, -4297, -4168, 512, -909, -4186, -3964, 579, -1737, -4330, -3678, -1672, -1441, -4492, -3732, -1926, 757, -4258, -4007, -912, 1662, -4068, -3690, 889, 1106, -4083, -3470, 912, -403, -3724, -3047, 1933, -1259, -3891, -2793, 2415, -3973, -5249, -2588, -4365, -2035, -5209, -2228}; +#endif + +// Comparator function for sorting doubles. +int compare_doubles(const void *a, const void *b) { + const double *da = (const double *) a; + const double *db = (const double *) b; + + return (*da > *db) - (*da < *db); +} + +// Function for computing the deviation from the expected doubleing point +// result and returning the largest such deviation found. + +double compute_error(const Q15_T* const pred, const double* const label, + double* const errors, SCALE_T scl) { + double agg_diff = 0.0; + + for (unsigned i = 0; i < OUTPUT_SIZE; i++) { + double f_pred = ((double)pred[i]) / pow(2, scl); + double single_diff = fabs(f_pred - label[i]); + agg_diff = single_diff > agg_diff ? single_diff : agg_diff; + errors[i] = single_diff; + } + + return agg_diff; +} + +// Function for computing the 95th percentile deviation among all the outputs. +double aggregate_error(double* errors, unsigned len) { + qsort(errors, len, sizeof(double), compare_doubles); + unsigned index = (unsigned) round(fmax((0.95 * len - 1), 0)); + return errors[index]; +} + +/** + * By default, all tests run without using bit-shifting operations. + */ +int main(int argc, char **argv) { + unsigned patches; + SCALE_T XScale = -1, YScale = 12; + FILE *xFile, *yFile, *floatResFile, *outputLog; + + if (argc != 6) { + printf("Improper Number of Arguments Provided!\n"); + fprintf(stderr, "Usage: %s \n\n", argv[0]); + fprintf(stderr, " : Number of images in the input file. The entire model is run individually on each image.\n"); + fprintf(stderr, " : File containing the images in a numpy array of dimension (num_images, input_channels * input_width * input_height).\n"); + fprintf(stderr, " : File to write the generated output in a numpy array of dimension (num_images, confidence + location box outputs).\n"); + fprintf(stderr, " : File containing the expected output in a numpy array of dimension (num_images, confidence + location box outputs).\n"); + fprintf(stderr, " : File to write the error metrics and the results from the runtime analysis of the model.\n"); + return -1; + } else { + patches = atoi(argv[1]); + xFile = fopen(argv[2], "rb"); + yFile = fopen(argv[3], "wb"); + floatResFile = fopen(argv[4], "rb"); + outputLog = fopen(argv[5], "w"); + } + + if (xFile == NULL) { + fprintf(stderr, "An error occured while opening the input file.\n"); + return -1; + } + if (yFile == NULL) { + fprintf(stderr, "An error occured while opening the predicted output file.\n"); + return -1; + } + if (floatResFile == NULL) { + fprintf(stderr, "An error occured while opening the expected output file.\n"); + return -1; + } + if (outputLog == NULL) { + fprintf(stderr, "An error occured while opening the output log file.\n"); + return -1; + } + + char line[9]; + fgets(line, 9, xFile); + fgets(line, 9, floatResFile); + + int16_t headerSize; + fread(&headerSize, sizeof(int16_t), 1, xFile); + char* headerLine = malloc((headerSize + 1) * sizeof(*headerLine)); + fgets(headerLine, headerSize + 1, xFile); + + int16_t floatHeaderSize; + fread(&floatHeaderSize, sizeof(int16_t), 1, floatResFile); + char* floatHeaderLine = malloc((floatHeaderSize + 1) * sizeof(*floatHeaderLine)); + fgets(floatHeaderLine, floatHeaderSize + 1, floatResFile); + free(floatHeaderLine); + free(headerLine); + + char numpyHeader1[] = "{'descr': '= 0; i--) { + numpyHeader4[i] = ' '; + } + + headerLength += strlen(numpyHeader4); + char a = headerLength / 256 , b = headerLength % 256; + + char numpyMagix = 147; + char numpyVersionMajor = 1, numpyVersionMinor = 0; + + fputc(numpyMagix, yFile); + fputs("NUMPY", yFile); + fputc(numpyVersionMajor, yFile); + fputc(numpyVersionMinor, yFile); + fputc(b, yFile); + fputc(a, yFile); + fputs(numpyHeader1, yFile); + fputs(numpyHeader2, yFile); + fputs(numpyHeader3, yFile); + fputs(numpyHeader4, yFile); + + char* mem_buf = malloc(MEM_BUF_SIZE * sizeof(char)); + double* xLine = malloc(INPUT_IMG_HEIGHT * INPUT_IMG_WIDTH * sizeof(double)); + double* yLine = malloc(OUTPUT_SIZE * sizeof(double)); + double* allErrors = malloc(patches * OUTPUT_SIZE * (sizeof(double))); + + float time_spent = 0.0; + Q7_T* mem_buf_input_offset = (Q7_T *)mem_buf; + Q15_T* mem_buf_output_offset = (Q15_T *)(mem_buf + INPUT_IMG_HEIGHT * INPUT_IMG_WIDTH); + for (unsigned i = 0; i < patches; i++) { + fread(&yLine[0], sizeof(double), OUTPUT_SIZE, floatResFile); + fread(&xLine[0], sizeof(double), INPUT_IMG_HEIGHT * INPUT_IMG_WIDTH, xFile); + + for (unsigned j = 0; j < INPUT_IMG_HEIGHT * INPUT_IMG_WIDTH; j++) { + mem_buf_input_offset[j] = (Q7_T)(xLine[j] * pow(2, XScale)); + } + + fprintf(outputLog, "Running Quantized Face Detection Model on Patch %d\n", i + 1); + clock_t begin = clock(); + q_face_detection(mem_buf); + clock_t end = clock(); + time_spent += (float)(end - begin) / CLOCKS_PER_SEC; + fprintf(outputLog, "Time elapsed is %f seconds\n", time_spent); + + double max_diff = compute_error(mem_buf_output_offset, yLine, + allErrors + i * OUTPUT_SIZE, YScale); + fprintf(outputLog, "Maximum Observed Deviation: %f \n", max_diff); + + for (unsigned j = 0; j < OUTPUT_SIZE; j++) { + double val = ((double)mem_buf_output_offset[j]) / pow(2, YScale); + fwrite((char*)&val, sizeof(double), 1, yFile); + } + + if (i == 0) { + fprintf(outputLog, "Checking Fixed Point Outputs on Patch 1\n"); + for (unsigned j = 0; j < OUTPUT_SIZE; j++){ + if (mem_buf_output_offset[j] != expected[j]) { + fprintf(outputLog, "Output: %d, Expected: %d at Index: %d\n", + mem_buf_output_offset[j], expected[j], j); + fprintf(outputLog, "Quantized Face Detection Fixed Point Test Failed!\n"); + } + } + + fprintf(outputLog, "Quantized Face Detection Fixed Point Test Passed!\n"); + } + } + + fclose(xFile); + fclose(yFile); + fclose(floatResFile); + + double aggregate = aggregate_error(allErrors, patches * OUTPUT_SIZE); + fprintf(outputLog, "Aggregated 95th Percentile Error: %f\n", aggregate); + if (aggregate < 0.5514) { + fprintf(outputLog, "Quantized Face Detection Numerical Test Passed!\n"); + } else { + fprintf(outputLog, "Quantized Face Detection Numerical Test Failed!\n"); + return -1; + } + + free(mem_buf); + free(xLine); + free(yLine); + free(allErrors); + + return 0; +} diff --git a/c_reference/tests/face_detection/test_quantized_face_detection_fast.c b/c_reference/tests/face_detection/test_quantized_face_detection_fast.c new file mode 100644 index 000000000..fe218fbc1 --- /dev/null +++ b/c_reference/tests/face_detection/test_quantized_face_detection_fast.c @@ -0,0 +1,217 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +#include +#include +#include +#include +#include + +#include "quantized_datatypes.h" +#include "quantized_face_detection_fast.h" + +#define MEM_BUF_SIZE 165840 +#define INPUT_IMG_HEIGHT 240 +#define INPUT_IMG_WIDTH 320 +#define OUTPUT_SIZE 5400 + +// Fixed Point Output Corresponding To SCUT-HEAD Face-3 Image: 1 +#ifdef SHIFT + const Q15_T expected[OUTPUT_SIZE] = {4342, -10192, 5213, -12644, 5743, -13002, 5905, -13192, 6762, -14236, 6110, -13126, 5836, -13335, 7149, -12284, 9237, -12187, 9366, -11929, 9579, -11970, 7131, -10987, 6109, -9656, 4022, -6486, 4700, -8724, 5036, -10398, 4763, -10886, 5254, -11838, 5412, -12179, 6196, -11460, 5855, -13782, 8740, -19717, 10650, -20426, 11299, -21209, 11613, -21298, 10417, -19597, 8037, -18872, 6353, -15879, 5173, -10273, 4433, -8743, 5649, -10470, 8549, -16291, 5660, -11990, 5660, -14176, 5742, -14300, 6207, -10109, 8213, -15968, 6858, -12241, 7260, -17230, 7826, -12888, 4895, -14389, 6622, -20032, 8038, -19871, 7740, -19608, 9004, -20086, 9184, -17952, 6354, -17683, 7617, -15753, 6281, -11658, 2956, -11012, 3485, -11318, 9806, -16585, 3498, -8508, 6073, -13236, 6309, -6244, 5258, -12798, 4854, -10641, 6360, -12687, 5170, -10501, 5676, -9496, 5005, -14007, 6918, -17418, 7870, -18403, 8463, -18776, 8906, -18017, 8926, -17808, 7617, -16752, 6146, -13717, 4752, -10970, 6168, -15099, 5606, -12731, 5935, -15522, 5695, -12754, 5258, -15133, 6053, -11546, 6481, -15904, 8486, -11269, 6944, -14077, 5800, -14187, 4956, -12543, 3728, -11007, 7232, -13404, 7541, -16001, 9675, -16968, 5447, -8461, 7253, -17368, 6494, -16915, 4546, -12149, 4181, -12165, 4715, -16332, 5774, -14640, 4472, -12143, 4434, -8447, 5623, -18268, 5904, -9961, 6064, -13164, 5533, -15605, 5797, -11604, 5918, -15242, 6535, -16134, 4014, -9313, 4395, -14448, 7334, -16976, 8544, -16801, 7390, -10855, 5788, -14852, 6743, -15375, 5044, -13700, 5823, -12299, 5207, -11591, 6022, -8459, 5323, -11737, 7520, -17697, 5840, -15919, 5815, -7313, 5208, -13102, 7891, -15509, 7714, -15806, 5496, -16536, 4950, -14524, 7474, -12849, 8809, -18792, 8884, -11989, 6412, -7698, 6425, -11924, 6162, -12817, 5812, -9761, 4059, -7351, 1444, -6589, 5047, -10021, 3261, -6010, 7117, -9415, 5864, -14861, 5153, -9417, 4925, -8199, 7919, -11283, 8234, -15376, 5754, -13438, 6239, -6002, 5427, -7897, 5363, -12084, 5944, -13921, 4565, -9924, 5321, -13738, 6147, -13139, 7294, -16034, 6990, -9994, 5000, -9035, 5929, -12160, 4089, -11035, 5927, -13075, 5093, -13227, 6510, -11255, 7479, -12171, 7020, -6647, 8262, -13180, 7642, -7911, 5543, -7781, 3275, -9750, 2061, -4078, 6094, -10107, 7307, -11446, 4922, -6815, 4835, -8927, 5441, -8329, 6903, -13108, 9340, -15837, 8099, -10226, 6685, -8211, 6199, -12101, 5352, -10384, 6489, -12990, 5659, -11916, 7371, -17031, 5170, -5756, 5304, -12813, 4373, -7236, 5755, -7270, 2952, -8410, 4187, -9690, 5426, -9920, 5372, -14006, 5470, -11803, 4541, -7336, 4905, -7616, 7615, -12173, 7484, -11558, 6609, -9835, 6714, -12844, 6485, -14607, 7930, -17358, 8872, -15773, 8423, -12525, 8730, -11822, 7583, -10801, 8102, -15731, 4715, -6962, 5881, -10989, 6798, -11035, 6035, -14804, 5747, -9839, 7718, -12209, 7282, -13055, 5919, -11956, 5940, -11128, 5037, -12305, 5923, -12553, 6395, -13381, 5220, -11251, 6906, -13174, 8037, -16205, 8297, -13450, 7488, -9415, 6998, -14073, 6785, -9790, 6589, -10638, 7711, -12951, 7482, -15079, 8410, -13423, 6409, -12290, 5111, -7831, 4962, -7846, 8629, -11097, 6340, -10740, 7027, -16031, 8057, -14412, 8109, -13874, 7275, -16218, 7498, -11868, 5228, -12202, 7854, -9218, 7458, -9813, 7045, -9582, 6811, -10570, 6246, -11563, 7124, -9564, 7650, -16226, 8508, -15020, 5774, -13040, 4599, -8956, 4387, -10036, 4429, -8798, 5742, -9526, 8378, -10282, 8744, -15812, 9928, -15309, 7981, -14057, 9479, -14379, 8185, -13675, 6656, -7916, 7492, -9924, 7174, -16537, 7962, -14741, 8886, -14655, 9674, -15611, 7642, -14099, 8639, -11783, 7935, -15491, 8416, -11336, 5396, -7791, 6873, -11081, 9071, -10576, 8492, -13717, 11766, -15355, 10520, -14203, 13056, -17364, 11168, -13925, 12703, -13408, 10909, -11707, 9828, -16272, 9513, -13143, 8516, -10527, 9045, -13731, 9360, -13683, 10322, -15866, 12767, -17548, 11067, -14616, 10076, -14455, 7264, -8081, 5363, -10509, 6510, -10545, 8294, -13169, 7916, -13228, 9649, -15343, 9280, -13042, 10150, -15096, 10032, -13549, 10077, -14807, 9005, -13418, 8429, -14349, 8068, -12803, 7575, -10553, 8672, -13230, 9446, -13495, 9774, -13769, 8991, -14085, 8829, -11506, 8256, -12766, 6551, -11248, 4966, -8272, 9016, -8125, 10299, -9721, 10462, -9464, 10433, -9788, 10298, -9533, 9554, -8865, 9797, -9126, 10514, -10122, 11247, -10815, 10688, -10657, 10014, -9490, 9639, -9412, 8700, -8032, 7929, -7428, 9859, -9128, 10026, -8945, 10635, -9873, 10390, -9786, 8620, -8246, 7819, -7064, 10995, -10009, 12473, -11536, 11161, -10019, 11097, -10218, 10696, -9967, 10597, -9967, 10177, -9468, 10293, -9866, 8681, -8185, 7546, -7156, 8283, -8163, 10209, -9796, 10093, -9243, 8263, -7837, 8624, -7558, 9228, -8504, 9338, -8106, 10735, -9937, 11844, -10934, 8873, -8288, 10646, -9841, 12080, -11130, 10262, -9443, 10086, -9543, 10350, -9412, 9041, -8751, 9064, -8945, 9387, -8974, 9704, -9003, 7437, -7039, 7927, -7430, 9659, -8909, 6832, -5990, 9132, -8648, 6706, -5799, 8985, -7857, 7205, -6429, 8875, -8063, 9202, -8320, 8748, -8073, 10187, -8966, 11244, -10223, 10353, -9246, 9894, -9261, 8256, -7238, 8873, -8459, 11339, -10587, 9431, -8607, 10269, -9552, 9537, -9184, 9693, -8529, 8704, -7800, 7742, -7224, 9009, -8473, 9096, -8395, 10112, -8974, 7777, -6862, 9433, -8520, 11135, -10492, 9954, -9133, 9577, -8441, 10077, -9493, 9613, -8803, 7225, -6408, 4774, -3928, 10142, -9601, 10684, -9937, 8644, -8020, 8252, -7254, 10522, -10144, 10424, -9617, 7526, -6534, 8233, -8219, 10853, -9778, 9316, -8048, 10509, -9802, 9993, -8987, 10505, -9564, 11845, -11147, 11551, -10870, 7853, -7020, 9262, -9001, 10017, -9199, 7869, -7097, 6342, -5936, 8373, -7963, 9024, -8812, 8473, -7591, 7294, -6594, 8639, -8317, 7685, -6498, 7943, -7685, 9714, -9169, 10537, -9111, 7999, -6999, 9706, -9061, 11238, -10062, 11451, -10424, 11680, -11441, 11926, -11508, 8493, -8033, 10373, -9966, 8818, -8329, 6924, -6173, 8346, -7672, 8542, -7533, 6052, -5497, 6078, -5803, 7847, -7311, 9041, -8700, 7575, -6424, 8383, -8221, 11662, -10881, 9338, -8374, 8959, -7936, 10256, -9858, 9680, -9426, 8717, -7552, 5962, -5258, 5945, -5147, 8666, -7935, 10325, -9649, 9134, -8281, 9570, -9102, 9021, -8683, 8776, -7923, 6158, -5577, 6270, -6055, 7125, -6786, 8255, -8167, 8615, -7963, 9444, -8790, 8746, -7738, 9459, -8497, 7544, -6412, 9159, -9116, 5791, -4690, 5753, -5125, 6218, -5668, 4753, -4325, 9460, -8894, 7848, -7072, 8236, -7274, 8090, -7174, 9799, -9103, 11024, -10386, 9667, -8923, 5697, -5245, 3761, -3688, 7447, -6848, 8093, -7369, 10674, -9857, 8624, -7825, 9463, -8715, 5968, -4864, 7439, -6950, 5248, -3790, 4704, -3768, 6722, -5534, 8393, -7583, 9824, -9379, 9072, -8312, 8260, -7326, 7297, -6839, 7960, -7544, 9602, -8377, 9400, -8365, 7680, -6997, 6108, -5135, 9653, -8816, 10832, -10596, 9620, -8605, 8286, -7222, 7863, -7484, 8635, -7406, 9107, -8530, 6581, -5359, 4843, -4388, 7850, -6616, 10720, -9663, 8057, -7457, 7579, -6627, 8295, -7760, 8528, -7756, 9520, -8618, 9333, -8004, 10347, -9239, 9296, -8354, 8410, -7359, 9243, -8738, 10950, -10014, 9445, -8900, 8356, -7373, 10573, -9903, 8889, -7560, 9783, -9110, 9691, -8641, 9569, -9200, 9751, -8639, 10347, -9193, 6845, -6612, 6337, -5804, 7558, -6949, 8806, -8638, 12093, -11218, 10947, -9906, 10558, -9865, 10934, -10015, 9528, -8463, 9911, -9029, 9040, -8024, 8016, -7940, 7967, -7200, 10067, -9406, 8821, -7704, 8786, -8120, 10302, -9121, 10438, -9986, 10982, -9757, 8773, -7761, 8376, -7893, 8397, -7874, 6776, -5940, 9485, -9207, 11942, -10673, 12141, -11653, 11654, -10967, 11977, -10889, 10707, -10002, 9962, -9120, 10069, -8694, 11268, -10542, 10692, -9679, 10388, -9679, 10508, -9366, 10445, -9835, 9966, -9057, 10975, -10497, 7884, -7056, 7394, -6640, 11112, -10348, 10557, -10210, 9553, -8534, 10128, -9760, 11595, -10223, 11330, -10700, 11518, -11000, 9531, -8840, 10122, -9798, 11981, -11193, 10988, -9987, 11380, -10615, 12051, -11111, 10976, -10498, 11272, -10200, 11753, -10835, 11355, -10601, 10389, -9619, 8676, -8190, 10086, -9137, 10708, -10467, 12356, -12410, 12146, -12009, 12330, -12410, 12903, -12781, 12153, -12120, 12194, -12517, 8563, -8431, 9275, -9435, 13004, -12726, 13112, -12874, 11521, -11665, 11663, -11543, 12788, -13227, 12505, -12316, 12356, -12423, 12007, -11730, 12003, -11873, 11319, -11300, 9990, -9834, 11203, -11441, 11805, -12202, 10618, -11097, 10770, -11465, 10687, -11133, 10781, -11201, 10774, -11186, 11744, -12410, 12580, -13101, 11794, -12307, 11207, -11782, 11725, -12240, 11061, -11126, 9810, -10273, 9872, -10134, 9950, -10517, 10847, -11129, 11207, -11685, 10448, -10836, 9767, -9947, 13479, -13426, 14000, -13614, 11058, -10649, 10418, -10369, 11917, -11670, 11179, -11002, 11562, -11521, 13422, -12850, 12404, -12407, 11466, -11714, 11849, -12029, 13061, -13102, 11381, -11403, 11203, -11121, 11961, -11943, 11684, -11633, 11439, -11383, 12867, -13340, 11934, -11690, 11112, -11053, 13200, -12919, 12905, -12236, 9594, -9287, 9884, -9713, 11869, -11587, 11810, -11731, 12748, -12779, 12501, -11906, 11622, -11339, 11038, -10791, 11188, -10822, 11655, -11138, 9844, -9731, 11283, -10717, 12343, -11841, 11519, -11673, 12051, -11517, 12639, -12064, 12383, -11784, 12196, -11787, 13641, -13264, 11823, -11229, 9355, -9165, 10364, -10224, 9500, -9365, 11307, -11137, 13213, -12907, 12854, -12597, 10561, -10716, 10092, -9931, 10179, -9213, 9222, -9028, 9450, -9007, 10904, -10630, 11884, -10928, 11485, -11249, 10640, -9928, 10906, -10369, 11085, -10623, 11514, -10961, 12279, -12275, 10411, -10571, 9008, -8878, 8408, -8048, 7606, -7694, 9490, -9538, 12468, -12160, 11586, -11548, 8768, -9002, 8705, -8658, 8200, -7702, 8803, -8794, 8996, -8938, 10992, -10469, 10766, -10541, 10811, -10769, 9176, -8907, 8971, -8142, 9672, -9271, 10557, -10414, 10359, -10613, 9401, -9408, 8765, -8412, 8641, -8612, 8641, -8753, 9714, -10072, 12236, -11874, 11199, -10771, 9181, -9246, 8030, -7910, 7698, -7501, 8109, -8052, 9228, -9086, 10520, -9727, 8889, -8818, 8444, -8225, 8583, -8445, 8307, -8687, 9668, -9858, 10805, -10711, 9402, -9509, 9374, -9202, 9173, -8748, 8743, -8657, 8869, -9151, 10317, -10453, 9186, -9015, 9179, -9403, 8860, -9322, 8940, -8604, 7609, -7404, 8767, -8915, 10235, -10127, 8585, -8691, 7543, -7415, 6399, -6727, 7988, -7822, 9195, -9331, 9599, -9973, 9177, -9327, 9424, -9323, 9298, -9244, 7895, -7865, 7765, -7201, 8065, -8112, 9597, -9296, 7905, -8179, 7577, -7770, 6782, -6865, 7630, -8008, 7547, -7471, 8861, -8731, 9429, -9481, 8458, -8565, 5614, -5856, 5391, -5924, 6186, -7010, 8127, -8399, 10057, -10310, 10377, -10371, 10044, -9786, 9442, -9062, 8205, -8340, 7821, -7614, 7426, -7653, 9539, -9680, 8649, -8627, 6121, -6100, 4927, -4782, 7299, -7369, 8519, -8522, 8634, -8541, 8309, -8186, 7853, -7626, 4867, -4763, 5674, -5790, 5371, -5420, 5753, -5739, 7229, -7318, 10744, -10855, 9789, -9728, 9131, -9311, 9608, -9497, 9513, -9432, 9146, -9159, 10163, -10049, 11728, -11239, 9473, -9400, 8408, -7744, 8827, -8958, 9238, -9051, 8688, -8224, 7520, -7405, 8924, -8704, 7629, -7487, 7904, -7800, 5907, -5719, 3656, -3291, 6437, -6283, 9563, -9379, 9298, -9174, 8888, -9018, 9605, -9784, 9475, -9503, 11045, -10921, 11419, -11196, 12099, -11561, 11025, -11008, 9501, -8887, 10118, -10113, 9481, -9265, 9664, -9295, 9469, -9624, 10142, -9643, 10016, -9575, 11620, -11113, 9610, -9532, 6658, -6505, 8059, -7447, 9396, -9261, 9094, -8925, 9138, -9178, 10606, -10390, 10568, -10561, 11769, -11727, 11738, -11912, 11857, -11618, 11320, -11108, 10240, -10301, 11305, -10955, 10467, -10404, 11578, -10824, 10675, -10244, 11185, -10992, 11733, -11359, 12302, -11943, 10193, -10051, 7935, -7898, 7668, -7284, 9120, -9236, 10174, -10119, 9718, -9320, 10104, -9998, 10963, -10667, 11128, -10967, 12250, -12142, 10517, -10589, 10577, -10314, 10648, -10834, 13144, -12476, 11039, -10852, 11970, -11714, 11724, -11390, 11472, -11147, 12276, -11797, 11610, -11351, 11181, -11147, 10149, -10075, 9046, -8956, 9714, -9761, 12787, -12527, 12311, -11621, 9866, -9263, 11044, -10229, 11117, -10544, 11882, -11442, 11385, -10773, 11295, -10720, 12375, -12003, 13753, -13527, 12144, -11762, 11923, -11536, 12516, -12453, 11386, -10912, 11072, -10351, 10685, -10437, 11416, -10855, 11451, -10825, 11832, -11395, 11993, -11434, 11040, -11046, 11751, -11400, 9301, -9111, 9718, -9605, 10175, -9762, 9990, -9473, 9650, -9203, 9468, -9237, 10302, -9854, 11320, -10937, 11606, -11232, 11973, -11635, 11705, -11301, 11114, -10951, 10627, -10315, 10586, -10309, 10550, -10129, 10319, -10024, 10921, -10381, 10889, -10442, 1138, -208, -5598, -2581, 3334, 4534, -4000, -3479, 3895, 6323, -4540, -4135, 4482, 5782, -5032, -4655, 3785, 6204, -3783, -3715, 4313, 6253, -2911, -2786, 4541, 5746, -1964, -1420, 3840, 6706, -3968, -2333, 4124, 7082, -6320, -4381, 477, 6670, -5942, -4017, 563, 4117, -4656, -2542, -5, 6542, -1841, 318, 6213, 9489, -2955, -1533, 3406, 11511, -1214, 599, 579, 5609, -4827, -3608, 3363, 8813, -6177, -5219, 4922, 8079, -7373, -5534, 599, 6261, -3440, -2582, -590, 5813, -4143, -2511, 690, 7992, -7457, -4077, 1759, -52, -4748, -975, 314, -2702, -347, 554, 1609, -866, 1312, 3107, 4079, -799, 417, 2556, 5404, -1362, 3357, 5171, 3240, -2759, 3602, 5406, 4899, -2144, 2089, 3812, 2683, -4463, -105, 2829, 17034, 5501, -4536, -1821, 5466, 11403, -8294, -6415, 2068, 8821, -7243, -5828, -8353, 5267, -4798, -2117, -4817, 1938, -3875, -1604, 5779, -10260, -4324, -1263, 1834, 4967, -4985, -3325, -1386, -3029, -4554, -3046, -3186, -592, -5770, -3427, -5759, 79, -1559, 231, -1096, -127, -4623, -2160, -225, -4081, -7624, -2093, 1307, 2026, -5473, -1875, -3268, 1338, -1122, -20, -592, 1451, 878, 2403, -2324, 807, 1007, 2989, -161, 415, 519, 2781, 1779, 862, 1487, 3515, 637, -1053, 1062, 3350, 5037, 1263, 357, 3789, 12835, -5303, -3696, 45, 2309, -9402, -4709, -2459, -896, -8020, -3146, -774, 7007, -5684, -4236, -835, -8725, -7089, -2118, 1004, 2832, -3966, -3739, -990, 2146, -2841, 673, 2713, -5386, -2478, -2755, -988, -6169, -6418, -3309, -674, -6162, -3233, -2479, -58, -2993, -4991, -7456, -4929, -10591, -10226, -10834, -5741, -3502, 3571, -8247, -5043, 2053, 4415, -6674, -6382, -763, 7268, -3626, -2946, 191, 4644, -3485, -2327, -3057, 9962, -2470, -728, 1499, 3332, -837, 1497, 3303, 189, -604, 1062, 12580, 1730, -3977, -496, 1031, -2231, -6804, -3602, -5480, -4972, -4463, -2215, -1068, -7471, -4543, -1129, 12050, 5304, -1869, -1149, -676, -1365, -3856, -2210, 5935, 1689, -4592, -3570, -6191, 1004, -5895, -3602, -8763, 21, -3540, -2499, 9151, 2317, -1739, -408, -8513, 104, -5335, -3477, 8484, -11448, -8081, -6873, -8599, -3389, -8731, -5390, -3608, -424, -3909, -323, 7224, -3942, -807, -758, 1125, -8178, 94, 683, 9431, -1047, 2950, 3659, -8943, -3551, 3140, 5006, -3244, -3938, -900, 1561, 4324, -1657, -874, 462, 13643, -6624, -2070, 1379, 5552, -3013, -1451, 1879, -3141, 703, -1676, 457, 545, -5712, -4922, -2188, -10163, -5700, 2831, 4017, -3188, -12964, 374, 1395, 4491, -4605, -1642, -592, 209, -198, -4356, -2484, -6303, -656, -210, 836, 3595, -9014, -92, 1085, -616, -7707, -1778, -786, -8285, 243, -2609, -1851, -6248, 838, -6456, -3739, 1836, -5043, -2384, 1253, 1751, -3802, 2789, 3297, 4725, 1274, -273, 1190, -2880, 4304, 261, 1558, -3019, -9681, 1095, 2927, -10471, -4081, 309, 1974, 4515, 55, -348, 881, 5694, 4599, -713, 2053, 938, 6065, -1437, 572, 4840, 4342, -2162, -55, 12459, 10499, -655, 1266, -4893, 5784, 3257, 4386, 1786, 2847, 1611, 2708, -662, 2831, 1290, 2613, 7094, -3598, 1471, 3525, -7225, -130, 438, 1362, -1638, -268, -714, -646, 5467, 1005, -3279, -2523, 5857, -4288, -5003, -4252, -1979, -98, -8898, -6209, 175, -2254, -4037, -247, 7173, -1776, 2859, 3287, 6150, -968, 310, 2493, 6088, -14507, 2809, 4177, 1447, 712, 1250, 3119, -8124, 4569, 2311, 3095, 9331, 5969, 632, 2281, -6004, -4728, 1393, 3269, -4079, -5369, -621, 903, 980, -6188, -3557, -2199, 7439, -6735, -1146, 497, -5358, 2144, 3938, 4650, 4505, -1368, 1985, 2760, -4789, 2362, 2545, 3523, 2681, -1373, 1932, 3305, -7016, -5244, 2604, 3384, 1997, -935, -1981, -1903, 2187, 4681, -3916, -2738, 9338, 11324, -812, -547, -3139, 13172, -5195, -2470, 1474, 2380, -500, 4420, 1384, -2020, 4593, 5599, 384, -6390, 339, 2500, 3753, -5523, -945, 238, 4847, -12843, -1419, 163, 6500, -3291, -855, -286, 11230, -9215, 2156, 4111, -4239, -1226, 5036, 6119, -354, 4001, 3411, 4197, -6450, 25, 777, 2626, -3308, -3136, 3451, 4648, -7358, -2682, 6236, 7405, -2252, 11592, 7481, 7753, 4050, -4046, 3834, 5959, 2276, 1221, 5095, 7099, 2912, -1877, 2720, 4622, 6473, 8587, 248, 521, 5788, -4070, -4625, -3521, 252, -5902, -51, 965, -4778, -13105, -453, 2931, -7288, -4419, -2245, 2252, 3908, 7161, 4713, 4540, -8489, 4017, 2444, 3109, 10304, 4227, 1459, 2165, -2748, 2004, -1541, -95, -2188, -10058, -2611, -1355, 2841, -6099, -762, 1230, 8515, -5538, 6206, 7801, -8684, 7244, 8918, 9729, -2006, -907, 2986, 4820, -7314, -329, 7477, 7960, 3324, -8147, 2937, 3515, 199, -9827, 5200, 6658, 3541, -4617, 5461, 7056, 7868, -9666, 9637, 10830, -840, -7496, 2231, 3647, 712, -17117, 1304, 2728, 1558, -6747, 3243, 3741, -1717, -5677, 4778, 5351, -7227, -4485, 1488, 5176, -5768, -2757, -574, 2998, 4303, -12848, 1438, 2025, -291, -5591, 1572, 1994, 437, -11046, 3966, 4653, -6359, -10700, 2719, 4752, -8463, 3591, 2327, 3086, 13680, -247, 2551, 3997, -9415, -1724, 5149, 6611, 4095, -12232, 6807, 7983, -1820, -5573, 1129, 3020, 2038, -13945, 552, 1631, 1511, -1950, 1455, 2613, 3995, -2214, 1178, 2512, 983, 1750, 5065, 5752, -1587, -4599, 3559, 3884, 328, 1748, 1940, 3064, 3714, -8772, 8625, 9574, -3007, -10034, 9984, 11206, -2811, -6070, 6595, 7496, 1026, -6704, -1700, 1954, -4079, -1478, 354, 4113, 10828, 8417, 5923, 6059, 2934, 2324, 6874, 7101, -7405, 7986, 7705, 7590, 4256, -7557, 4212, 4960, -4926, -7274, 6825, 6688, -5239, -3402, 5976, 6245, -3629, -8116, 6002, 6666, 11273, -9118, 9259, 9282, -1004, -4822, 4803, 5750, -4994, 7587, 1284, 2467, 3339, -444, 2787, 4784, -1880, -8773, 2080, 4170, 3337, -5951, 2590, 3458, 1346, -6017, 7125, 7554, 7255, -3385, 5984, 7401, -3902, -9689, 6627, 7126, 388, -4825, 4331, 5000, 817, -5765, 2584, 2993, -3037, 1600, -4816, -2475, 3645, -4026, 1364, 5687, 2357, -9871, 7489, 9037, 5377, 4797, 7703, 8112, 1088, -4743, 6106, 7593, -746, -5333, 2287, 3792, 87, -4893, 6330, 6292, 10717, -26, 7302, 7516, 1299, -4878, 4043, 4366, 3445, 3656, 3817, 3229, 9023, 4068, 2243, 3003, 9234, -583, 5571, 6537, -2770, -10144, 6795, 8880, -8223, -2435, 6832, 8060, -4951, -1193, 6502, 7034, -2222, -6692, 6685, 7511, 5652, -10454, 7011, 8260, -9829, 1642, 5867, 6398, 3633, -22, 4225, 4896, 1991, 1953, 5961, 6653, 14, 4688, 912, 4360, 682, -5504, 1359, 5429, -8049, -3591, 6425, 7100, 4311, -8466, 7962, 9436, 1896, -8772, 7273, 8952, -8928, 945, 2310, 3860, -4372, -439, 3563, 4237, 10451, 2249, 2775, 3132, 3277, 3659, 4189, 4097, 3722, -4641, 2339, 2800, -2896, -9096, 5956, 6911, -8037, -12217, 7586, 8225, 3524, -7742, 3266, 5059, 2133, -12019, 5437, 6086, 1124, -11218, 5979, 6542, 6547, -7385, 6566, 7713, 7632, -1406, 6310, 7153, -7431, -355, 7344, 7545, 4910, -2180, 5776, 6096, 3128, -169, 7951, 7650, -1221, -3735, 5230, 9287, -3747, -2876, -1021, 2264, -4224, -2552, 4110, 4485, -3921, -2771, 4178, 5106, 1743, -3862, 6824, 8054, 1764, -9095, 3358, 4993, 5516, 3298, 5820, 6623, 6274, -7900, 4225, 5296, -1422, -3851, 8030, 8724, 631, -5126, 6881, 8257, -2333, -8135, 4526, 6743, -5841, -7915, 2741, 3417, 8491, -7262, 958, 2258, -9604, -3037, 4386, 5119, 1287, -4091, 5135, 6349, 1987, -3828, 3325, 4772, 1101, -7182, 5791, 6325, 955, -9603, 5442, 5775, 380, -6583, 4976, 4942, 586, -10746, 7107, 6886, -3396, -5229, 780, 4505, -6190, -1645, -4967, -590, -4571, -3745, -1117, 1431, -5815, -4107, -1829, 795, -4047, -5429, 298, 3115, -252, -2449, -1815, 783, -2240, -6102, 1579, 4472, -692, -6298, 2980, 5857, 6701, -1626, 5088, 8588, 707, -7221, 1267, 4615, -5869, -3138, -2847, 489, -3785, -4577, -3709, -983, -4297, -4538, -1262, 1633, -9007, -3872, -872, 1785, -3645, -4898, -1068, 1702, -2822, -5053, -597, 2524, 5294, -1692, -360, 2799, 8658, -4254, -1471, 985, 3095, -4077, -1819, 250, -3156, -6310, -2824, -820, -2380, -5910, -2151, 1906, 2032, -1626, -9500, -5423, -118, -1484, -7320, -6362, 1616, -1402, -6751, -5815, 1341, -1547, -6190, -5425, 1582, -808, -5984, -5071, 1107, -695, -5557, -4603, 944, -1178, -6144, -4117, -503, -571, -7245, -4248, 2261, 1360, -9585, -5803, 260, -64, -10779, -7927, 1388, 1663, -11117, -8354, 881, -372, -10351, -6555, 5778, 3591, -8544, -5300, -1636, 5077, -9981, -6652, 780, 4176, -9745, -7599, -1195, 3856, -9823, -8096, 2044, 2598, -10183, -7694, 229, 1131, -8442, -6347, -87, 907, -7114, -5369, -52, 1163, -8252, -4262, -1006, 252, -10672, -3474, 2377, 224, -6633, -4234, 3631, 3949, -5276, -2265, 2344, 3608, -4988, -1431, 3076, 3343, -4592, -430, 3028, 3015, -4549, 11, 2930, 3971, -4767, -4, 3317, 3624, -5628, -826, 8608, 5678, -10284, -5668, 1694, 6507, -10063, -7991, -12, 6791, -11861, -10297, -3828, 4062, -9647, -5216, 3017, 1193, -10461, -5126, 1452, -1319, -9514, -4836, -162, 6533, -8073, -4973, -2988, 1351, -10973, -8347, -800, 3465, -9560, -6863, -1747, 3274, -9280, -6234, 357, 1012, -7321, -5026, -1765, 513, -10078, -3462, -1308, -5, -11394, -4188, 843, -282, -6879, -3567, 1375, -1332, -6225, -1580, 1218, -871, -5437, -484, 1539, -911, -5487, 162, 2458, -1711, -5478, 783, 2849, -1767, -5143, 490, 4082, -1182, -7062, -1500, 3866, -3183, -10682, -5163, 1580, -960, -11349, -8231, -1267, -1611, -10694, -8926, 2777, -677, -9775, -6483, -2446, -385, -10078, -5570, 5848, -3969, -6978, -2270, 1728, -2522, -9566, -5756, 2006, -2708, -7895, -5288, -3514, -3786, -8627, -5903, 2760, -1424, -6684, -3055, -3461, -2618, -6216, -3583, -3560, -2253, -9697, -3408, -1384, 2003, -11223, -4407, -554, 189, -7605, -5560, -2042, -328, -5636, -2175, 433, 2031, -4259, -598, -2784, 3018, -4615, 510, 1399, 424, -2387, 3440, 1524, -1126, -3537, 1049, 3493, 2402, -6733, -2097, 698, 2981, -8611, -3412, -915, 119, -7933, -4770, -2137, -2121, -7322, -5183, 8002, 4012, -7351, -5710, -6562, -2944, -7044, -4522, 3039, -2768, -5819, -1798, -296, -5500, -7853, -4283, -1397, -3454, -6597, -4347, 3232, 608, -4548, -3208, -2919, -4786, -4296, -1480, -1517, -5670, -5006, -1832, -4248, -2072, -8815, -2963, 1802, 3173, -10174, -3837, -1837, 676, -4862, -4571, -1180, -1325, -3233, -1738, 5723, 405, -2081, 582, -5885, -2280, -4023, -336, 40, -1755, -673, 4035, 1557, -731, -1495, 2654, 5018, -3345, -5583, -470, 2899, -1737, -6465, -1989, -3399, 117, -6110, -2855, 2675, 302, -5068, -2672, 4618, -151, -5068, -2064, -7545, -4322, -3602, -1804, 1196, -1329, -4429, -1321, 1142, 1151, -5943, -3203, -2955, -1063, -4954, -2304, 3835, -5669, -1858, -228, -849, -3066, -4282, -1968, -1305, -562, -4479, -3174, -4332, 265, -7839, -3563, 2901, -2391, -9599, -2993, -1000, -1655, -3906, -2693, 1947, 1504, -4092, -2866, 4006, 4167, -4102, -1832, -5126, -3016, -3953, -830, -1109, -1405, -2563, 1611, 3294, -109, -2648, 890, -423, -218, -4354, -4, 4907, 682, -4701, -1212, -915, 602, -6288, -3428, 6491, 1310, -5652, -3098, -3250, -2546, -5037, -1685, -3323, -1614, -1418, 1316, 1153, -2608, -5043, -2714, 3467, -2238, -6224, -2756, -2302, -1512, -5197, -2923, -2069, -822, -2460, -1505, 799, 1715, -4796, -2667, -1829, 738, -8160, -5762, -4367, 1175, -10466, -5739, 3774, 1863, -7375, -1021, 2219, -2257, -2862, -1331, 5689, -1082, -4089, -1980, 343, -4260, -5660, -2693, -2725, -3629, -4469, -2404, 40, -223, -2728, -492, 7645, 2742, -2360, -374, -5454, 504, -3891, -797, 3011, -2234, -5791, -2714, -1375, -2233, -6601, -4774, 3554, -1215, -6388, -4681, -496, -2858, -4610, -2255, -466, -1748, -3914, -2175, 416, -999, -4582, -3037, 2483, -3784, -5949, -2430, -1109, -2433, -5209, -2470, -221, -688, -3745, -3792, 2897, 2705, -5234, -4262, 3167, 6501, -8117, -8661, -6976, 8291, -10918, -8347, 3192, -773, -8170, -1482, 1255, -1808, -4374, -2743, 1465, -4638, -5913, -3357, 1, -3334, -5507, -3494, -847, -4592, -4454, -3578, 47, -2359, -3044, -2764, 5767, -5278, -4288, -2439, -2955, -3332, -5365, -3227, -421, 1380, -4385, -1645, -502, -1044, -5945, -3694, -372, -1245, -5294, -3792, 1657, -1213, -3506, -2069, -2734, 3673, -5415, -4445, 1302, -1885, -5074, -3754, 3163, 4993, -4494, -1910, -1840, 2439, -4487, -3164, 5372, 7792, -3791, -6005, -2504, -1562, -5719, -6676, 4845, -4404, -5477, -6151, -4912, -4287, -9359, -7401, -3100, -3974, -8853, -2605, 4674, 1588, -5225, -4247, -2991, 1540, -5435, -3991, 5473, 3924, -6095, -4821, -1971, 938, -5249, -4746, -349, -4071, -4217, -3811, 28, -4202, -2867, -2051, 10760, 99, -2335, -678, -8158, 398, -3503, -1136, 1438, -2053, -4204, -1397, -3230, -1922, -4207, -2576, -638, -3138, -4594, -3725, -197, -5048, -4893, -2790, 1651, -3813, -3036, -1463, 6097, -4207, -3562, -972, -8383, -5011, -3007, -919, 6415, -4532, -3609, -4372, -1882, 4897, -2619, -3392, -3462, -101, -4705, -4749, -2587, -1557, -7103, -3421, -4498, -1813, -7810, -2299, 5295, -7674, -5234, -4128, -1949, -5450, -5302, -4776, 5285, -4460, -6956, -6426, -3532, -2615, -5173, -4112, 1678, 1546, -2320, -2588, 5038, -1433, -2176, -2891, 309, -5996, -2269, -1578, -2920, -9138, -2576, -497, -822, -6109, -4070, -1488, -3869, -5601, -3665, -1870, -256, -1180, -3658, -1527, 7864, 1446, -1310, 201, -458, -384, -1310, -110, 3615, -5100, 113, 1017, -2752, -4078, -1447, 183, 8389, -5649, -991, -478, -871, -7563, -3557, -3716, -6273, -4852, -3304, -3362, -4564, -2685, -7307, -2310, 3662, 5634, -4737, -473, 401, 6423, -1562, -2301, 6338, 729, -1800, -3394, -3996, 1367, -3360, -4470, 478, -5456, -4343, -4079, 197, -3417, -2993, -4423, 2852, -2608, -1198, -2601, -1907, -5154, -549, -1741, 3647, -4340, -1745, -1710, -5732, -2658, -2176, -1382, 3599, 1707, -1217, -201, -826, 986, -3489, -1692, 5021, -2259, -2814, -683, 646, -5082, -365, 57, 4105, -604, 932, 290, -3448, -460, -984, -727, 2460, -4461, -1668, -804, -1399, -7084, -1008, -713, 175, -4228, -783, -1112, -2426, 117, -6093, -2556, 9635, 355, -5730, -885, -3238, -3813, -3808, -3352, 6218, 3022, -1017, -2229, -8417, -1427, -2060, -3963, -606, -2122, -3988, -2770, 1360, -2915, -1884, -3152, 2264, -1949, -1493, -3014, -316, -2704, -1407, -2957, 2341, -774, -1445, -3658, -897, 300, -2842, -4059, 6036, -1406, -2443, -2019, -2631, -3569, -3367, -1320, -1509, -2921, -2729, -553, -963, -1551, -1431, -915, 3422, -5722, -430, -360, 314, -5303, -1948, -757, -820, -2599, -64, 818, 1259, -2026, 77, 107, 1072, -1459, -1180, -1635, -2888, 2650, -5877, -2096, 6507, -6000, -5714, -816, -3729, -6253, -1731, -1645, 5138, -5196, -910, -965, -4032, -4685, 464, -188, -1027, -289, -1917, -637, 544, -2662, 667, 14, 1285, -2864, 650, -2123, 3049, -1919, -83, -3234, 1136, -3417, -1104, -4086, 1470, -2690, -3592, -3724, -344, -3445, -2860, -2395, -1176, -6726, -1080, -376, 601, -6027, -1491, -1951, -595, -3759, -144, -860, 2252, -2849, 297, 316, 866, -3302, -1364, -1850, -435, -2669, -1304, -2119, 1685, -1964, -839, -1927, 1701, 1667, -1283, -2219, -3356, -149, -6766, -1488, 2222, -2013, -5473, -2299, -822, -2840, -295, -3047, 3837, -3407, 1763, -387, 1543, -3269, 2063, 61, -783, -3052, 294, -870, 3085, 709, 3062, 369, -1639, -1272, 2613, -652, 6100, 4985, 4320, 3031, -6567, 3398, 1902, 1165, 1132, -4896, -2237, -233, -3043, -5362, -2460, -1730, 1124, -3636, -1128, -1318, 3545, -1504, 1455, 973, -283, -2981, 1307, 644, 1428, -3140, -360, -544, 3554, -2649, -150, -1103, -215, -3690, -522, -2342, 3985, -2892, -395, -2562, -1694, -5170, -2406, -3714, -5912, -3037, -6986, -1978, -2071, -377, -5910, -2489, 2771, -1526, -1464, -3884, 25, -1666, 184, -2298, 2140, -2867, 299, -2066, -35, -2844, -111, -2050, 3702, -1667, 1667, -369, -2352, -2760, 1937, 147, 7705, -4199, 3232, 4073, -7523, -5800, 1757, 3749, -2801, -1041, -2342, -36, 2437, -1549, -3298, -2620, -1818, -1439, -3935, -3664, 1229, -2281, -1630, -532, 434, -3735, -1311, -413, 1787, -2598, -1512, -361, 2076, -3261, -1036, -467, 2783, -1404, -2055, -2490, -1961, -1811, -3288, -4569, -392, -124, -3654, -4706, -2486, 1857, -7977, -4674, 153, 4344, -5679, -4000, 2731, 6552, -5617, -6209, 991, 9183, -3794, -6354, 681, 8604, -4105, -7059, 422, 8482, -5807, -7045, -656, 7909, -6870, -6855, -1906, 6904, -7479, -7074, -1539, 5753, -7705, -6593, 1779, 6483, -6720, -6492, 1216, 7066, -6379, -7320, 745, 7549, -6165, -7033, 2580, 6196, -6765, -6865, 3231, 7389, -6855, -6161, 807, 7931, -6886, -6635, -1618, 9054, -6346, -6224, 111, 7726, -7114, -6286, -660, 7678, -7889, -6758, -535, 4985, -8295, -7477, 3375, 4806, -9169, -7831, -322, 4193, -8348, -6201, -1464, 1592, -7382, -5058, 7069, 4470, -5708, -6414, 2348, 6529, -4819, -8133, -1980, 6388, -4438, -8231, -37, 4415, -6682, -7884, -2708, 4539, -6973, -6781, -5731, 4423, -6897, -6183, -2770, 6284, -7722, -5781, 4690, 8229, -9102, -7824, 853, 8184, -8954, -9754, -521, 7077, -8370, -8627, 4278, 6724, -8038, -7383, 4335, 5122, -7950, -6656, 1154, 5418, -7815, -6658, -3322, 7793, -7736, -7051, -649, 5882, -8285, -7456, -1728, 6405, -9053, -8323, -2238, 8222, -8054, -8192, 5622, 6148, -9736, -7652, -1850, 1541, -11326, -6138, -3580, -1519, -7979, -4141, 9454, -1159, -5707, -4937, 999, -3198, -4545, -6825, -5701, -3105, -4472, -6888, -544, -2282, -5925, -5799, -5155, -2588, -4426, -3836, -8224, -2516, -4898, -3661, -69, -1069, -8402, -5415, 3214, -27, -9513, -6928, 627, 1183, -8143, -8008, -2683, 2060, -8162, -6887, 5728, 4046, -8551, -7194, 2147, 802, -7652, -5981, 1266, 1169, -7355, -6084, -2388, 474, -9124, -7698, 371, 436, -7548, -7873, -2116, -358, -8163, -8884, -709, 604, -8105, -8837, 1580, 1186, -9861, -7080, -4108, 510, -11234, -5162, -104, 1923, -8253, -4077, 6359, 1486, -5936, -4977, 953, 58, -3160, -5226, -5085, 4063, -4684, -6332, -1768, 5787, -6071, -5807, -4174, 2182, -3729, -3420, -9298, 1077, -3794, -2928, 4101, 1781, -8817, -6040, 2275, 4172, -8232, -6636, -1045, 2907, -5359, -5495, 555, 3329, -6718, -5367, 3996, 7244, -7577, -6739, -4839, 5239, -6982, -6148, 616, -1898, -6858, -5556, -206, -3577, -8157, -6415, 1350, -2835, -7074, -7173, 638, -1043, -7388, -7908, -3144, -2832, -7880, -8365, 850, -5458, -8930, -6156, -1521, -3160, -11498, -5114, 5369, 2931, -9498, -5492, 1795, 2870, -6637, -6374, 3149, 3827, -2611, -4797, 1127, 4365, -5609, -7181, -4729, 6, -7453, -6975, -3593, -1286, -3200, -3963, -6349, -649, -2943, -3427, 3595, 1873, -8590, -6266, 838, 1622, -8412, -6768, -2834, 1731, -4881, -5078, 5703, 2446, -6473, -4857, 2863, 306, -7624, -6672, -7217, -346, -6209, -5312, -951, 1723, -4681, -5253, 2465, 5427, -5546, -6278, -5691, 2775, -4859, -5887, 798, -2111, -5670, -6074, -2621, 487, -6324, -6086, -1540, 1040, -7181, -5081, -567, 923, -10073, -5018, 6039, -1220, -9860, -4791, 1594, 652, -7337, -5696, 5307, 3690, -3615, -5213, 419, 3922, -6257, -7257, -6691, -1125, -8129, -7299, -1945, -3661, -4252, -4323, 327, -1192, -4343, -4571, 888, -1490, -8094, -6494, 1312, -893, -7212, -6336, -2484, 133, -5387, -5212, 5902, -328, -7634, -5824, -245, -4210, -7146, -6175, -6153, -6482, -4130, -4280, 5190, -1087, -3913, -4346, 6233, 746, -5557, -6405, -6714, 2618, -4104, -6083, -4530, 2500, -1816, -4202, 1126, 4347, -2901, -4871, -3558, 5429, -6077, -5798, -1900, 4349, -9388, -5722, 6132, -747, -8841, -3864, 1773, 645, -7895, -4777, 6680, -64, -6832, -6307, -117, -1375, -8577, -8361, -7609, -2401, -7468, -7248, 2080, -257, -3465, -4844, 7186, 5321, -4602, -6367, -950, 3226, -7099, -7741, -2115, -1295, -5605, -6352, -3346, -1179, -5113, -5344, 5634, -1594, -6751, -6835, -3218, -3750, -5864, -6038, -3684, -2683, -2614, -4103, 6816, -2190, -5125, -4163, 4498, -3659, -5637, -5613, -4934, -3503, -4727, -5600, 62, 451, -3659, -5062, 1622, 2511, -5342, -6651, 248, 7097, -8602, -8849, -7106, 7354, -9745, -8514, 6565, -1021, -7962, -3467, 367, -146, -8379, -5476, 3817, -1620, -7267, -6276, -492, -5327, -7234, -6721, -3522, -1948, -4384, -5384, 4886, 2267, -2206, -4904, 7189, 675, -4814, -6875, 2304, 1300, -7304, -8069, -4292, 4666, -5332, -5560, -4937, -1784, -5590, -5127, 2297, -1075, -5171, -5729, -686, 172, -4030, -5510, -1917, 3366, -3410, -5583, 4764, 3726, -5556, -4578, 6213, 7347, -5602, -4233, -6762, 6163, -5285, -4526, 3429, 6366, -4713, -6185, -3360, 7861, -5487, -7543, 257, 764, -9488, -9140, -3581, 506, -11774, -8827, 5829, -3809, -7900, -3571, 3790, -1067, -7645, -5955, 721, 745, -6461, -6346, 2106, 1115, -6193, -6438, -3151, -366, -3504, -5683, 3058, -2055, -2650, -5776, 5688, -2893, -3291, -5768, 9025, 152, -6543, -7512, -4412, -1590, -8720, -7487, -12347, -1441, -5538, -5007, 425, -3726, -4950, -5578, 1772, -2629, -4471, -5009, 928, -540, -4554, -6495, 3960, -1591, -6150, -6387, 6595, -1291, -6780, -6179, -6528, -520, -6279, -6844, 7436, 3581, -5103, -7909, -3202, 7491, -6986, -9311, -9569, 5846, -8227, -7425, -4179, 1484, -11266, -7116, 4895, -1757, -8200, -4192, 1868, -5960, -7729, -6953, -673, -5796, -5705, -7121, 4516, -2477, -6040, -7742, -1952, -1432, -4842, -7900, 594, -1672, -3117, -7026, 3364, -1144, -4050, -6836, 6688, -7252, -5933, -7574, -3753, -8428, -7138, -7037, -9474, -4812, -4881, -5080, -324, -2984, -4217, -4069, 4505, 409, -5913, -3976, 5236, 2269, -5023, -6018, -820, 1705, -4849, -5660, 3445, -6416, -4835, -5739, -3631, -9948, -5502, -6055, 9260, -6550, -4812, -7424, -1461, -4920, -6581, -9456, -10794, -4186, -8857, -7302, -3804, -307, -11511, -6299, 5325, 3666, -8474, -4446, -1236, 5276, -6746, -5744, -836, 1102, -4376, -6172, 2165, -2381, -5210, -6177, -1584, -3830, -4539, -6579, 42, -3238, -2393, -6610, 3038, -1737, -2667, -7431, 3578, -5438, -2975, -6791, 118, -4023, -3642, -6560, -5480, -772, -3897, -6639, 4095, 4298, -3635, -5423, 305, 2631, -6109, -4991, 5236, -4242, -6544, -5417, -3049, -3346, -4830, -5326, 2843, 899, -3659, -6446, -5191, 1919, -3993, -6430, 4768, -4014, -4060, -6604, -1996, -7396, -3772, -5949, -3582, -2454, -6772, -5822, -1595, 2293, -10521, -6194, 9279, 411, -9143, -5836, -1585, 1797, -8381, -6955, -795, 4570, -4170, -6396, -4392, 3907, -3519, -5456, -3192, 161, -2853, -4796, 1216, -1193, -796, -6112, 1551, 558, -2396, -8511, 1650, -516, -2364, -8324, 1774, -1110, -1553, -7262, -740, 1349, -2799, -6767, 4754, 331, -3952, -6064, -2422, -292, -6216, -5716, 565, -3996, -4941, -5028, -2251, -6735, -3341, -4450, 2759, -6285, -2978, -6670, -4130, -4318, -4231, -7242, -124, -2226, -1992, -5851, -2937, -3505, -1470, -4953, 3997, 1781, -5069, -5399, -1940, 3102, -9119, -5962, 8587, -7120, -9214, -5314, 1788, -6480, -9180, -6895, 1256, -2927, -5797, -7811, -6338, -1141, -5275, -6975, -4125, -157, -2238, -5243, -1421, -582, -210, -6899, 1791, -3667, -2697, -8080, 2702, -49, -3724, -8329, 487, -3304, -3675, -6313, 894, -1812, -5843, -6880, -1092, -4203, -4497, -5359, -2286, -7382, -4346, -4776, 1436, -4308, -3050, -5468, -1828, -2796, -2402, -5263, 588, -1615, -3060, -6824, -3772, -2560, -3558, -7995, 768, -3268, -1940, -6889, -44, -2007, -980, -6175, 5255, 3025, -5383, -6268, -4209, 2888, -9504, -6154, 3678, -2468, -7857, -4478, 5523, -5142, -6847, -4673, 4058, -5892, -5577, -5602, -3329, -5329, -4794, -5356, -726, -3814, -2822, -5375, -1837, -3077, -1806, -6864, 2790, -3658, -3964, -6873, 5680, 3319, -5487, -6707, -6180, 4203, -4396, -3851, -1051, -4327, -5905, -4426, -5509, -7533, -4787, -4107, 1489, -5675, -4000, -3985, 3668, -5575, -3722, -5696, -2444, -4669, -2666, -5646, 228, -3556, -3319, -6504, -1386, -4902, -3968, -7481, 940, -5652, -3021, -6870, 4122, -3957, -2989, -6516, 2914, -3770, -7283, -6859, -3506, -719, -9357, -5814, 976, -894, -5587, -3639, 4475, -923, -4607, -3669, 1966, -3573, -4119, -3841, -142, -4262, -4112, -4560, 550, -3379, -3605, -4995, 692, -2506, -3377, -5671, 4418, -2551, -4878, -5120, 3399, -5151, -6809, -4742, -4441, -6195, -7669, -4121, -6333, -4793, -5866, -3128, -399, -2810, -4884, -3912, -25, -3085, -4946, -4615, 3151, -4341, -3880, -4702, -2343, -3083, -3412, -4526, 720, -1214, -4184, -5276, 522, -2378, -4280, -5836, 2990, -3109, -4029, -5766, 2254, -3583, -4173, -5100, 2398, -1146, -6272, -4416, -730, 1698, -7492, -4116}; +#else + const Q15_T expected[OUTPUT_SIZE] = {4107, -9805, 4509, -11374, 5700, -12542, 5961, -12841, 6402, -13243, 5947, -12857, 4955, -12922, 6620, -11927, 8546, -11408, 8547, -11331, 9015, -12023, 6212, -9596, 5115, -8367, 3641, -6033, 4497, -8229, 4677, -9361, 4417, -9878, 4708, -10563, 4460, -10810, 5748, -10392, 5265, -13768, 8393, -18944, 10460, -18776, 11176, -18615, 10671, -18016, 9305, -17132, 6786, -17580, 6252, -14800, 4495, -8783, 3615, -7530, 4635, -9851, 6978, -14699, 5324, -10489, 5774, -12251, 5481, -13320, 5684, -8994, 7127, -14145, 5941, -10448, 6458, -15583, 7175, -11246, 4576, -13904, 6476, -19516, 6986, -19717, 7645, -19398, 6846, -18320, 6701, -15995, 6393, -15967, 7370, -13948, 5886, -10576, 3659, -9171, 4363, -9466, 9268, -15948, 4407, -8399, 6698, -12735, 6637, -5142, 5355, -11675, 4485, -8880, 5889, -11961, 5169, -9699, 5348, -8773, 4758, -13628, 5770, -16335, 6305, -16575, 7760, -16913, 6733, -15727, 6711, -16592, 5087, -14904, 4674, -11732, 4224, -9206, 5200, -12864, 5789, -10983, 5587, -14455, 4525, -11005, 5578, -13701, 6336, -9805, 5526, -14083, 7597, -9854, 6322, -13131, 5265, -14092, 5037, -12303, 3934, -9336, 6435, -12616, 6307, -14312, 8291, -14469, 4136, -7198, 5763, -16328, 4762, -15600, 4959, -10823, 3514, -11200, 5413, -15548, 5975, -13872, 3649, -11463, 2983, -7189, 6049, -16154, 4482, -8247, 4842, -11580, 6402, -15069, 4770, -10919, 5956, -14303, 5709, -15162, 3238, -8596, 4240, -14242, 5687, -15841, 6577, -14489, 5783, -9987, 4530, -13957, 5934, -13773, 4159, -11669, 4873, -10104, 4817, -10415, 5842, -7390, 4326, -10014, 6143, -16402, 5342, -14375, 4123, -6599, 3758, -11798, 6170, -14175, 5789, -14811, 5156, -15204, 4176, -13339, 6348, -12163, 7360, -17006, 6974, -9606, 4502, -4687, 4962, -9711, 5689, -11088, 5037, -7514, 3764, -5842, 1441, -5251, 4202, -8014, 2131, -4316, 5431, -7106, 5134, -13004, 3917, -8310, 3778, -6397, 6409, -9276, 6468, -13602, 5096, -11311, 4411, -3829, 4337, -6167, 4959, -11121, 5726, -12585, 2515, -7858, 3408, -10755, 3784, -10497, 6183, -14356, 5219, -7652, 5150, -7586, 5341, -9922, 3296, -8413, 4287, -10374, 3693, -11143, 5028, -8833, 6009, -10408, 5237, -4201, 6096, -10900, 5649, -4899, 3387, -4911, 2669, -7126, 1256, -2588, 5553, -9150, 6270, -9404, 3378, -5124, 3261, -6932, 4003, -6286, 5474, -11150, 7544, -13933, 5931, -8129, 4791, -6395, 4993, -9484, 3840, -8418, 5969, -10875, 3777, -9605, 7429, -15769, 3566, -3974, 3987, -10835, 3229, -5502, 4331, -5432, 2713, -7044, 3371, -8280, 4838, -8876, 5206, -12871, 4213, -10412, 2961, -5303, 3741, -5501, 6749, -10825, 6471, -10808, 5412, -7642, 5576, -11409, 6373, -13385, 6741, -15969, 7666, -14399, 6958, -10899, 7205, -9979, 6270, -8977, 7476, -14484, 3752, -5748, 4873, -9233, 5902, -9952, 5347, -13986, 5072, -8961, 6776, -10247, 6055, -10908, 4869, -10458, 5350, -10391, 4231, -10752, 5317, -11979, 5536, -12058, 4214, -9777, 5728, -12804, 6718, -14609, 6922, -12925, 5508, -7728, 5479, -12056, 5169, -7507, 5914, -8900, 6970, -12048, 6605, -13861, 7745, -12464, 5984, -11694, 4877, -6502, 4160, -6273, 7641, -9333, 5564, -9451, 6668, -15252, 7695, -14076, 7834, -13501, 6442, -15175, 6398, -10790, 4568, -10629, 6368, -7292, 6381, -8124, 5980, -8605, 5292, -7952, 5198, -10211, 6223, -8798, 6880, -14880, 7762, -13893, 5294, -12102, 3999, -8337, 4404, -9089, 4247, -8634, 5275, -8045, 8105, -9605, 8604, -15383, 9747, -14441, 7319, -13144, 8824, -13218, 7139, -12038, 5209, -6496, 5885, -7715, 6570, -14996, 6704, -12642, 7708, -12826, 8943, -15082, 6949, -13561, 7952, -10260, 7245, -13545, 7620, -9962, 4810, -6448, 6355, -10390, 9089, -10247, 8350, -13682, 11501, -14564, 10129, -13714, 12388, -15783, 10770, -13186, 12137, -12351, 9889, -10589, 8713, -15533, 8395, -11371, 7873, -9747, 9270, -11780, 9003, -12372, 9585, -14599, 12210, -16753, 10133, -13553, 9065, -12456, 6687, -7402, 4998, -9545, 5957, -9982, 7580, -12432, 7429, -12992, 9076, -14799, 8672, -12271, 9736, -14268, 9491, -12952, 9456, -14220, 8300, -12375, 7618, -12864, 7106, -10948, 6866, -9395, 8301, -12448, 9132, -12573, 9219, -13154, 8396, -13450, 8224, -10441, 7532, -11293, 5739, -9401, 4251, -6858, 9337, -8453, 11210, -10645, 12643, -11707, 13115, -12578, 13308, -12615, 11835, -11209, 11445, -10990, 11282, -11177, 11168, -10781, 10563, -10570, 10551, -10077, 9448, -9263, 8742, -8144, 7207, -6841, 9285, -8722, 10151, -9275, 10370, -9708, 10366, -9784, 9109, -8903, 7771, -7172, 11524, -10537, 13705, -12732, 12594, -11521, 12535, -11831, 12550, -11813, 12329, -11412, 12789, -12017, 12203, -11697, 9404, -9057, 7452, -7205, 8517, -8331, 10764, -10361, 10262, -9491, 8267, -7817, 8156, -7187, 9319, -8671, 8750, -7673, 10993, -10251, 11961, -11104, 9068, -8659, 11057, -10346, 13542, -12749, 12324, -11640, 12498, -11874, 12930, -11862, 11390, -10594, 11396, -10935, 10313, -9920, 10053, -9406, 7568, -7263, 7929, -7344, 10239, -9543, 7486, -6662, 9633, -9110, 6902, -6157, 8755, -7836, 7380, -6731, 9327, -8742, 10098, -9285, 9068, -8541, 10102, -8820, 11800, -10891, 11074, -10025, 10154, -9503, 9079, -8149, 9540, -9112, 11324, -10600, 9633, -8928, 10254, -9731, 9391, -9099, 9305, -8215, 8888, -7983, 7947, -7581, 9664, -9178, 9121, -8686, 10165, -9255, 7916, -7171, 9910, -9168, 11419, -10892, 9762, -9193, 8435, -7432, 8792, -8418, 9802, -9222, 6050, -5074, 4474, -3783, 10083, -9657, 10253, -9499, 7718, -7298, 7656, -6700, 10106, -10004, 10404, -9780, 7685, -6782, 8014, -8030, 10868, -9844, 9121, -8120, 10228, -9506, 9876, -9116, 10608, -9840, 11798, -11160, 11318, -10689, 6171, -5399, 8095, -7782, 9920, -9205, 7214, -6475, 6221, -5900, 8473, -7991, 8547, -8378, 7988, -7368, 6550, -6050, 7715, -7616, 7470, -6247, 7224, -7046, 9414, -9022, 10285, -9009, 7993, -7095, 9608, -9125, 11954, -10905, 11589, -10964, 11653, -11477, 11823, -11459, 7939, -7595, 9607, -9344, 8329, -7905, 5873, -5273, 7883, -7292, 8569, -7591, 4901, -4613, 5028, -4983, 6390, -6132, 8030, -7722, 7070, -6052, 6947, -6860, 10727, -10127, 8990, -8245, 8283, -7308, 9109, -8951, 9411, -9277, 8614, -7676, 5934, -5513, 5827, -5138, 7955, -7355, 9432, -8787, 8271, -7552, 8573, -8173, 8072, -7788, 8167, -7391, 4721, -4421, 5255, -5048, 6469, -6266, 7696, -7803, 7796, -7292, 8022, -7649, 6807, -6090, 8699, -7838, 6484, -5480, 7666, -7667, 4124, -3221, 4783, -4153, 5708, -5203, 4416, -4039, 8848, -8468, 6295, -5706, 7038, -6235, 6832, -6005, 8219, -7658, 10167, -9542, 9361, -8743, 4605, -4261, 2718, -2677, 5858, -5412, 6465, -5999, 9572, -8999, 7578, -6821, 8749, -8175, 4365, -3298, 5498, -5051, 3615, -2366, 2369, -1548, 6081, -5038, 7511, -6780, 9028, -8624, 7866, -7278, 7245, -6463, 5858, -5640, 6647, -6325, 8636, -7458, 8286, -7411, 6358, -5907, 5014, -4072, 8456, -7826, 9561, -9333, 9183, -8218, 7171, -6189, 7486, -7223, 7683, -6531, 7990, -7506, 5487, -4451, 2740, -2472, 7053, -5906, 9959, -8920, 7248, -6698, 6453, -5653, 7069, -6602, 7768, -7043, 8856, -7950, 8750, -7448, 9535, -8474, 8388, -7613, 6977, -5978, 8665, -8209, 9971, -9220, 8637, -8198, 7267, -6395, 9554, -8901, 7360, -6066, 8329, -7834, 8816, -7854, 9113, -8906, 9839, -8757, 9961, -8905, 5397, -5224, 4939, -4626, 5857, -5343, 7733, -7744, 11252, -10355, 10494, -9549, 10337, -9783, 10489, -9736, 8703, -7694, 9161, -8400, 7053, -6170, 6434, -6566, 7460, -6661, 9251, -8612, 7170, -6175, 7424, -6726, 10040, -8919, 10270, -9835, 10480, -9545, 8057, -7181, 7231, -6857, 7570, -7236, 5304, -4621, 8385, -8133, 11687, -10492, 11368, -10937, 11007, -10421, 11388, -10367, 9680, -9124, 8883, -8281, 9314, -8072, 9919, -9339, 9643, -8542, 9364, -8782, 9899, -8948, 10188, -9610, 9527, -8717, 9892, -9543, 6772, -6189, 6086, -5479, 10664, -9951, 10398, -10211, 8869, -7961, 9531, -9229, 11463, -10146, 10578, -10119, 11383, -11026, 8715, -8056, 9104, -8743, 11120, -10358, 10235, -9406, 10852, -10345, 10864, -10065, 10488, -10229, 10825, -9878, 11645, -10778, 11307, -10668, 9050, -8439, 7103, -6764, 8696, -7867, 10247, -10002, 11944, -12083, 11928, -11748, 11980, -12129, 12558, -12412, 11388, -11367, 11542, -11978, 7785, -7609, 8317, -8504, 11976, -11629, 12261, -12114, 11081, -11362, 10948, -10925, 11984, -12288, 12321, -12157, 12009, -12066, 11607, -11320, 11387, -11215, 10609, -10730, 9364, -9132, 10239, -10454, 10673, -11039, 10078, -10551, 10917, -11347, 11681, -11924, 11115, -11355, 11239, -11411, 11180, -11737, 12266, -12689, 11405, -11811, 10834, -11427, 10564, -11095, 10010, -10058, 9357, -9732, 9867, -10084, 9793, -10268, 10292, -10480, 10811, -11238, 10032, -10410, 9558, -9671, 12540, -12403, 12919, -12532, 11051, -10770, 11631, -11491, 12698, -12359, 10928, -10815, 10678, -10631, 12638, -12198, 11721, -11873, 10766, -10864, 11128, -11368, 11297, -11258, 9897, -9962, 10596, -10561, 11137, -11061, 11030, -10946, 10716, -10546, 12099, -12408, 11706, -11528, 11096, -10964, 12346, -12102, 12673, -12200, 11092, -10830, 10378, -10341, 11318, -11069, 10387, -10297, 11647, -11844, 11648, -11174, 10000, -9943, 9473, -9308, 9736, -9506, 10529, -10197, 9300, -9226, 10769, -10401, 11808, -11435, 11597, -11733, 11435, -10995, 12415, -12039, 12502, -12033, 12054, -11683, 12335, -12102, 11996, -11709, 11089, -10899, 9991, -9991, 8973, -8972, 9568, -9579, 11706, -11710, 11445, -11391, 9697, -9818, 8805, -8875, 9729, -9053, 9134, -8964, 9560, -9147, 10934, -10691, 12229, -11386, 11418, -11251, 9889, -9205, 10777, -10381, 11701, -11330, 11656, -11207, 9984, -9966, 9788, -9997, 9461, -9509, 7875, -7610, 6793, -6774, 8598, -8728, 11118, -10808, 9799, -9833, 7704, -7872, 8206, -8272, 8252, -7790, 8836, -8684, 8864, -8747, 10566, -10102, 10856, -10606, 10606, -10362, 9099, -8841, 9379, -8647, 10480, -10111, 10987, -10812, 9266, -9428, 8943, -8633, 8695, -8225, 8246, -8245, 8067, -8136, 9007, -9459, 11138, -10896, 9913, -9574, 7813, -7861, 7059, -7006, 7490, -7457, 7846, -7949, 8701, -8733, 10261, -9528, 9157, -9230, 8577, -8622, 8622, -8593, 8814, -9196, 10013, -10162, 11269, -11238, 9728, -9789, 9824, -9622, 9150, -8662, 8020, -7958, 8567, -8783, 10293, -10457, 8223, -8099, 8007, -8301, 7828, -8417, 7835, -7538, 7398, -7236, 8306, -8434, 9004, -9151, 8601, -8880, 7858, -8004, 7151, -7679, 8084, -8096, 8834, -9072, 9284, -9571, 8958, -9060, 9173, -9286, 10183, -10257, 7567, -7600, 6882, -6477, 7611, -7724, 9125, -8835, 7003, -7366, 7002, -7242, 6180, -6214, 7041, -7640, 6389, -6420, 7534, -7450, 8500, -8589, 8488, -8579, 5258, -5579, 5380, -5886, 5905, -6779, 7244, -7622, 8897, -9249, 9506, -9458, 9168, -9161, 8530, -8281, 7573, -7639, 6951, -6879, 6877, -7155, 8894, -9217, 8003, -8020, 5187, -5219, 3763, -3769, 6214, -6257, 6787, -6859, 7740, -7763, 8337, -8224, 8294, -7939, 4677, -4546, 5055, -5219, 5411, -5640, 4663, -4647, 6035, -6365, 9111, -9451, 8689, -8663, 8486, -8649, 8567, -8426, 8309, -8349, 7596, -7517, 8716, -8537, 9925, -9498, 8376, -8293, 6930, -6384, 7190, -7480, 7859, -7862, 8130, -7697, 7298, -7315, 8000, -7783, 6428, -6255, 6660, -6551, 5215, -5091, 2787, -2346, 4897, -4911, 8321, -8160, 8145, -8163, 7272, -7615, 8057, -8461, 8004, -8176, 9501, -9379, 9377, -9131, 10229, -9742, 9651, -9600, 8268, -7843, 8503, -8594, 7990, -7931, 8499, -8314, 8226, -8730, 7968, -7542, 7456, -7099, 8843, -8436, 9011, -8819, 6579, -6287, 7890, -7432, 8702, -8662, 7854, -7795, 8280, -8372, 8958, -8966, 9046, -9102, 10423, -10636, 10481, -10764, 10352, -10262, 10792, -10671, 9793, -9844, 10070, -9912, 8846, -8861, 9766, -9126, 9805, -9744, 9263, -9079, 8601, -8321, 9781, -9543, 9411, -9319, 7628, -7603, 7736, -7411, 8890, -8985, 8862, -8842, 9255, -8740, 9256, -9045, 9355, -9120, 10414, -10545, 11528, -11454, 9591, -9801, 10360, -10253, 10265, -10570, 11912, -11226, 9538, -9414, 9724, -9510, 10900, -10752, 10950, -10820, 11046, -10704, 10480, -10297, 9944, -9851, 8988, -8914, 8314, -8275, 9246, -9211, 11771, -11465, 11740, -11025, 8791, -8217, 9518, -8597, 10443, -9944, 11264, -10983, 10543, -9851, 10194, -9720, 11550, -11196, 12851, -12517, 11309, -10729, 10507, -10157, 11815, -11537, 11206, -10929, 10973, -10412, 10748, -10406, 10495, -10008, 10309, -9769, 10510, -10120, 11257, -10790, 10281, -10294, 11451, -11181, 8725, -8530, 8965, -8779, 9615, -9281, 9581, -9122, 9128, -8706, 8787, -8619, 9447, -9109, 10551, -10193, 10423, -10161, 10437, -10106, 10500, -10115, 9885, -9701, 10596, -10228, 10707, -10397, 9982, -9574, 9608, -9278, 10058, -9565, 10201, -9795, 1858, -410, -8102, -4622, 1778, 5362, -7595, -6393, 2687, 7167, -8969, -7761, 2848, 7752, -10341, -8904, 2480, 7683, -9652, -8610, 3395, 7326, -8569, -7619, 2716, 7012, -7522, -6387, 2674, 7313, -8116, -6095, 4416, 8326, -7995, -5849, 501, 7791, -7972, -5650, 608, 4648, -7370, -4840, -169, 7624, -4492, -2132, 5421, 10528, -4119, -2536, 3164, 12233, -2587, -597, 600, 5922, -5474, -4102, 3498, 8803, -7207, -6031, 4433, 7877, -8536, -6698, 814, 6678, -4541, -3579, -1271, 6324, -4811, -3186, 401, 8444, -8015, -4552, 2618, 274, -7220, -2895, -450, -1481, -4002, -2164, 3118, 1490, -2071, 780, 2980, 393, -3148, 288, 3749, 746, -2368, 751, 3486, -74, -1943, 780, 2180, -64, -4684, -2319, 1681, -822, -5245, -2096, 15893, 6916, -6102, -3165, 2852, 11589, -9791, -7619, 2057, 9768, -9341, -7320, -8488, 4866, -6691, -3815, -4052, 284, -5644, -3290, 5925, -9185, -5141, -2028, 1701, 4304, -6286, -4467, -1341, -3221, -5818, -4127, -3556, -239, -6333, -4106, -5866, -1451, -3640, -1594, -906, 671, -6164, -3603, -1571, -3514, -9285, -3823, 2287, 2757, -6329, -2332, -3914, 2504, -2809, -1143, -987, 3448, -159, 2011, -1891, 1785, -1151, 1771, 894, 1725, -2953, 163, 90, 2787, -1418, 1249, 578, 2444, -2752, -195, 4387, 2237, -1549, 1886, 11529, -4803, -4899, -910, -146, -7288, -5574, -3284, -2486, -6748, -4779, -2029, 5037, -4750, -6917, -3420, -8662, -6719, -4433, -1231, 2131, -3943, -5438, -2730, 1902, -1763, -1188, 942, -5729, -2021, -4355, -2309, -7967, -5394, -3429, -907, -6330, -3456, -4025, -1388, -4663, -5365, -8671, -6013, -9604, -9251, -11630, -6497, -2896, 4631, -8120, -4848, 2076, 5398, -7508, -6967, -1933, 8866, -5452, -4528, -1206, 6001, -6115, -4798, -3567, 10898, -4886, -2793, -1163, 5014, -2802, -290, 2429, 2773, -2093, -525, 11892, 3262, -5061, -1746, -364, -50, -7965, -4635, -5868, -5377, -4890, -2491, -1270, -7098, -5190, -1599, 9181, 6089, -4036, -3033, -1581, -311, -6190, -4293, 5612, 4416, -7384, -6268, -4949, 1981, -8771, -6483, -8296, 174, -5593, -4291, 8626, 1674, -3218, -1904, -8412, 1695, -7270, -5389, 8880, -9085, -9509, -8197, -8566, -2625, -9320, -6028, -474, 1025, -2941, 684, 6675, -2833, -2195, -1959, 1101, -6659, -2114, -1384, 9619, 746, 1709, 2482, -10030, -1745, 1522, 3467, -3605, -2754, -1928, 633, 3801, 373, -1534, -360, 12969, -5631, -2668, 834, 4633, -1943, -2148, 1165, -3637, 1147, -2857, -478, 746, -4672, -5212, -2465, -9892, -4396, 1259, 2590, -3043, -12462, -1040, -22, 4120, -5357, -4106, -2954, -3, -1395, -6231, -4183, -6366, -1314, -2527, -1290, 4401, -9030, -2498, -1207, -1129, -8051, -4048, -2945, -10107, 105, -4529, -3683, -5905, 1431, -8245, -5428, 4104, -5601, -2110, 1744, 1047, -3641, 1382, 2443, 4453, 1836, -2340, -614, -3454, 3307, -1420, 175, -3780, -9704, -306, 1756, -11268, -3726, -1312, 554, 3812, 530, -1298, -41, 5837, 5958, -2219, 566, 1743, 7723, -2059, -96, 3486, 4965, -2791, -531, 11127, 11055, -1587, 362, -4872, 7078, 2043, 3218, 2452, 3533, 544, 1570, 578, 3538, -216, 1113, 7267, -3166, -118, 2012, -8127, 136, -1448, -428, 367, 1415, -3051, -2988, 4745, 1835, -5504, -4777, 5713, -2201, -6866, -6097, -2582, 360, -9950, -7315, 864, -1403, -4676, -884, 5636, 1282, 1263, 1801, 5785, -118, -873, 1620, 6517, -13265, 1107, 2683, 1646, 1793, -483, 1455, -8474, 4937, 647, 1625, 9231, 7809, 113, 1741, -6340, -3294, -132, 1739, -3646, -5106, -1532, 131, -526, -5381, -4113, -2725, 7083, -6838, -2561, -880, -4990, 3100, 3146, 3828, 2616, -540, 622, 1315, -5108, 2308, 809, 1899, 3011, -607, 713, 2030, -6970, -4425, 806, 1849, 1576, 469, -4996, -4910, 1859, 7354, -6102, -4904, 8189, 12044, -2567, -2116, -1564, 13753, -5662, -2855, 1808, 3060, -1082, 3778, 294, -2322, 3434, 4714, 451, -6521, -973, 1313, 4370, -5309, -1179, 109, 4674, -13129, -2178, -466, 4948, -1819, -1649, -1073, 11024, -9336, 1896, 3843, -5254, -855, 4201, 5275, -5, 4512, 1888, 2824, -7863, -715, -998, 887, -2275, -2837, 1697, 2815, -5720, -2145, 5059, 6211, -3089, 12859, 6416, 6596, 3789, -2867, 2451, 4786, 2366, 706, 3066, 5118, 2563, -2785, 454, 2464, 6033, 9151, -794, -400, 5212, -3488, -5713, -4498, -361, -4861, -1163, 41, -4353, -14290, -1174, 2148, -6444, -3188, -3059, 1303, 4927, 8484, 3482, 3452, -10183, 4427, 1334, 2323, 8917, 5052, 935, 1847, -2764, 2383, -1591, 15, -2135, -10782, -2414, -1080, 2389, -6202, -297, 1707, 8871, -4235, 6494, 7959, -10707, 6669, 8196, 9107, 1286, -234, 3357, 5157, -8236, -592, 6975, 7574, 2730, -8865, 2139, 2869, -377, -10462, 4065, 5477, 3670, -5297, 4083, 5798, 8112, -9692, 8683, 10033, -1187, -8517, 1509, 2966, 1666, -17731, 52, 1758, 1289, -6229, 3281, 4149, -703, -6060, 4246, 5134, -6180, -3952, 2092, 5814, -5212, -2742, -846, 2616, 5289, -13104, 353, 1177, -222, -5445, 452, 1143, -254, -11291, 3097, 4137, -5772, -10473, 3458, 5729, -7569, 4109, 3385, 4427, 13568, -669, 3160, 4727, -10604, -1686, 5288, 6758, 3473, -10571, 6399, 7573, -2950, -4489, 1159, 3158, 2639, -13567, 948, 2082, 1217, -2234, 782, 1931, 4046, -1923, -237, 1083, 116, 2894, 3877, 4747, -1045, -4821, 2902, 3556, 280, 3538, 2065, 3220, 3169, -8556, 8013, 9258, -3777, -9916, 10210, 11565, -2144, -5707, 6603, 7493, 2258, -6507, -1550, 2158, -3505, -1233, 55, 3741, 9797, 8944, 4898, 5210, 3531, 1857, 6397, 6753, -7833, 7696, 7368, 7398, 4405, -6927, 4529, 5373, -4740, -7490, 7480, 7651, -5955, -3047, 6414, 6948, -4335, -7453, 6237, 7082, 9932, -9185, 8642, 8866, -1920, -4558, 3469, 4630, -5014, 7682, 1152, 2497, 3112, -127, 2397, 4471, -843, -8738, 1414, 3470, 3740, -4950, 1504, 2480, 1081, -5143, 6252, 6876, 5209, -3109, 5652, 7281, -3762, -9052, 6015, 6584, 1191, -4909, 3951, 4746, -26, -5034, 2861, 3135, -2813, 2083, -4522, -2123, 4463, -4066, 1664, 5863, 1557, -9804, 6931, 8786, 4955, 4925, 7375, 7954, 1489, -5336, 5788, 7397, -1534, -5503, 2611, 4169, 900, -4090, 6580, 6707, 10013, 517, 7155, 7469, 1167, -4909, 3351, 3850, 3856, 4142, 3209, 2734, 8869, 5370, 1285, 2287, 8997, -1274, 5001, 6152, -6546, -8811, 6407, 8448, -8159, -1439, 6655, 7998, -5806, -728, 6753, 7377, -812, -7750, 6426, 7266, 4490, -10159, 6520, 7880, -10320, 1715, 5721, 6332, 3296, 1871, 4727, 5415, 1927, 3383, 6401, 7099, -22, 5535, 1189, 4648, 923, -5865, 1748, 5749, -8766, -4641, 5521, 6447, 4916, -8662, 8417, 9954, 1570, -8126, 7255, 9039, -9239, 543, 1980, 3668, -3440, 138, 3343, 4081, 10161, 2414, 2177, 2626, 3606, 4161, 3447, 3524, 3992, -3892, 1609, 2172, -3259, -9512, 4535, 5864, -7487, -11018, 6546, 7384, 3739, -7746, 3247, 5208, 1470, -11251, 5479, 6164, 1415, -11048, 6058, 6544, 5378, -5955, 6449, 7516, 7722, -990, 5665, 6621, -6695, 58, 7609, 7976, 5277, -1509, 6681, 7114, 1463, 634, 7859, 7682, -912, -3175, 5053, 9203, -3157, -2498, -1296, 1901, -4462, -1481, 3607, 4090, -3005, -2833, 3664, 4793, 1360, -4163, 6815, 8224, 1064, -8502, 2939, 4759, 4771, 3279, 5917, 6988, 5544, -8178, 3351, 4609, -722, -3949, 6930, 7698, -66, -5288, 5120, 6668, -2355, -7456, 2198, 4642, -6814, -8989, 1090, 1934, 6875, -7574, -43, 1395, -8151, -3145, 5528, 6219, 2123, -3592, 5441, 6667, -365, -3175, 2264, 3850, 439, -6232, 5038, 5665, -609, -9222, 5247, 5659, 254, -7704, 4740, 4815, -1250, -11316, 6448, 6178, -2969, -4925, -84, 3640, -5835, -1665, -4726, -422, -4761, -3476, -601, 2004, -5197, -3764, -2319, 489, -3923, -5231, 266, 3169, -502, -1808, -1616, 1029, -1654, -6383, 2093, 5109, -1726, -6294, 2982, 5831, 6829, -846, 4158, 7651, -1016, -7198, 135, 3590, -5978, -2807, -3804, -323, -4842, -4529, -4001, -1268, -5692, -4759, -1451, 1488, -8804, -3968, -91, 2718, -3706, -4241, -514, 2247, -2561, -5425, -1708, 1429, 4127, -1212, -883, 2305, 8375, -3884, -1843, 636, 3523, -3719, -2489, -446, -3874, -6022, -3113, -1307, -2525, -5868, -2146, 1953, 2049, -986, -9435, -5636, -139, -1220, -8784, -7730, 1567, 650, -8650, -7625, 1368, 1868, -8612, -8134, 1654, 3214, -8417, -7908, 1354, 3225, -7925, -6950, 306, 748, -9202, -7168, -670, -24, -9232, -6430, 2776, 1392, -10847, -6894, 45, 772, -10792, -7939, 1342, 2517, -11649, -8759, 811, 358, -10521, -7167, 5144, 4452, -9037, -5976, -1280, 5142, -9318, -6267, 744, 4029, -8983, -6882, -1041, 3950, -9459, -7725, 1697, 2429, -9936, -7473, 492, 1584, -8690, -6608, -503, 1624, -7452, -5686, -197, 1901, -8211, -4493, 1304, 1728, -10939, -4517, 2412, 3591, -8370, -6518, 5460, 6215, -7606, -5084, 2880, 7627, -7015, -4022, 3144, 7966, -7379, -3390, 1266, 6455, -7657, -3097, 664, 6616, -8642, -4405, 3011, 5729, -9446, -5300, 9101, 7021, -12453, -7892, 834, 6684, -10789, -8778, -438, 6768, -12616, -10685, -2844, 4275, -10235, -6715, 3283, 1865, -11303, -6671, 2236, 96, -9281, -5415, -253, 6693, -7782, -4973, -1979, 2083, -10244, -7801, -508, 4702, -9277, -6616, -1434, 3512, -9732, -7201, -207, 1794, -7643, -5734, -1299, 563, -10058, -4388, -376, 507, -11472, -5318, 1437, 1335, -9107, -6859, 2066, -34, -8441, -4931, 1467, -607, -7536, -3307, 1759, -996, -8025, -2783, 454, -2371, -7665, -2013, 2914, 573, -8520, -3676, 4297, 853, -9847, -5676, 3730, -1438, -12168, -7251, 1348, -739, -11920, -9249, -1730, -134, -11237, -9190, 2642, 210, -10529, -7574, -1524, 38, -10903, -6977, 6607, -4076, -6704, -2721, 1940, -2250, -9465, -5904, 3397, -2169, -7182, -4829, -4652, -3427, -9278, -6673, 2740, -1744, -7547, -4498, -3329, -2698, -6717, -4430, -3243, -1650, -9287, -4039, -62, 3706, -11207, -5245, -218, 2545, -8969, -7540, -2127, 2853, -8011, -5610, 108, 6103, -6546, -3866, -1846, 6475, -6276, -1987, 1218, 2419, -4615, 582, 2502, 1188, -4857, -1063, 4032, 4785, -7498, -4039, 390, 3195, -9838, -5869, -437, 391, -9107, -6493, -1769, -1786, -8383, -5996, 6693, 4342, -8491, -7013, -6478, -1448, -7983, -6031, 3389, -2227, -6605, -3502, -483, -5568, -8193, -5019, -910, -3007, -7479, -5497, 3348, -5, -5760, -4936, -3619, -2166, -5854, -4414, -944, -4529, -5869, -3790, -3862, -1754, -8745, -3959, 3485, 4831, -10100, -4293, -3752, 3877, -5642, -4970, -741, -35, -5237, -3173, 6994, 2969, -3437, -658, -6386, -420, -4829, -1887, -472, -587, -2474, 2215, 2203, 174, -1945, 1799, 5094, -3274, -6571, -2372, 2305, -1020, -7734, -4145, -3221, 69, -7126, -4200, 2518, 365, -6414, -3949, 3395, 255, -6853, -3960, -7158, -3856, -5277, -3765, 1492, -1160, -5596, -3090, 590, 1769, -6955, -4541, -3584, -58, -6399, -3681, 5139, -5613, -3836, -2277, -1349, -3031, -5656, -4149, -644, 367, -5239, -4772, -3375, 114, -7502, -4146, 4419, -3806, -9838, -3233, -1967, -3230, -5453, -3530, 2353, 2179, -5419, -3436, 4165, 3491, -5640, -2676, -5423, -2573, -5411, -2446, -1228, -837, -4248, -132, 3869, 540, -3794, -704, -99, 380, -5676, -2040, 5312, 2831, -5670, -3026, -1822, 1839, -7269, -5244, 6304, 2497, -6993, -5021, -3788, -274, -6731, -4239, -3293, -644, -2662, -684, 1506, -919, -6037, -4680, 3944, -1787, -7009, -4099, -3406, -547, -6570, -4575, -1735, 710, -4403, -3494, 364, 2824, -7116, -5312, -1297, 2434, -9583, -7514, -3909, 1987, -10719, -6552, 3659, 812, -7825, -2050, 3307, 217, -3289, -1709, 5354, -533, -5505, -3039, 123, -3478, -7192, -4055, -2869, -2014, -5535, -3508, 33, 526, -4427, -1892, 8285, 4253, -3555, -1799, -6344, 1880, -5009, -2543, 4138, -2750, -6745, -4056, -2662, -1673, -7934, -6266, 3811, -714, -8016, -6471, -577, -1848, -6293, -4431, -1407, -984, -4875, -3739, 411, -441, -5560, -4640, 2900, -1412, -6865, -3778, -1303, -901, -6340, -3513, 32, 1435, -5893, -5331, 3833, 4352, -8276, -7365, 2831, 6310, -10287, -10337, -6493, 8306, -11680, -9110, 3899, -109, -8010, -1823, 1050, -858, -4668, -3455, 913, -3685, -6791, -4647, 185, -1802, -7409, -5550, -1182, -4089, -6168, -5122, -353, -1536, -4632, -4049, 6625, -5799, -5368, -3545, -3925, -2440, -6224, -4679, -1336, 2604, -5484, -3477, -1239, -732, -7316, -4978, 241, 179, -6130, -4654, 3503, -195, -4636, -3428, -4455, 4727, -6217, -5558, 1786, -1279, -6010, -4780, 3296, 5875, -5710, -2991, -2131, 4209, -5884, -4299, 5823, 9027, -5324, -6427, -3342, 1773, -7789, -7456, 4011, -2870, -7588, -7389, -4405, -3626, -10069, -8121, -1832, -3293, -8843, -2976, 5443, 2581, -5468, -4691, -4084, 3082, -6418, -5033, 5145, 4882, -7487, -6399, -3715, 2444, -6852, -6553, 83, -3351, -5443, -4954, 329, -3288, -3826, -3070, 10752, 1198, -3722, -2216, -9105, 1364, -4646, -2877, 2638, -1044, -5396, -3045, -4261, -948, -5196, -3577, 271, -3719, -6031, -4819, -1286, -5769, -6100, -4239, 2014, -3725, -4394, -3106, 6547, -4316, -4749, -2349, -7866, -4704, -4374, -2157, 5664, -5277, -4773, -5034, -1839, 5557, -3544, -3449, -3520, 331, -6299, -5948, -2225, -911, -7699, -4088, -3787, -935, -7998, -2775, 5638, -7800, -5638, -4773, -3231, -5780, -6370, -5709, 5576, -4886, -7899, -7426, -4402, -2633, -6350, -5282, 2396, 2752, -2565, -2829, 6866, -559, -2985, -3514, -1532, -5186, -3623, -2728, -3585, -6148, -3689, -1961, 565, -6263, -5154, -2768, -4148, -6968, -4605, -2704, 13, -1073, -4875, -2736, 8632, 2840, -2112, -1099, -207, 1340, -2446, -1846, 3285, -4286, -969, -67, -2436, -3078, -2426, -534, 8580, -4755, -1881, -1051, -1260, -6845, -4033, -3727, -7980, -4834, -4164, -3697, -3957, -2683, -7896, -2659, 3808, 6604, -4527, -263, 35, 8161, -1777, -2377, 6234, 1502, -2547, -4065, -4680, 2224, -3365, -4791, 271, -5827, -4535, -4072, 763, -4331, -3373, -4282, 3585, -3113, -1746, -2685, -2190, -5466, -1972, -2766, 3087, -4520, -3156, -2918, -5951, -2701, -3223, -2432, 4600, 3062, -2444, -1308, -2005, 3559, -3971, -2334, 6367, -1754, -3613, -1641, -101, -4027, -1570, -869, 4877, 1085, -214, -442, -5473, 538, -2254, -1601, 2075, -4774, -2473, -1273, -2190, -8929, -1930, -1425, -190, -4434, -1687, -1750, -2267, 655, -6576, -2864, 10687, 1691, -5468, -639, -4580, -3162, -4300, -3586, 6095, 5073, -1639, -2898, -9120, -892, -2352, -4122, -622, -2340, -4674, -3199, 1916, -2543, -2356, -3137, 2325, -1452, -2256, -3450, -442, -3042, -2343, -3744, 2903, -529, -2407, -4320, -1455, 2172, -3722, -4752, 7718, -630, -3785, -2817, -4088, -3107, -4335, -2090, -1015, -1877, -3412, -1355, -1430, -1217, -2803, -2316, 4628, -6910, -1155, -928, -1461, -6631, -2798, -1551, -414, -2417, -561, 523, 1098, -1630, -278, -135, 1510, -998, -1503, -1814, -2353, 3609, -5676, -1829, 7591, -7211, -5419, -66, -4167, -7589, -1983, -1373, 5615, -5287, -651, -443, -6839, -3739, 675, 457, -504, 31, -2257, -649, 788, -1902, 466, 14, 1489, -1930, 75, -2570, 3289, -817, -354, -3419, 1992, -2318, -1605, -4259, 1231, -2846, -4317, -3707, 1367, -3940, -3823, -2273, -3247, -6903, -1712, -311, 1093, -5032, -1878, -2324, -130, -3165, -635, -1140, 2331, -2484, -633, -529, 551, -3642, -1881, -2233, 417, -2725, -1561, -2388, 3741, -299, -974, -2362, -492, 4250, -1262, -2411, -2905, 353, -6914, -1975, 2386, -1698, -5238, -2106, -1184, -1789, -696, -3183, 5725, -4627, 2308, 455, 411, -4104, 2361, 922, -181, -3051, 255, -709, 3183, 1035, 2703, 378, -2627, -586, 2249, -650, 6008, 6016, 4174, 3341, -7734, 4204, 1768, 1585, 1064, -4507, -2482, -151, -3242, -6415, -3225, -1641, 855, -5076, -1394, -781, 6001, -1226, 2227, 1604, -2461, -2622, 1777, 1439, 195, -3011, -792, -478, 4006, -1987, -373, -1064, 26, -3515, -907, -2796, 6094, -4031, -418, -2665, -2721, -6149, -2628, -4022, -6020, -2882, -6951, -2362, -987, -45, -5718, -2494, 1451, -1204, -1937, -4088, 937, -1524, 245, -1807, 2300, -3341, 87, -1737, 198, -2571, -157, -1587, 3799, -1445, 1569, 27, -3457, -2869, 1892, 483, 7678, -3701, 2726, 3776, -8223, -5420, 1370, 3525, -2356, 333, -2766, -363, 2600, -147, -3084, -2136, -1763, -382, -3563, -2699, 2526, -3023, -23, 1373, -657, -4376, 42, 1595, 1846, -1877, -1793, 346, 2799, -2633, -1049, 107, 3183, -1187, -1654, -1760, -2034, -743, -3079, -4199, -1161, 121, -3980, -4700, -3151, 2298, -8207, -5020, -10, 3759, -4608, -3677, 2134, 5861, -4335, -5565, 1028, 7830, -3029, -5557, -44, 7326, -3552, -5911, 732, 7412, -5045, -5270, -382, 7954, -6079, -4220, 85, 6724, -6892, -4164, 760, 5275, -7037, -4193, 2933, 6108, -6135, -5000, 1173, 6584, -5462, -5866, 453, 7006, -5103, -5597, 2893, 5909, -5995, -6022, 3004, 7067, -6447, -5384, 787, 7239, -6447, -5881, -1867, 8390, -5800, -5369, 75, 7073, -6394, -5344, -1044, 7204, -7081, -5563, -357, 4745, -7641, -6304, 3090, 4640, -8316, -6670, -64, 3654, -7615, -5438, -1851, 1767, -5757, -4486, 6296, 3945, -3597, -5340, 3334, 4852, -2968, -6162, -1043, 4232, -4127, -6420, 1373, 3297, -6991, -5334, -3157, 3885, -7575, -4020, -3300, 3216, -7143, -3695, 2416, 5319, -7734, -4270, 5824, 6929, -8319, -7002, 1604, 7363, -7554, -8663, -425, 6687, -6637, -7166, 5253, 5578, -6455, -6170, 4601, 4738, -6845, -5427, 2271, 5646, -6678, -5236, -3320, 7168, -6552, -5523, 225, 5323, -7351, -5999, -2150, 5953, -8317, -7053, -2347, 7610, -7145, -6934, 4575, 6502, -8156, -6494, -382, 1798, -9853, -5413, -2667, 185, -6083, -3266, 6677, 671, -2786, -3489, 2496, -82, -1897, -4060, -2305, -312, -3881, -4047, 94, -3112, -6789, -2842, -6195, -4387, -6043, -1656, -4527, -3298, -5541, -2090, 1910, -93, -8392, -4763, 2880, 345, -8500, -6439, 1392, 1103, -6982, -7465, -2189, 2263, -5685, -5432, 5724, 3334, -5615, -5057, 3624, 966, -5748, -4048, 2571, 1330, -6184, -4260, -2085, -29, -7237, -5432, 1958, -84, -6780, -5962, -2357, -177, -7591, -7379, -1386, 367, -6957, -7373, 743, 465, -7930, -5907, -1889, 230, -9814, -4485, 1396, 4598, -6465, -3269, 2928, 6111, -3345, -3852, 767, 5020, -866, -3728, -1462, 7667, -3043, -4387, -1885, 7401, -6219, -3898, -5717, 3378, -4874, -2616, -7693, 2469, -4567, -2797, 3494, 4136, -8673, -5515, -87, 5767, -7410, -6263, 342, 2800, -5055, -5733, -343, 2452, -5180, -4679, 4065, 7063, -5258, -5060, -2344, 4917, -5519, -5001, 342, -1695, -5967, -4402, -426, -4011, -6961, -4953, 1798, -2862, -6668, -5565, 609, -969, -7319, -6674, -4484, -703, -7112, -7039, 866, -3058, -7515, -5155, -579, -1834, -10305, -4706, 6395, 3004, -8471, -5001, -2035, 4440, -5920, -5999, 1119, 4157, -2391, -4768, 3105, 5132, -5780, -7126, -5368, 1281, -8027, -6571, -5769, -69, -4227, -3993, -6589, -139, -3162, -2884, 3290, 811, -7971, -5264, -550, 1517, -7276, -5706, -2339, 1435, -4362, -4314, 4385, 1706, -5903, -4168, 3259, 367, -6758, -5671, -4838, -48, -5503, -4948, -1457, 1268, -3888, -4897, 1725, 4657, -4636, -5567, -4983, 1878, -4821, -5113, 1660, -3247, -6028, -5650, -1975, -103, -6356, -5919, -309, 1398, -6864, -5005, -231, 668, -9375, -4904, 6483, -4236, -8706, -4328, -2081, -1643, -7211, -5465, 4137, 2553, -4059, -5404, 1247, 2206, -7152, -7798, -7016, -1953, -8302, -7088, -3833, -3717, -4139, -3913, -93, -1017, -3699, -3859, -50, -1137, -6927, -5273, 2117, 172, -6464, -5654, -3517, 1657, -4909, -4421, 5091, 936, -7339, -5244, -417, -2471, -7004, -5436, -4738, -5426, -4088, -4008, 3778, -1286, -3308, -3979, 5915, 1129, -4507, -5314, -5560, 3247, -4184, -5027, -3088, 2837, -2568, -3283, 1717, 4851, -3766, -3957, -2660, 6102, -6461, -4960, -1598, 4938, -8938, -5221, 6713, -1824, -7005, -2593, -259, -1719, -6893, -3495, 5830, -225, -6860, -5702, -735, -853, -8909, -7802, -7044, -1553, -7478, -6418, 1217, 710, -3745, -4295, 7344, 5832, -5422, -6325, -4428, 3891, -6806, -7186, -765, -2135, -5743, -6017, -3512, -1487, -5157, -4874, 4822, -487, -6832, -5965, -2165, -1655, -6804, -5444, -4412, -82, -3454, -3957, 5153, -152, -5105, -3847, 4206, -364, -5319, -5063, -3854, -1536, -5601, -5385, -377, 1198, -5314, -5155, 1380, 2832, -6723, -5664, 626, 6732, -9658, -7547, -5608, 7175, -9715, -7421, 7097, -95, -6851, -2848, -576, 633, -7494, -4579, 2594, -679, -7289, -5485, -1429, -3730, -7466, -5605, -4503, -1327, -5366, -4503, 4443, 2031, -3163, -4226, 7451, -761, -6067, -6861, -420, 492, -7991, -7725, -4031, 5804, -5767, -4988, -2277, -603, -5861, -4627, 2322, -18, -5702, -4883, -49, -153, -5727, -4948, -3686, 2454, -5377, -5578, 4215, 3444, -6056, -4678, 5879, 8811, -5887, -4438, -5872, 8223, -6464, -5086, 3107, 6919, -7040, -6703, -3576, 9606, -7106, -6964, -938, 2141, -10143, -8034, -2926, 1606, -11184, -7703, 6529, -3769, -7637, -3731, 3733, -654, -8003, -6112, -1735, 837, -7113, -6052, 2057, 2312, -6974, -6342, -4628, 1842, -4943, -5163, 3558, 336, -4001, -5292, 4854, -1463, -4590, -5413, 8897, 267, -7870, -7312, -3922, -616, -9442, -7509, -9145, -389, -6065, -5131, -180, -3429, -5873, -5335, 811, -3541, -5902, -4772, 76, -1667, -5776, -5737, 4013, -1203, -6704, -5820, 6496, -1766, -7568, -6006, -6547, -200, -7891, -6966, 7784, 4011, -7308, -7885, -2013, 7525, -8394, -9111, -10109, 6613, -8477, -6919, -3426, 1959, -10427, -6516, 4756, -222, -7841, -4384, 1877, -4937, -8314, -7297, -2210, -4663, -6258, -6703, 4168, -2717, -6773, -7287, -1481, -898, -6197, -7100, 1759, 473, -4888, -6435, 2836, -386, -5822, -6377, 5601, -5171, -7621, -7346, -2436, -6477, -8024, -6796, -8172, -3922, -5164, -4901, 271, -3260, -3980, -3299, 2571, 1090, -5799, -3215, 5581, 3945, -4710, -4726, 285, 3882, -5132, -4887, 3602, -3203, -5365, -5004, -4442, -7013, -6863, -5902, 9854, -5015, -6656, -7121, -707, -4424, -8303, -9272, -11162, -4862, -9318, -7365, -3165, -443, -10448, -5868, 5024, 5349, -7834, -4087, -2863, 6510, -6484, -5088, 1016, 1740, -5209, -5584, 170, -400, -5750, -5882, -1001, -3962, -5699, -6155, 831, -4290, -4552, -6346, 2171, -3020, -4609, -6600, 2750, -5239, -4614, -6188, 131, -4864, -5064, -6130, -4758, -2220, -4439, -5896, 5032, 6321, -2928, -4244, -672, 4899, -5518, -4169, 5638, -2729, -5691, -4678, -845, -1637, -4927, -4560, 3396, 1673, -4322, -5441, -7482, 1252, -5047, -5295, 2931, -4474, -5073, -5445, -1576, -8205, -5052, -5097, -3046, -2777, -6621, -5228, -1425, 1539, -9426, -5602, 7985, 1360, -8758, -5556, -3655, 2526, -8353, -6424, 1787, 6292, -5483, -6099, -6024, 5828, -4963, -5279, -3424, 1595, -3880, -4251, -318, -602, -2472, -5005, 1714, 467, -3679, -6608, 1276, -153, -3638, -6913, 1171, 723, -2316, -6235, 1505, 2778, -2627, -5875, 5803, 587, -4132, -5997, -3736, 1422, -6346, -5939, -1004, -3406, -4592, -4073, -132, -7985, -3520, -3267, 2529, -7833, -3814, -5135, -5833, -5572, -5445, -5738, -61, -2304, -3305, -4913, -2285, -2320, -2389, -4015, 3590, 2608, -4726, -4772, -1581, 3396, -8172, -5296, 7870, -7195, -8551, -5042, 179, -6100, -8647, -6217, 2916, -1532, -7319, -7614, -7525, -395, -6167, -6182, -4494, -30, -2881, -4264, -2575, 334, -869, -5740, 2448, -2881, -3319, -6735, 3035, 1421, -4316, -7344, -580, -1806, -4080, -5559, 1670, -2162, -5336, -6113, 2775, -5695, -5064, -5597, -4073, -7657, -5420, -4898, 188, -122, -3289, -4214, -946, 37, -2748, -4011, 469, -2888, -3858, -5305, -3476, -3621, -4563, -6607, 2763, -2889, -3025, -6121, 2482, -7, -1461, -5763, 3254, 4901, -4657, -5672, -4718, 4221, -8253, -5244, 3940, -2787, -7125, -4026, 4729, -5306, -6413, -3732, 4534, -7696, -6483, -4609, -4605, -7774, -5658, -4045, 507, -4045, -3116, -4241, -1497, -2504, -1743, -5922, 3591, -2322, -3699, -5874, 5137, 3466, -5277, -5605, -6854, 4105, -4146, -3138, -1294, -3881, -5156, -3638, -3945, -7280, -4618, -3608, 3057, -6426, -4237, -2959, 3569, -3354, -3934, -4327, -3646, -1936, -3128, -4942, -1674, -2905, -3201, -5484, -886, -4443, -4138, -6631, 3369, -6089, -3496, -6163, 5118, -5041, -3319, -5961, 1610, -4172, -6570, -6185, -4940, -1424, -8309, -5038, 1093, -439, -4906, -3203, 3196, -1274, -4241, -2765, 2498, -4194, -4336, -2720, -818, -4731, -4447, -3369, 1972, -3068, -3599, -4096, 1256, -2514, -3300, -5101, 4419, -3143, -4465, -4363, 2691, -5729, -6339, -3835, -4918, -6658, -6896, -3229, -6387, -4653, -5101, -2310, -1364, -2883, -4055, -2719, 1090, -3543, -4170, -2876, 2925, -6165, -4025, -3409, -4946, -5319, -3814, -3736, -238, -2100, -4065, -4531, 1118, -1671, -4268, -5364, 3450, -2641, -4195, -5116, 1886, -3904, -4322, -4397, 1064, -2201, -6064, -3806, -1658, 926, -6974, -3600}; +#endif + +// Comparator function for sorting floats. +int compare_floats(const void *a, const void *b) { + const float *da = (const float *) a; + const float *db = (const float *) b; + + return (*da > *db) - (*da < *db); +} + +// Function for computing the deviation from the expected floating point +// result and returning the largest such deviation found. + +float compute_error(const Q15_T* const pred, const float* const label, + float* const errors, SCALE_T scl) { + float agg_diff = 0.0; + + for (unsigned i = 0; i < OUTPUT_SIZE; i++) { + float f_pred = ((float)pred[i]) / pow(2, scl); + float single_diff = fabs(f_pred - label[i]); + agg_diff = single_diff > agg_diff ? single_diff : agg_diff; + errors[i] = single_diff; + } + + return agg_diff; +} + +// Function for computing the 95th percentile deviation among all the outputs. +float aggregate_error(float* errors, unsigned len) { + qsort(errors, len, sizeof(float), compare_floats); + unsigned index = (unsigned) round(fmax((0.95 * len - 1), 0)); + return errors[index]; +} + +/** + * By default, all tests run without using bit-shifting operations. + */ +int main(int argc, char **argv) { + unsigned patches; + SCALE_T XScale = -1, YScale = 12; + FILE *xFile, *yFile, *floatResFile, *outputLog; + + if (argc != 6) { + printf("Improper Number of Arguments Provided!\n"); + fprintf(stderr, "Usage: %s \n\n", argv[0]); + fprintf(stderr, " : Number of images in the input file. The entire model is run individually on each image.\n"); + fprintf(stderr, " : File containing the images in a numpy array of dimension (num_images, input_channels * input_width * input_height).\n"); + fprintf(stderr, " : File to write the generated output in a numpy array of dimension (num_images, confidence + location box outputs).\n"); + fprintf(stderr, " : File containing the expected output in a numpy array of dimension (num_images, confidence + location box outputs).\n"); + fprintf(stderr, " : File to write the error metrics and the results from the runtime analysis of the model.\n"); + return -1; + } else { + patches = atoi(argv[1]); + xFile = fopen(argv[2], "rb"); + yFile = fopen(argv[3], "wb"); + floatResFile = fopen(argv[4], "rb"); + outputLog = fopen(argv[5], "w"); + } + + if (xFile == NULL) { + fprintf(stderr, "An error occured while opening the input file.\n"); + return -1; + } + if (yFile == NULL) { + fprintf(stderr, "An error occured while opening the predicted output file.\n"); + return -1; + } + if (floatResFile == NULL) { + fprintf(stderr, "An error occured while opening the expected output file.\n"); + return -1; + } + if (outputLog == NULL) { + fprintf(stderr, "An error occured while opening the output log file.\n"); + return -1; + } + + char line[9]; + fgets(line, 9, xFile); + fgets(line, 9, floatResFile); + + int16_t headerSize; + fread(&headerSize, sizeof(int16_t), 1, xFile); + char* headerLine = malloc((headerSize + 1) * sizeof(*headerLine)); + fgets(headerLine, headerSize + 1, xFile); + + int16_t floatHeaderSize; + fread(&floatHeaderSize, sizeof(int16_t), 1, floatResFile); + char* floatHeaderLine = malloc((floatHeaderSize + 1) * sizeof(*floatHeaderLine)); + fgets(floatHeaderLine, floatHeaderSize + 1, floatResFile); + free(floatHeaderLine); + free(headerLine); + + char numpyHeader1[] = "{'descr': '= 0; i--) { + numpyHeader4[i] = ' '; + } + + headerLength += strlen(numpyHeader4); + char a = headerLength / 256 , b = headerLength % 256; + + char numpyMagix = 147; + char numpyVersionMajor = 1, numpyVersionMinor = 0; + + fputc(numpyMagix, yFile); + fputs("NUMPY", yFile); + fputc(numpyVersionMajor, yFile); + fputc(numpyVersionMinor, yFile); + fputc(b, yFile); + fputc(a, yFile); + fputs(numpyHeader1, yFile); + fputs(numpyHeader2, yFile); + fputs(numpyHeader3, yFile); + fputs(numpyHeader4, yFile); + + char* mem_buf = malloc(MEM_BUF_SIZE * sizeof(char)); + float* xLine = malloc(INPUT_IMG_HEIGHT * INPUT_IMG_WIDTH * sizeof(float)); + float* yLine = malloc(OUTPUT_SIZE * sizeof(float)); + float* allErrors = malloc(patches * OUTPUT_SIZE * (sizeof(float))); + + float time_spent = 0.0; + Q7_T* mem_buf_input_offset = (Q7_T *)mem_buf; + Q15_T* mem_buf_output_offset = (Q15_T *)(mem_buf + 2 * OUTPUT_SIZE); + for (unsigned i = 0; i < patches; i++) { + fread(&yLine[0], sizeof(float), OUTPUT_SIZE, floatResFile); + fread(&xLine[0], sizeof(float), INPUT_IMG_HEIGHT * INPUT_IMG_WIDTH, xFile); + + for (unsigned j = 0; j < INPUT_IMG_HEIGHT * INPUT_IMG_WIDTH; j++) { + mem_buf_input_offset[j] = (Q7_T)(xLine[j] * pow(2, XScale)); + } + + fprintf(outputLog, "Running Quantized Face Detection Model on Patch %d\n", i + 1); + clock_t begin = clock(); + q_face_detection_fast(mem_buf); + clock_t end = clock(); + time_spent += (float)(end - begin) / CLOCKS_PER_SEC; + fprintf(outputLog, "Time elapsed is %f seconds\n", time_spent); + + float max_diff = compute_error(mem_buf_output_offset, yLine, + allErrors + i * OUTPUT_SIZE, YScale); + fprintf(outputLog, "Maximum Observed Deviation: %f \n", max_diff); + + for (unsigned j = 0; j < OUTPUT_SIZE; j++) { + float val = ((float)mem_buf_output_offset[j]) / pow(2, YScale); + fwrite((char*)&val, sizeof(float), 1, yFile); + } + + if (i == 0) { + fprintf(outputLog, "Checking Fixed Point Outputs on Patch 1\n"); + for (unsigned j = 0; j < OUTPUT_SIZE; j++){ + if (mem_buf_output_offset[j] != expected[j]) { + fprintf(outputLog, "Output: %d, Expected: %d at Index: %d\n", + mem_buf_output_offset[j], expected[j], j); + fprintf(outputLog, "Quantized Face Detection Fixed Point Test Failed!\n"); + } + } + + fprintf(outputLog, "Quantized Face Detection Fixed Point Test Passed!\n"); + } + } + + fclose(xFile); + fclose(yFile); + fclose(floatResFile); + + float aggregate = aggregate_error(allErrors, patches * OUTPUT_SIZE); + fprintf(outputLog, "Aggregated 95th Percentile Error: %f\n", aggregate); + if (aggregate < 0.8922) { + fprintf(outputLog, "Quantized Face Detection Numerical Test Passed!\n"); + } else { + fprintf(outputLog, "Quantized Face Detection Numerical Test Failed!\n"); + return -1; + } + + free(mem_buf); + free(xLine); + free(yLine); + free(allErrors); + + return 0; +} diff --git a/c_reference/tests/fastgrnn/test_fastgrnn_lr.c b/c_reference/tests/fastgrnn/test_fastgrnn_lr.c index 0c04d41b7..355e25127 100644 --- a/c_reference/tests/fastgrnn/test_fastgrnn_lr.c +++ b/c_reference/tests/fastgrnn/test_fastgrnn_lr.c @@ -17,10 +17,10 @@ #define HIDDEN_DIMS 32 -#define USPS_WRANK 5 -#define USPS_URANK 5 +#define USPS_WRANK 5 +#define USPS_URANK 5 -static float USPS_mean[INPUT_DIMS*TIME_STEPS] = { -0.9919499212727939, -0.9725694919764011, -0.9309642959813387, -0.853716200521184, -0.7349504700315451, -0.5802354099574815, -0.39248257687560045, -0.2269891389384171, -0.2174700892881636, -0.3516331625291455, -0.5171603246468245, -0.6708125888081178, -0.7990983028391132, -0.8932807097791728, -0.9539613342476979, -0.9857407134823684, -0.982065124537093, -0.9396279381429109, -0.8481889680427892, -0.6871382765052781, -0.46854966931833575, -0.23665195432725242, -0.010466119873817016, 0.16903683075024034, 0.16696242696475144, 0.000575173501577279, -0.19530754532985956, -0.4051392961185021, -0.6211168477575091, -0.7968383502948817, -0.9104805820875028, -0.9707068291043692, -0.972355607872715, -0.9089240443011889, -0.7740880982032617, -0.5530052536003301, -0.3013481248114096, -0.10879414689343007, 0.02414649869702375, 0.12112666931833796, 0.09386644177753416, -0.026313687560005544, -0.13068748580441636, -0.2786945901796741, -0.5084887787683436, -0.7343963726512096, -0.8844299572075165, -0.962161552736246, -0.9642070229049474, -0.8840199842271269, -0.7208337917981055, -0.48003281689754523, -0.2592399288163491, -0.15972010135783873, -0.13488242545604182, -0.11083945041832412, -0.14293412796598523, -0.19081482046358608, -0.18728045165272306, -0.25101744602935144, -0.4563265265395706, -0.7004354450692639, -0.8731881069812105, -0.9611915881223407, -0.9567694833356168, -0.8617201112330247, -0.683815164037853, -0.4513802841859834, -0.2767222655328479, -0.24271835893567434, -0.27267054121519685, -0.27519317062131443, -0.28616588533808773, -0.2777844744205183, -0.22406378836922136, -0.2557428004388969, -0.44326194554930604, -0.6840314127005878, -0.8646587673844441, -0.9602941933891046, -0.9477821902345276, -0.8393201226169212, -0.6594944069400636, -0.44880140515704203, -0.3044652061445627, -0.2859914052941979, -0.316657265121382, -0.3067866066383211, -0.28780289836785117, -0.2623772171169936, -0.22743563598957653, -0.28094515306542406, -0.46172105499931243, -0.6816232979015237, -0.853368788643532, -0.9539364379371749, -0.9359569141407178, -0.8178023395967626, -0.6458083161431897, -0.46078189713345175, -0.3343425966259763, -0.3040399067343306, -0.3020369240159101, -0.2565737191057453, -0.2143900148127831, -0.20347084844328667, -0.21882569194897866, -0.31159891482649676, -0.4869429131806326, -0.6789936108901359, -0.8352845457413198, -0.9403150890138469, -0.9219565331230252, -0.7991542114936192, -0.6391470298998767, -0.480406617885063, -0.3772339624194202, -0.3432734622136863, -0.3076273417912494, -0.22275086654779863, -0.1591171466191192, -0.15866637937182784, -0.21225642422164245, -0.3290358596900291, -0.4917353549581671, -0.6600453933616788, -0.8079168403511172, -0.9216502385132305, -0.9072759818954866, -0.7804653297215689, -0.6322083482375515, -0.5027187801398963, -0.4339113278013999, -0.41547600946372387, -0.3618670742010695, -0.24068855520504717, -0.1473811658208747, -0.14548218365107626, -0.21954138403511242, -0.33686426539569414, -0.473740655054176, -0.6233680076807026, -0.7741535508160722, -0.9028491551227509, -0.8929522782882959, -0.756864783705938, -0.6146212389246978, -0.513367757646413, -0.48232288945274865, -0.48646097517487225, -0.42513441489507686, -0.27327081648607815, -0.15083051817309004, -0.15585458030448487, -0.24761655191331758, -0.3462121758332204, -0.44668136702784256, -0.5835845624742833, -0.746094467699902, -0.8914101106844001, -0.8821387661500428, -0.7320792965299654, -0.5845565805787934, -0.4976560571938005, -0.4952595445069262, -0.5208868074338231, -0.4561778712110802, -0.2812537535317511, -0.14685717116993566, -0.17610946427101884, -0.277720601563572, -0.3429429920449862, -0.41290968659991617, -0.553466350569195, -0.7356155199561067, -0.8925808374708505, -0.884290182965297, -0.7233545645316107, -0.555796021533396, -0.45550774763406854, -0.4571342345357299, -0.49459585763269837, -0.4290731143876021, -0.24324041955835948, -0.12013004718145653, -0.17548549403374053, -0.26795098175833226, -0.30909644794952573, -0.38439246646550385, -0.5516582737621708, -0.7513137768481636, -0.905721511452472, -0.9041776875600014, -0.7504212261692499, -0.5617998211493601, -0.4151893102455081, -0.3705037724591977, -0.38054928884926614, -0.30209018968591367, -0.11544845686462707, -0.020367994925250304, -0.10257074612536023, -0.1971577605266772, -0.26616795720751535, -0.398158987244547, -0.6004331385269481, -0.7961418553010544, -0.927132169249758, -0.9355877185571251, -0.8164877640927145, -0.636413944314908, -0.4417967572349474, -0.30123951707584623, -0.21375640858592782, -0.07664012673158706, 0.11518739075572665, 0.16615884350569157, 0.02465076409271711, -0.14109523247839745, -0.3035931360581551, -0.5030459921821414, -0.7066635047318597, -0.8603180109724315, -0.9508067177341882, -0.9675336151419524, -0.9003715298312993, -0.7766258472088848, -0.5970459330681649, -0.3958499355369634, -0.19905987738307548, 0.02545309765464275, 0.23516244191468944, 0.23560784803182028, 0.00534759127691674, -0.2629597399533658, -0.4955072450966976, -0.6918777547661497, -0.8361089925936072, -0.9240889329310108, -0.972631745576734, -0.9893073183376733, -0.9649322459196252, -0.9132032637498255, -0.8204827562748569, -0.6831469591276887, -0.506931868330818, -0.2965040820189278, -0.11981037566863263, -0.13915219805239362, -0.3596030020573289, -0.5987721205595955, -0.7692781906459996, -0.8760536623234108, -0.9370363911671895, -0.9704590652859655, -0.9892901006720557 }; +static float USPS_mean[INPUT_DIMS * TIME_STEPS] = { -0.9919499212727939, -0.9725694919764011, -0.9309642959813387, -0.853716200521184, -0.7349504700315451, -0.5802354099574815, -0.39248257687560045, -0.2269891389384171, -0.2174700892881636, -0.3516331625291455, -0.5171603246468245, -0.6708125888081178, -0.7990983028391132, -0.8932807097791728, -0.9539613342476979, -0.9857407134823684, -0.982065124537093, -0.9396279381429109, -0.8481889680427892, -0.6871382765052781, -0.46854966931833575, -0.23665195432725242, -0.010466119873817016, 0.16903683075024034, 0.16696242696475144, 0.000575173501577279, -0.19530754532985956, -0.4051392961185021, -0.6211168477575091, -0.7968383502948817, -0.9104805820875028, -0.9707068291043692, -0.972355607872715, -0.9089240443011889, -0.7740880982032617, -0.5530052536003301, -0.3013481248114096, -0.10879414689343007, 0.02414649869702375, 0.12112666931833796, 0.09386644177753416, -0.026313687560005544, -0.13068748580441636, -0.2786945901796741, -0.5084887787683436, -0.7343963726512096, -0.8844299572075165, -0.962161552736246, -0.9642070229049474, -0.8840199842271269, -0.7208337917981055, -0.48003281689754523, -0.2592399288163491, -0.15972010135783873, -0.13488242545604182, -0.11083945041832412, -0.14293412796598523, -0.19081482046358608, -0.18728045165272306, -0.25101744602935144, -0.4563265265395706, -0.7004354450692639, -0.8731881069812105, -0.9611915881223407, -0.9567694833356168, -0.8617201112330247, -0.683815164037853, -0.4513802841859834, -0.2767222655328479, -0.24271835893567434, -0.27267054121519685, -0.27519317062131443, -0.28616588533808773, -0.2777844744205183, -0.22406378836922136, -0.2557428004388969, -0.44326194554930604, -0.6840314127005878, -0.8646587673844441, -0.9602941933891046, -0.9477821902345276, -0.8393201226169212, -0.6594944069400636, -0.44880140515704203, -0.3044652061445627, -0.2859914052941979, -0.316657265121382, -0.3067866066383211, -0.28780289836785117, -0.2623772171169936, -0.22743563598957653, -0.28094515306542406, -0.46172105499931243, -0.6816232979015237, -0.853368788643532, -0.9539364379371749, -0.9359569141407178, -0.8178023395967626, -0.6458083161431897, -0.46078189713345175, -0.3343425966259763, -0.3040399067343306, -0.3020369240159101, -0.2565737191057453, -0.2143900148127831, -0.20347084844328667, -0.21882569194897866, -0.31159891482649676, -0.4869429131806326, -0.6789936108901359, -0.8352845457413198, -0.9403150890138469, -0.9219565331230252, -0.7991542114936192, -0.6391470298998767, -0.480406617885063, -0.3772339624194202, -0.3432734622136863, -0.3076273417912494, -0.22275086654779863, -0.1591171466191192, -0.15866637937182784, -0.21225642422164245, -0.3290358596900291, -0.4917353549581671, -0.6600453933616788, -0.8079168403511172, -0.9216502385132305, -0.9072759818954866, -0.7804653297215689, -0.6322083482375515, -0.5027187801398963, -0.4339113278013999, -0.41547600946372387, -0.3618670742010695, -0.24068855520504717, -0.1473811658208747, -0.14548218365107626, -0.21954138403511242, -0.33686426539569414, -0.473740655054176, -0.6233680076807026, -0.7741535508160722, -0.9028491551227509, -0.8929522782882959, -0.756864783705938, -0.6146212389246978, -0.513367757646413, -0.48232288945274865, -0.48646097517487225, -0.42513441489507686, -0.27327081648607815, -0.15083051817309004, -0.15585458030448487, -0.24761655191331758, -0.3462121758332204, -0.44668136702784256, -0.5835845624742833, -0.746094467699902, -0.8914101106844001, -0.8821387661500428, -0.7320792965299654, -0.5845565805787934, -0.4976560571938005, -0.4952595445069262, -0.5208868074338231, -0.4561778712110802, -0.2812537535317511, -0.14685717116993566, -0.17610946427101884, -0.277720601563572, -0.3429429920449862, -0.41290968659991617, -0.553466350569195, -0.7356155199561067, -0.8925808374708505, -0.884290182965297, -0.7233545645316107, -0.555796021533396, -0.45550774763406854, -0.4571342345357299, -0.49459585763269837, -0.4290731143876021, -0.24324041955835948, -0.12013004718145653, -0.17548549403374053, -0.26795098175833226, -0.30909644794952573, -0.38439246646550385, -0.5516582737621708, -0.7513137768481636, -0.905721511452472, -0.9041776875600014, -0.7504212261692499, -0.5617998211493601, -0.4151893102455081, -0.3705037724591977, -0.38054928884926614, -0.30209018968591367, -0.11544845686462707, -0.020367994925250304, -0.10257074612536023, -0.1971577605266772, -0.26616795720751535, -0.398158987244547, -0.6004331385269481, -0.7961418553010544, -0.927132169249758, -0.9355877185571251, -0.8164877640927145, -0.636413944314908, -0.4417967572349474, -0.30123951707584623, -0.21375640858592782, -0.07664012673158706, 0.11518739075572665, 0.16615884350569157, 0.02465076409271711, -0.14109523247839745, -0.3035931360581551, -0.5030459921821414, -0.7066635047318597, -0.8603180109724315, -0.9508067177341882, -0.9675336151419524, -0.9003715298312993, -0.7766258472088848, -0.5970459330681649, -0.3958499355369634, -0.19905987738307548, 0.02545309765464275, 0.23516244191468944, 0.23560784803182028, 0.00534759127691674, -0.2629597399533658, -0.4955072450966976, -0.6918777547661497, -0.8361089925936072, -0.9240889329310108, -0.972631745576734, -0.9893073183376733, -0.9649322459196252, -0.9132032637498255, -0.8204827562748569, -0.6831469591276887, -0.506931868330818, -0.2965040820189278, -0.11981037566863263, -0.13915219805239362, -0.3596030020573289, -0.5987721205595955, -0.7692781906459996, -0.8760536623234108, -0.9370363911671895, -0.9704590652859655, -0.9892901006720557 }; static float USPS_stdDev[INPUT_DIMS * TIME_STEPS] = { 0.05066656593826383, 0.11768215831858285, 0.19527142979975337, 0.2833393066737951, 0.37268899940299066, 0.43424831734200253, 0.4509077884558764, 0.4523467450088637, 0.4435444516292877, 0.453474411938222, 0.4511610370141509, 0.4090808907117051, 0.340842016175768, 0.2515266389290965, 0.1535781715584388, 0.06980490524925699, 0.08765943105043687, 0.19636324018365733, 0.32429032997742996, 0.4567512820282358, 0.5626439446484282, 0.6032659791055035, 0.5639062519215206, 0.5308776133306021, 0.5223175793565092, 0.5540930619255867, 0.6009820087794636, 0.5835468006853077, 0.5110815844557693, 0.39510080274123266, 0.25620023445987633, 0.1226867565488554, 0.11282186786555957, 0.2443736268637558, 0.3927773337244816, 0.5300792876318842, 0.611455535763247, 0.6137703781184999, 0.5486362827625642, 0.558238252221451, 0.5640102654180597, 0.5458372730410752, 0.6033813665182791, 0.6179035980472674, 0.5636690595511944, 0.4471630564471609, 0.2991307396396185, 0.14513349372261522, 0.13165609358200855, 0.27850705968930484, 0.43720035704012494, 0.5696589694535166, 0.6305106802282854, 0.6130665659135671, 0.5708937380167166, 0.6267080783818001, 0.6140579359769878, 0.5502386047872234, 0.6051362682299342, 0.635397491562088, 0.5917012576621496, 0.4694826022296184, 0.3049891980667035, 0.1417658489946166, 0.14660482167334782, 0.3108270739064537, 0.4796721806586266, 0.6021156740335395, 0.6438981023490464, 0.6149730879531347, 0.5786341846733203, 0.6260900111005044, 0.6088319125295019, 0.5527066903416282, 0.6139823813708458, 0.6469383840051754, 0.6087765126529255, 0.4896843988025161, 0.3130099011675707, 0.13746176784318512, 0.1651363517565353, 0.3525996924710074, 0.5214554460712036, 0.6228931000316578, 0.6466288953590107, 0.617026839758864, 0.5735516128512261, 0.6164884033345998, 0.6226536777808414, 0.579468571253997, 0.6226313291006089, 0.6420111615955644, 0.6028682944062023, 0.5012722033813212, 0.3390059533601551, 0.15299465137681406, 0.19251594791512783, 0.396952702268763, 0.552159431496869, 0.6320421473488981, 0.6443326365880183, 0.6170472505372365, 0.5834546203509037, 0.6456206774803475, 0.6632037104438387, 0.6136658430782906, 0.6282883980800487, 0.6266066841912776, 0.5877284692447173, 0.5083732571738568, 0.37672585693697697, 0.19071297464730821, 0.22738939517708093, 0.43216309636726685, 0.5672536909906605, 0.631729474977315, 0.639288052909488, 0.6083883492195362, 0.5889647486063578, 0.6632192879286241, 0.666693521410897, 0.6141086834297501, 0.6235523636944053, 0.6110232070097491, 0.5810599302729026, 0.5248683372032933, 0.416871751902074, 0.23245043001693613, 0.25787896223721457, 0.45642840103735277, 0.5706055474263793, 0.6215019791294262, 0.6240378390525279, 0.585872663503391, 0.5811279830268054, 0.6602994727745124, 0.6489034985750345, 0.603285958818, 0.6104761926038955, 0.6019458376723148, 0.593072552824263, 0.5541512721442687, 0.45442464044327674, 0.26421446020604794, 0.2750748340184962, 0.4759504899089418, 0.5801160408912686, 0.6171973056405151, 0.6084475754936072, 0.5662766326533075, 0.5725163997626637, 0.6523704000367663, 0.6439544061328982, 0.6038993966379462, 0.5936445165640896, 0.5988208807738072, 0.6134438430981234, 0.5822474624078565, 0.4781320392750622, 0.2744472002370629, 0.27978594406798046, 0.49000304569115505, 0.596927771017493, 0.6295636513656973, 0.6130992222136632, 0.5685432540366993, 0.5722666927638678, 0.6490460968540127, 0.6510618224925118, 0.5951965161993366, 0.579054281068931, 0.6133129715581599, 0.6399127837494875, 0.601009829227199, 0.4759842934093174, 0.25926034572427836, 0.2659329405966657, 0.48229673831219794, 0.6058557018009367, 0.6475577504899299, 0.6318593264440545, 0.5793441705514869, 0.5626352996175501, 0.6396798454937799, 0.6395304006230473, 0.5643649762025762, 0.5814789782426448, 0.6437155669568893, 0.6622897081277597, 0.5981077340856256, 0.4440137907748311, 0.22855334793658635, 0.23058280104056256, 0.4391108535116708, 0.5858018231169397, 0.6568158083074834, 0.660992447300762, 0.6050293531558012, 0.551566388582632, 0.6078442167019985, 0.5874351599908308, 0.5329056322660973, 0.6156086282390514, 0.6757254453683215, 0.658579754018323, 0.5568677508414656, 0.3855427765572426, 0.19247519514628053, 0.18151505693157194, 0.36316373873982777, 0.5198136719231422, 0.6273283747062883, 0.6745273153652143, 0.6455002272347471, 0.5585396598417464, 0.5410453171458859, 0.5096064443341672, 0.5429252747140453, 0.6545502373132852, 0.6698239302774162, 0.5980652613996279, 0.4668007421210614, 0.3114873386910331, 0.15654842294915372, 0.12168436193114814, 0.2528519135349363, 0.3889022669431662, 0.51681799362489, 0.6152354929585003, 0.6480000627279904, 0.5868680464219567, 0.5207594899432356, 0.5133934769539377, 0.5830576463663892, 0.6286429551523846, 0.5707288552482176, 0.4582805109955963, 0.3362912300487512, 0.224029788596469, 0.1134877995573401, 0.05688552112923371, 0.1253359275691928, 0.20678860013345332, 0.30178570214200107, 0.39857085075127774, 0.4710686511232531, 0.4809255781447563, 0.4517230712365873, 0.44968948316492025, 0.4579322493794554, 0.4218312472593008, 0.3369818647335357, 0.2510674309664235, 0.18299863726222423, 0.1220244940300115, 0.059526488182894154 }; static float USPS_W1[INPUT_DIMS * USPS_WRANK] = { 0.04437631741166115, 0.13164237141609192, 0.13089998066425323, -0.005882591009140015, 0.04586317017674446, 0.21047545969486237, 0.9706279635429382, -0.5048243999481201, -0.7511760592460632, 0.07774244248867035, 0.40391597151756287, -0.016807876527309418, 0.08794082701206207, 0.09336663037538528, 0.08842388540506363, -0.10721755772829056, -0.16265031695365906, -0.506087601184845, -0.2623403072357178, -0.41705453395843506, -0.3362988531589508, 0.20567356050014496, 0.09920496493577957, 0.399951696395874, -0.10302149504423141, -0.2829299569129944, -0.21695533394813538, -0.11943338066339493, -0.17138315737247467, -0.08943527936935425, 0.09248100966215134, -0.11688404530286789, -0.2544580101966858, 0.2178615778684616, -0.245102658867836, -0.2574276626110077, 0.022898254916071892, -0.4134445786476135, 0.028750110417604446, -0.047812022268772125, 0.4697933793067932, 0.4765063524246216, 0.35218697786331177, 0.29210469126701355, 0.1622641533613205, -0.1555808037519455, 0.04628629982471466, -0.031492870301008224, -0.23739324510097504, -0.0762714371085167, -0.16486185789108276, -0.2018968164920807, -0.5137050151824951, 0.14758920669555664, -0.5882534980773926, -0.7306461334228516, -0.7919453978538513, 0.07507729530334473, 0.1977670043706894, 0.21115902066230774, -0.12351129949092865, -0.07091476023197174, 0.06400024145841599, 0.021400034427642822, 0.10578139871358871, 0.17063069343566895, 0.3912162184715271, -0.02506481111049652, 0.09003248065710068, 0.42354777455329895, -0.37391015887260437, 0.14988373219966888, 0.2816886901855469, -0.35063880681991577, -0.05643891915678978, -0.15927889943122864, -0.47207891941070557, -0.5888171195983887, -0.18981651961803436, -0.41033101081848145 }; @@ -86,7 +86,6 @@ int main() { }; for (unsigned n = 0; n < NUM_EXAMPLES; ++n) { - memset(hiddenState, 0, sizeof(float) * HIDDEN_DIMS); fastgrnn_lr(hiddenState, HIDDEN_DIMS, input + n * INPUT_DIMS * TIME_STEPS, INPUT_DIMS, TIME_STEPS, diff --git a/c_reference/tests/fastgrnn/test_quantized_fastgrnn.c b/c_reference/tests/fastgrnn/test_quantized_fastgrnn.c index 05ab80cf7..2f05d04fd 100644 --- a/c_reference/tests/fastgrnn/test_quantized_fastgrnn.c +++ b/c_reference/tests/fastgrnn/test_quantized_fastgrnn.c @@ -7,94 +7,23 @@ #include "quantized_fastgrnn.h" #include "../rnnpool/q_wider_regression_model/rnn1.h" +const Q15_T patch[INPUT_CHANNELS] = {1040, 1919, 4254, 4024}; +#ifdef SHIFT + const Q15_T expected[HIDDEN_DIM1] = {1415, 7082, -16378, 8216, -12075, 6805, 6475, 6902}; +#else + const Q15_T expected[HIDDEN_DIM1] = {1423, 7085, -16378, 8209, -12067, 6805, 6475, 6897}; +#endif + // Simple test for comparing Seedot's quantized FastGRNN output with our // implementation. All values generated from Seedot on Wider Regression dataset. // By default, all tests run without using bit-shifting operations. int main() { - Q_FastGRNN_Params rnn1_params = { - .mean = NULL, - .stdDev = NULL, - .W = W1, - .U = U1, - .Bg = Bg1, - .Bh = Bh1, - .sigmoid_zeta = sigmoid_zeta1, - .sigmoid_nu = sigmoid_nu1 - }; - - INT_T preComp11[HIDDEN_DIM1]; - INT_T preComp12[HIDDEN_DIM1]; - INT_T preComp13[HIDDEN_DIM1]; - INT_T normFeatures1[INPUT_CHANNELS]; - memset(preComp11, 0, sizeof(INT_T) * HIDDEN_DIM1); - memset(preComp12, 0, sizeof(INT_T) * HIDDEN_DIM1); - memset(preComp13, 0, sizeof(INT_T) * HIDDEN_DIM1); - memset(normFeatures1, 0, sizeof(INT_T) * INPUT_CHANNELS); - - Q_FastGRNN_Buffers rnn1_buffers = { - .preComp1 = preComp11, - .preComp2 = preComp12, - .preComp3 = preComp13, - .normFeatures = normFeatures1 - }; - - Q_FastGRNN_Scales rnn1_scales = { - .input = input1, - .mean = meanScale1, - .meanSub = meanSub1, - .stdDev = stdDevScale1, - .normFeaturesHDStdDev = normFeaturesHDStdDev1, - .W = WScale1, - .normFeaturesMVW = normFeaturesMVW1, - .H1W = H1W1, - .H2W = H2W1, - .U = UScale1, - .hiddenStateMVU = hiddenStateMVU1, - .H1U = H1U1, - .H2U = H2U1, - .mV1AddMV2 = mV1AddMV21, - .mV2AddMV1 = mV2AddMV11, - .mV1AddMV2Out = mV1AddMV2Out1, - .pC1AddBg = pC1AddBg1, - .Bg = BgScale1, - .pC1AddBgOut = pC1AddBgOut1, - .sigmoidLimit = sigmoidLimit1, - .sigmoidScaleIn = sigmoidScaleIn1, - .sigmoidScaleOut = sigmoidScaleOut1, - .pC1AddBh = pC1AddBh1, - .Bh = BhScale1, - .pC1AddBhOut = pC1AddBhOut1, - .tanhScaleIn = tanhScaleIn1, - .tanhScaleOut = tanhScaleOut1, - .gateHDHiddenState = gateHDHiddenState1, - .hiddenStateHDGate = hiddenStateHDGate1, - .qOneScale = qOneScale1, - .qOneSubGate = qOneSubGate1, - .qOneSubGateOut = qOneSubGateOut1, - .sigmoidZeta = sigmoidZetaScale1, - .sigmoidZetaMulQOneSubGate = sigmoidZetaMulQOneSubGate1, - .sigmoidNu = sigmoidNuScale1, - .sigmoidNuAddQOneSubGate = sigmoidNuAddQOneSubGate1, - .sigmoidNuAddQOneSubGateOut = sigmoidNuAddQOneSubGateOut1, - .sigmoidNuAddQOneSubGateHDUpdate = sigmoidNuAddQOneSubGateHDUpdate1, - .updateHDSigmoidNuAddQOneSubGate = updateHDSigmoidNuAddQOneSubGate1, - .pC3AddPC1 = pC3AddPC11, - .pC1AddPC3 = pC1AddPC31, - .hiddenStateOut = hiddenStateOut1, - .div = div1, - .add = add1, - .qOne = qOne1 - }; - - const INT_T patch[INPUT_CHANNELS] = {1040, 1919, 4254, 4024}; - const INT_T expected[HIDDEN_DIM1] = {1423, 7085, -16378, 8209, -12067, 6805, 6475, 6897}; - - INT_T buffer[HIDDEN_DIM1]; - memset(buffer, 0, sizeof(INT_T) * HIDDEN_DIM1); + Q15_T buffer[HIDDEN_DIM1]; + memset(buffer, 0, sizeof(Q15_T) * HIDDEN_DIM1); - q_fastgrnn(buffer, HIDDEN_DIM1, patch, INPUT_CHANNELS, 1, - (const void*)(&rnn1_params), (void*)(&rnn1_buffers), - (const void*)(&rnn1_scales), 0, 0); + q15_fastgrnn(buffer, HIDDEN_DIM1, patch, INPUT_CHANNELS, 1, + (const void*)(&rnn1_params), (void*)(&rnn1_buffers), + (const void*)(&rnn1_scales), 0, 0); for (unsigned i = 0; i < HIDDEN_DIM1; i++){ if (buffer[i] != expected[i]) { diff --git a/c_reference/tests/mbconv/q_wider_regression_model/mbconv.h b/c_reference/tests/mbconv/q_wider_regression_model/mbconv.h index 4279f945d..26b863e64 100644 --- a/c_reference/tests/mbconv/q_wider_regression_model/mbconv.h +++ b/c_reference/tests/mbconv/q_wider_regression_model/mbconv.h @@ -19,60 +19,49 @@ #define WSTRIDE 2 // The convention followed for filter weights is F[groups][filter_height][filter_width][in_channels][out_channels] -static INT_T F1[1 * 1 * 1 * CIN * CTEMP] = {5647, -1502, -7553, 9305, 4169, -3511, 5768, -1740, 2189, -10762, -2072, 2105, 8147, -2226, -3478, 6894, -4989, -1225, -1052, 3223, 2835, 187, -8015, -1954, 7735, -6578, 3594, -2792, -7423, 3046, -460, -2090, 9823, 1617, 7022, 3795, 4573, 6366, 4820, -8578, -1902, 3657, -5971, -6023, 4998, -11970, 1294, -3900, 8266, -1968, 3305, -8012, 10128, -1761, 2481, 3506, 1995, 1607, 3504, 2156, -4497, 1873, 5170, 1091, 1625, 4395, 528, -6206, -3641, 7600, -7175, -3123, -1529, 7513, 2189, 2205, 197, 824, -7992, -7497, 6485, -1067, 12214, -7476, -2371, 8122, -3530, -7981, 95, -5412, -7581, 329, -3165, 2783, 3227, 7431, 107, 7325, 11, -10290, 3017, -3696, -1911, 4747, 13048, 3998, 5457, 6305, 5505, 1070, 2236, -6220, 2900, -4816, 2226, -720, -2155, 9079, -2798, -5857, -1181, 4892, 3620, -3150, -9537, -5267, -1218, -66, -4405, 3934, -11278, 8412, -2100, -544, 3050, 787, -857, -5018, 504, 5199, 2862, 3108, 6487, -1019, 7989, -7066, -1135, -723, 442, 4407, -4157, 6203, 6847, 1563, -8250, 7772, -6175, 5326, 5524, -4206, 4579, -1926, 1369, -4916, -166, 2073, -1070, 1524, 7746, -6054, 1159, 1143, 544, -2335, -8732, 5922, -1917, -6708, 1927, -7531, 4538, 8959, 5073, -1378, -2915, -3756, 2680, 4794, 2917, 4262, -1785, -301, 8447, 5535, -5222, 2306, 6775, -1192, -4641, 7194, -881, 6141, -681, -6712, 8749, 3717, 2676, -1729, -3059, 8428, 6628, 4350, 2941, 11996, 9453, -792, -7168, -4372, 7724, -3749, 10496, 6122, 2245, 4841, 1398, 9183, 3365, 7504, -3962, -4160, 6347, 3671, -781, 1743, -3610, -7199, 1290, 462, -205, -1230, 31, -7259, 1188, 2634, 3023, -84, 4392, -7913, 6836, 12489, 4398, 4260, -4780, -2173, 4709, -2024, -5561, 1100, -5296, 1208, 7689, -2640, -410, 4195, 9372, 4189, 879, -1541, 5009, 9403, 3959, 4575, 3612, -356, 5412, -6370, 2349, 1137, 8175, 6530, -5105, -520, 9719, 3926, 2462, -941, -4688, 4880, 3179, -2203, 1182, -5729, 904, -2621, -2621, -4389, 4793, 8366, 2788, -3577, 2685, 8770, 6323, 1680, 9402, -4039, -2041, 6528, 9144, 4755, -913, 1049, 2715, 11985, -3276, 6198, 3623, -551, -4933, 1270, 4956, -6608, 3294, -2755, 10200, -8212, 1255, -1543, -1516, -604, -5208, 5610, 7358, 1666, 7865, 5376, 983, 4830, 17623, -6096, 13371, 2384, 4321, 2703, 5427, -4702, -862, 1866, -1953, -2645, 977, 5275, -88, 3359, 4728, 10823, 12210, 11048, -270, 2499, -3425, -2403, 5912, 9, -12209, -2114, 2467, -7428, 637, 3138, -354, 6650, -7600, -6354, -6179, -1072, 793, -1789, -6443, -2108, 9374, 1118, -8521, 1460, -1185, -1810, 1113, -1530, -1314, 962, 5213, 221, 69, 6403, 1725, -4855, 522, -1289, 4939, -2568, -1769, 4289, -6264, -5798, -4541, 490, 5470, 7726, 3147, -2186, -7494, 5025, -3262, 3144, 3306, 1112, -3543, -5099, 2393, 3953, -3382, -128, -3101, -4819, 4896, -5177, -3621, 1837, -4276, -174, 957, 12080, 3690, -1228, -597, -6413, -5576, -11349, -214, 2310, 4438, -2967, 1770, 7337, 5305, -2289, 7228, 5144, -4306, 7937, 2819, -214, 2107, 4691, -2540, -293, -282, -4000, -1935, 2758, 3950, 2405, -6978, 8680, 3902, 2468, 5203, -896, -3301, -1162, 888, 3361, 1283, 5571, 3951, -3928, 2475, -137, 2210, 2609, -3188, -4436, -1114, 215, -2381, 4729, 4188, -3974, -1547, 1646, 2820, 3480, 3487, -698, -587, 3782, -42, -3763, -1669, -1155, 2516, -3625, -252, -178, -4694, -3587, -5573, 3116, 3857, 3710, -956, -8638, 1767, -7624, -1871, -2481, 429, -5948, 5278, -8459, 5045, -2315, 6215, 1913, 4319, -686, 7174, -4847, 1062, 4779, -879, -990, -3208, 4286, -3201, 1707, -6203, -2347, 32, -6634, -72, -4678, 7856, 3154, 805, -3417, 5045, -3326, 2688, -2945, -1976, -2406, 3616, -2406, 1604, 975, -2068, 7626, 4682, 7346, -5623, 2841, -1699, 6255, -1909, 3627, 175, -5471, 2998, 3101, -3433, 4482, -2822, 5856, -27, 1612, -1999, -1031, 1026, 5508, -125, 5164, 4432, -5098, 11757, 4971, 19, -3547, 2728, 6500, 4712, 6296, -9141, 999, -1336, 1085, 640, -1007, -37, 3604, -3291, -533, -552, -1880, 11637, 2277, 5645, 828, 4758, 1948, -6581, 2126, 125, 1804, -7882, -4412, 1116, 10066, 2499, 6391, -1061, -5314, -5127, 3956, -1122, 5436, 1843, 540, 8954, -4060, 7632, -4397, -3231, 1781, -6399, 1266, -1678, -3800, 1449, -4788, 675, 1455, -5285, -2950, 7905, 4870, 2956, 75, 7440, 2015, 3924, 6023, 2018, 654, 4360, 1167, -2138, -4702, -3158, -9666, -1277, -1561, 964, 5367, -3178, 5186, 4966, 6648, 6756, 2311, -5807, 4905, -3072, -1318, -9288, 4338, 7301, -640, 1186, -276, -9606, 4807, 6278, -9188, -6387, -5902, -397, -4614, -3149, -321, 7225, -2958, 8934, 8169, 1042, 4501, -1256, 1010, -8546, -4900, -10039, 1128, -2137, -5275, -7872, 7548, 735, -722, 4003, 935, -514, 8273, 2945, 2596, 88, -2551, -2276, -4734, 3838, 1648, 6781, 9786, 4433, -331, 8371, 800, 619, -5702, -655, -7019, -5549, -6258, 5724, 962, -2421, -475, -168, -2952, 4680, 1910, -1628, -9278, 9653, -512, -60, 272, 8379, 8674, 3656, -9566, 9684, -2834, -2537, 2828, -3126, 4000, 2764, -1499, -6955, -7824, 284, -4516, 3267, 1241, 4617, -14, -4892, 1962, 1144, -37, 13467, -2203, -3585, 3505, 5146, -1252, -3156, 3466, -2958, -1453, 7570, -4038, 7792, 4391, -5711, 1978, 2684, 1200, -5394, -265, -1780, 222, -4314, 3738, 4060, -2165, 4297, -509, 7596, 1148, -2211, -1089, -2160, -2678, 2189, 4391, -1253, -4438, 4316, -5649, 241, 7023, 2091, -5876, -1314, 492, 2820, -3612, 465, -2694, 936, -506, -7855, 3807, 624, 3397, 7667, -5416, -5629, -1643, 2475, 2328, 4703, -1929, -1913, 8823, -1905, 900, 1248, 312, 1716, 614, 628, -2167, 7106, 35, -2054, -2882, -4322, 8530, 4919, 6134, -5951, 9097, -851, 6451, -1111, -2277, -2253, -2047, -6578, -5245, -718, -3368, 4402, 1998, 3812, -4521, -2441, -6902, 356, 3791, -14081, -4555, -4798, -4257, 5856, -5753, 1653, 2468, -2099, 5003, 2839, -1210, 2970, 3006, 3324, 5673, 6684, -1218, -4343, -624, 2302, 5780, 3684, -5854, -5215, 7455, 4126, 935, 2975, 3551, -3919, 2921, 359, -1612, 87, -4818, -2740, 2394, -6541, 4035, 4298, -3868, 6524, -41, 7827, -8084, 3060, -2297, -9473, -5175, 3038, 1535, 235, 659, -4727, -1158, -5783, -1187, -3661, -3866, -701, -1357, 2811, 2512, 3586, 4357, 3042, -770, 5714, 547, -856, -4045, 9289, 4443, -10254, -2220, 1109, 6477, -3332, -5234, 678, 12051, 1562, 4838, -1642, -1091, -4914, 6735, -4322, 1292, 9649, 4597, -1917, -5877, -6028, -716, -6943, -995, 4963, -534, -6509, -1536, -4375, -8056, 4777, 1109, -6212, -7238, 3227, -2994, 8737, -3120, -5105, 747, -3642, 3843, 3227, -738, 695, 1467, 296, 970, 6204, -3247, 3802, -1675, 866, -3687, -14441, -2552, -6902, -1881, -4991, 5842, -2013, -4095, 1562, -1868, 1628, 5017, -6258, 2605, -10390, -5330, -1922, -2132, 1719, -2901, 2958, 2414, -5385, 2536, -6006, 272, -2902, -3587, 2799, -3488, 2327, 4032, 1530, 3682, 4240, -1222, 2801, -4200, 1513, -1084, -867, 6022, 655, 7948, -4692, 5804, -1205, 219, 238, -3507, -2413, 301, -7158, -390, -2171, 1528, 2615, -447, -1105, -607, 253, 1572, -3231, 1489, -3095, 2676, -3071, -2035, -1281, 2062, 2543, 3932, -5773, -5138, 2467, 2208, -8241, 5189, -1114, 545, -2905, -2963, -292, -6519, -4234, 4215, 3741, 1406, 1535, -6910, -4696, -6332, -7213, 3371, -3472, -8629, 5069, 415, 6666, 9218, 47, 3194, -3917, 5275, -10448, 3619, 1008, 10708, -4033, 4254, 2459, 7458, 8628, 2886, 3681, -2971, -2150, 5017, -492, -2928, -10531, 4076, -6471, 5186, 2503, -128, -4909, 9382, -2063, -1510, -5544, -4282, 5469, 2043, -6271, -290, 8230, -7957, 669, -5458, 739, 2463, 5153, -3092, -304, 3161, -3372, 7698, 4090, 2160, 325, -3907, -1872, -2165, -743, 3412, 3741, -5584, -438, -9338, 2515, 1422, -6008, -6289, -4228, 1923, -1499, 4143, -3509, -1713, -206, 1897, 5140, -3164, -2030, -5772, -2455, -5541, -4290, 643, -5058, 36, -1846, 2587, -1506, 429, -1114, 3492, -1487, 842, -4001, 2080, -9719, -3330, 210, 712, -4454, 796, -669, -6765, 3535, -5977, 1192, -8716, 4714, 331, 4596, 5082, -4125, -8725, -5093, 2113, 0, -12833, 1490, -7501, 6515, -7667, -895, -4410, 5530, -1468, 1165, 2906, -2146, 1963, 6210, 2636, -6488, 5930, -7734, 6039, 1902, -3699, 2363, -5772, -3350, 2816, -504, 5346, -3857, -5281, -1696, 12163, -1288, -1866, 4412, -557, -3400, -2909, -4906, 2744, 4297, -7955, -9032, -217, -213, -2751, -160, 9526, -3831, 1500, 626, 5907, 1727, -543, -1938, 2573, -9890, 3560, -1114, -6042, -3130, 6516, 7898, -5467, 7168, -924, 5488, -1341, -2632, -4533, 1240, 2346, 6794, -5228, 7981, -6076, -103, -4026, 1489, -10164, 424, -3326, -4015, -6020, 2884, 1285, -7001, -2132, 2801, 3875, -3070, -1676, -5033, -5397, 3738, -4972, -2381, -4996, -938, 1956, 5520, 4523, -3725, 1766, 2677, 4110, 3321, -5491, 2735, 293, -5947, -3739, 1075, 2447, 5585, -1018, -1700, -1242, 6332, 2296, 607, 7309, -3608, 2658, -219, 1474, 6698, -1703, -6544, 4623, 3953, -1637, 2973, -951, -3144, 4602, 909, -2505, -2098, -1388, -11596, -2505, -6044, -44, 5366, 1033, 7385, 1603, -4747, 8333, 8224, -3543, -6406, -2739, -8539, 5700, -375, -2767, -465, 3871, 470, -1481, 8464, -1089, -6101, 4186, 1299, -569, 1894, 39, -9578, -1457, 8271, -1928, -1020, -10104, 1594, 14418, -1509, -3740, 2215, 1486, -807, -1147, -4834, -4675, -541, 5331, -1858, -790, -8705, 616, -2968, 4879, 848, -2254, -3664, -823, 10749, 7337, -2632, 960, -3235, -6361, 2837, 11319, -6879, 2210, 2389, 2449, 232, -1490, -2233, 1683, 1785, -4136, 2710, -1976, -5217, -2640, 4577, 2558, 9137, 8569, 4173, -3605, 3334, -1617, 4341, -6381, 1058, 6153, 5515, -6114, -3793, -6236, 1226, -6594, 1398, -2302, -368, -158, -3138, 1859, 513, -2340, 5561, -9077, 3093, 4084, 2280, 2914, 4390, -1977, -3339, -3108, -5267, -7735, 5394, -8353, 5413, 6875, 3978, -2344, 1139, -5144, -239, -1385, -2015, 749, 10129, -4502, 1384, -2936, 4209, 1569, 1221, 5187, 5322, -3982, -3146, 5523, -3620, 1925, 217, -8448, 5278, 4716, 1073, 88, 3580, 442, 4286, 2411, -8699, 8173, -2709, 15747, -2814, 3919, -3602, 2947, 3402, -8147, 787, 1378, 3435, -5134, -3312, 4376, -3301, -4305, 1390, -4878, -3324, -8812, -352, 1721, 2597, 3561, 2348, 537, -4281, -4351, 359, 2841, -4273, -3656, 61, -9043, 6520, -9700, -2357, -6275, -2199, 3007, 9091, 3336, 4802, -5862, 957, 7511, -3349, 3407, 909, -1322, -2817, 8871, 1395, -2875, 6765, 7110, 8335, 4226, 6333, 4068, 6885, 8151, -4749, 3206, -4826, -4526, -4836, -2756, 774, 4906, -7011, 6059, 9576, 6452, 1121, 6427, 3681, -7027, -1971, 3636, 5372, -542, -2103, 7351, 7797, -2494, -2223, -5478, -3336, 4449, 1742, 1793, -1211, -7018, 8723, -4872, 3171, 2040, -366, -5607, -5133, 696, -662, 4206, -2412, -3312, -4433, 5151, -609, -6771, 7946, 642, -2105, 5029, -3140, 8665, 4291, 5984, 5347, -7429, 1971, 13136, 3185, 5985, 1035, 4172, 1121, 2789, -2432, 4216, 710, -3267, 1335, -5185, -6489, -1220, 2297, 11131, 5529, 5948, -6547, -744, 6099, -5487, 1849, 3517, 3806, -3892, 658, -4946, -2412, 105, 2845, 11179, -3724, -2078, -9708, 3800, -2592, -3829, -9838, -5751, -3911, 4933, -4110, 2004, 6111, -6887, 8421, 4730, -136, -4195, 499, 5091, -5955, -12127, 785, -3013, 424, 533, -12097, -5298, -922, 3852, -7508, -4488, -2917, 1802, -4202, 5511, -176, -4961, -5692, 7949, -5787, 4512, -3100, -2167, -3083, 4932, -1667, 497, 2306, 952, -13249, 310, -8916, 289, -3943, 6805, -3561, -1931, -414, -3538, 2671, 2934, 409, 2672, -4732, -2762, 5280, 2208, -7041, 6055, -9497, -12393, -6878, -7755, -5662, -8010, 7317, 1874, -5620, -1674, -960, -227, 3776, -3658, -10434, -1682, 117, 1157, -4769, 1607, -6527, 8029, 394, -865, -828, -1006, 2357, 2550, 6976, -5735, -4907, 3937, 9029, -4298, -9315, -4801, -4552, -29, -4772, 8053, -3882, -5677, 481, 1184, 5405, -7422, 3084, 5170, -1565, -14999, 5406, 4027, 3918, 3657, -1518, -4444, 633, -326, 5272, -2166, -5338, 5000, 3501, 4350, -1489, -4925, 4976, -4210, -2911, -602, -8751, -3253, 3687, -3874, -3167, -1721, 9723, -4211, 3310, 5152, 6732, -3559, -5384, 1359, 2055, 1292, 4385, -6655, -1080, -1550, -5549, -274, -4742, 1261, -565, -1661, 3883, -428, 1907, -5591, 6262, -1418, 913, -2256, -5102, 2024, 3712, 9099, 1692, 5682, -3090, -520, 489, -6397, -2965, 5058, 2775, 276, -1029, -8370, -3781, -6361, 9300, 617, -6931, 1780, 4700, 6939, 989, 2694, -6564, 5441, 4450, 4146, 3812, 4185, -2249, -4457, -755, -4662, 3527, -1064, -6334, 5442, 2490, 5922, 465, -1920, 1954, -4107, -4118, -4076, 2361, 5674, -650, 4975, -4516, -8047, 1234, -367, -1732, -4585, -3463, 3702, 636, -6919, 173, 3791, 4692, -5332, 1752, -5736, 3347, 2112, -4898, 5228, 4393, -1996, 6004, -1908, 4694, -4091, -10340, -1964, 933, 5419, 6056, -1264, -6650, 84, -6439, 4243, -834, 1412, -6262, 8991, -3438, -4242, 8993, -6096, -6931, -1735, -5431, -2737, -12888, 899, 3548, -834, -4133, -3928, -1885, -365, -1806, -4936, -3675, 2474, 634, 6314, 7959, 2111, 1518, 2606, 3036, -7179, -2245, 177, -4670, 917, 4366, 3354, -3877, 4587, -6489, 9367, 846, 5266, 8925, 1810, -4454, 2901, -4005, 4511, -98, -843, 1478, 4465, -410, 6896, 1924, -3843, -3722, -299, -4901, -955, 1689, -3594, -5512, -874, 531, 2518, 1686, -1128, -4129, -804, 812, -2226, 10917, 324, 1884, -1738, -2262, -3440, 2647, 4885, 6276, -2400, 6730, 9059, 1489, -5259, 2642, -1688, -2495, 7755, 7955, -1060, 3935, 3831, 4673, 6807, 4248, 64, -3259, -1569, -4155, -8677, -4086, 411, 4654, -4131, -4066, -6834, 5474, 8081, -6936, -4597, -1553, 3425, 2122, -1487, 676, -5534, -3741, -3257, -7207, 5808, -494, 315, -4505, 3640, -1031, 6125, -2919, 3291, 5326, -1345, -1273, -4278, 986, -2627, 4029, -38, 11562, -308, -435, -6952, 4928, 1433, 3891, 1732, -4403, 2132, 2658, 7470, 2133, 3917, 857, -903, -9605, 1022, 6826, 4880, 2561, 4424, 3521, 5797, -1378, -3468, 118, 3769, 3010, -8156, -2295, -1888, 8306, 1004, 901, 2662, -7409, 4002, -8371, 144, -4875, 6831, 1128, -1522, -3100, -3688, -10842, -4144, -1460, -2519, 770, -2913, -8911, -1236, 8964, -7153, 3333, 2518, -3113, 6081, 1283, 2934, 7998, -3067, 11466, 988, -7128, -8289, 6721, -3421, 5059, 3593, -36, -864, -4956, 6131, 221, -2102, 5184, -2280, 1992, -6106, 6195, 7344, 1301, -2059, -5523, 1895, -13472, -405, 2038, 7437, -1137, 5154, -1971, -7134, 6040, 1638, -1806, 5852, -5522, 4474, -6259, 785, -3881, -2632, 3278, -5444, -323, -6519, 45, 7532, 94, -9200, -2834, 2533, 8512, 864, -10699, -5060, 6560, -1008, -2010, 605, 2092, -2724, 3130, 4107, 4223, 4092, -358, -5314, -5509, -4646, 4351, -9626, -6685, -4484, -2058, -5633, -4022, -9542, -3781, -5608, -3976, -6949, 3573, 7937, 1684, -4031, 6423, -1107, -2870, -3751, -711, -3219, 1720, -4229, -5544, -531, -6607, -10902, 5602, 4126, -4509, -8305, -3472, 5829, -9380, -5654, 1776, -1578, 3711, -5634, -1983, -3340, 6344, -5865, -5357, 6661, 3787, -2443, -7630, 2158, -3139, 152, 1835, -7223, -8407, 9585, 2759, 148, -6940, 5635, 8386, -2186, -2110, 4353, 4879, -2922, -9560, 8183, -4250, -4240, -5269, 172, -2753, -1338, 1289, -1733, 1687, -3591, -3520, 423, 4094, -5203, 2528, -9512, -2929, 2625, -4389, 2738, -5804, -4502, -4036, -5094, -3279, 4361, -3722, -2365, -959, -6234, -4393, 5992, -4758, 1722, 3204, 5944, -3509, -2572, 8072, -5131, 6382, 2891, 7457, -2548, 372, 2318, -5542, 2719, -533, -9872, 4763, 2597, 6386, -1761, 4730, 6814, 4563, 2281, -7858, 5920, -3881, 6909, 5244, -3360, -2724, 5743, -6890, -858, 2744, -2455, -179, -1375, -2070, -3425, -5403, -3542, -7857, 8171, 6081, -431, -3913, 6207, -2772, 2394, 3423, 1575, -2491, 5831, 819, -5074, 4551, 1696, 5254, 7582, -2497, 5844, -3639, 1174, 1324, -1500, 4856, 8368, -590, -9969, -3403, 2724, 2228, 987, 6913, -4463, 3675, -2892, -1551, 4239, 5466, 1836, -6505, 9830, -3307, -3251, 6785, 3307, -4350, 6560, -5758, 2888, -3966, 889, 3812, 5659, 5129, -3613, -1810, 4667, 11973, 8861, 4742, -223, -2527, -4652, -2331, 1459, 3409, 164, -2706, -944, 4252, 1648, -10078, 6349, 4378, -6000, 8488, 474, -802, 6580, 4164, -4134, -1233, 5852, 5308, -5593, 6340, 1276, 4516, -7433, 10169, 4811, 1652, -4831, 4314, -8271, -113, -3739, -4792, 4778, 2180, -3697, 200, -4308, -370, 732, -1237, -3056, 1404, 5602, 5240, -5453, -3152, 3402, 3029, -6228, -2223, -4361, -3661, 5635, 842, 1126, -5064, -8311, 19, 354, -92, -19, -346, -4004, 5662, 3057, -8404, 1562, -1955, 964, 3916, 6355, -6188, 3100, 2666, -2862, -1483, 1095, 1274, -2510, 3722, -2843, -5812, 449, 2864, -4693, -5237, 966, -4576, -4159, -2680, 6764, -5414, 3814, 6156, 2133, -2398, -6265, -11078, 47, 5405, 2132, -2036, -5653, 4110, 1219, -3891, -357, 1221, -541, -6031, -4757, 3741, -6820, -494, 1620, -5583, -416, 1215, -1522, 660, -7735, 7650, -5234, -4319, -6897, 10511, -2303, -2873, -28, 1185, 467, 7172, 11120, 5691, -5781, 1336, -1082, -7319, -468, -1858, 2542, 5369, -2908, -6372, -4712, -4367, 998, 860, 5538, -21, -3849, 7106, 3147, -665, -4726, 1774, -4545, 4243, 5274, -416, 4783, -5335, -2113, 2902, 8115, 4455, 364, 12269, -4193, -829, -5719, 7350, -4955, 13361, 4395, -487, -2694, -2965, 2638, 2452, -5859, 1709, 4659, 530, -9251, 6308, -7789, -8211, 117, -4796, -8926, 3659, 5035, 8870, 3537, 7052, 5547, 7919, -2944, -1171, -5269, -5838, 1233, 9775, 5597, 1937, -8255, -3681, 3722, -2149, 1570, -6027, -3663, -213, 4881, -4605, 4542, 4197, 987, 9535, -3463, 4994, -4658, 1593, 9914, 4132, -2220, 5688, -9202, 2149, -1036, 6732, 1477, 5295, -4328, 5249, 800, -2881, -6951, -7780, 5491, 4785, -4414, -3383, -3674, -5290, 10038, 5365, -2467, -159, 2500, 5833, 2067, 4887, -1878, 5335, 1141, -2667, 1223, -4247, 5187, 6446, -7613, -287, 8632, -5139, 3471, 4755, 4341, 8954, -1569, -1706, 6035, -4507, -1031, -1543, 2008, 547, -2045, 245, -3906, 1882, -2162, -8045, -7297, -1522, 4907, 3475, -1539, 2911, 7523, -4679, 5310, -4858, 7323, -2938, 717, -136, 916, -1724, -5325, -1513, -332, -966, -398, 232, -6041, 2708, -709, -4197, -3055, -5531, -2530, -3418, 2334, 2336, -1504, 4586, -4259, -2008, 3929, 4353, 4932, -4509, -4261, 1553, -10839, 1533, -9224, -5697, -381, 3811, 2073, 4108, -1879, -4603, 7545, -374, 4292, 2864, -2945, -4038, -3678, 1525, -4373, -2001, -713, -5577, -2103, -2804, -6291, -7015, -7964, 5524, -6372, -292, -4155, -2224, -47, 5000, -10278, -9740, -5363, 1251, 1461, -10593, 2295, -3915, 980, -4468, 2700, -2970, 5377, -8308, -2773, -113, -8731, -1721, -222, 5665, -10948, -4832, 1944, -2594, 3962, -6599, 5712, -1513, -1604, 734, -1913, 2078, -4680, -2065, -2845, -8832, 4410, 378, 2437, -3081, 10002, 6978, -4088, 4747, 3528, -4886, 5833, 7346, -2862, -6511, 585, 4439, 6133, -7885, -4325, 2182, -4957, 3974, -2410, -10047, 4747, 5678, -1507, -1898, -1408, 3047, -3406, 1938, 94, 3001, 2549, -1154, -3879, -2568, 117, -470, 3857, 2881, -8059, -5076, 1499, 194, -6224, 7357, -5986, 1830, -669, 2007, -524, 2148, 2094, 4393, -6409, -8211, 2445, 2817, -8283, -5688, -2195, -5598, -6015, 1799, -2312, -286, 1546, -6151, -2654, 7839, -372, 4646, -7378, 4624, 187, -2344, 1424, -4163, 1202, -1443, -1880, -5499, -5587, -3951, 499, 3479, 3577, -7278, 4050, 1637, -1766, -3561, -2097, 884, -2509, -3999, 1218, 4314, 4060, 5246, 2796, -2695, 496, -3032, 2269, 2240, 3162, 5992, -189, -2490, -597, -6245, 4318, 11008, 11173, -5597, -1688, -5940, 8608, -1366, 2581, -1488, -8134, 2284, 3058, 1668, 6651, 1613, 2757, -9920, 1891, -194, -1791, 1660, 6337, 3130, 3932, 6670, 4350, 3818, -3388, -5383, -1407, 6361, -404, -3263, 443, -1528, 753, 5718, -2699, -3684, 8569, 1421, 2774, -3243, 6896, 1271, 1440, 3413, 4698, -298, 8474, -2659, -1399, 3048, 195, 2726, 2550, -8355, 3575, 2369, -5484, 6041, -7932, 4980, 7213, -4253, 1810, 3836, -4930, 6700, -6735, -8000, 4080, -3637, 3729, -3878, 4144, -10729, 1740, -2794, 6364, 712, 4288, 3104, 2438, -4467, -5265, 387, 5193, 2472, -3068, 2487, -4917, 1748, 5300, 3694, -1537, 2448, -7062, -5024, -625, 2994, 6814, -7710, -7857, 5740, -977, 108, -6565, 4064, 3664, -6849, 1216, 5471, -3143, 2195, 5172, 4744, 6927, 6562, -539, 4906, -4740, 3971, 4453, -10302, 4889, 298, -2761, -2392, 688, -490, 5592, -2366, 8898, -6229, 3263, -829, -4253, -1852, 6324, 63, 7698, -5484, -4169, -8817, -2002, 5404, 1863, 3028, -1735, -7106, 2752, 4777, -3841, -5832, 8886, 7262, 4403, -5098, -4560, 2130, -5629, -1487, 360, 2410, 10385, 4748, 2223, -4041, 711, 11297, 5524, 680, -6886, 1119, 2495, -3621, -9757, 1113, -6253, 8713, -3314, 3763, -7863, 5365, -4580, 9930, 702, 5328, 1205, -1013, 852, -8262, 6151, 7404, -5634, -1933, -5116, 1663, 6300, -5503, -1076, 5468, -1748, 11444, 2950, 5321, 1819, -4327, 5505, -5948, -4616, -690, 2644, -799, 260, -4070, 354, 1793, -301, 1147, 5970, 1017, 1366, 2644, -2629, -5452, -5327, 8260, -3879, 2483, 6481, 9054, -6146, 3333, -7617, -5115, -4515, 2328, -7659, 5480, -1401, 855, -3469, -5360, 1551, 2456, 3564, -8074, 2590, 8411, -1020, 3412, -476, 849, 6025, -4370, 6391, -1668, 9595, 5227, 9486, -1441, 6831, -2765, 2886, -6341, 2564, 3976, 14410, 1226, -3615, 3337, 11938, 1665, 540, 564, 434, 3902, 2817, 557, 5091, -2381, -7499, -3936, -3140, 3646, -1165, -8321, 1127, -111, 2432, 239, 2605, 4608, -6400, 5629, -7594, 1084, 1744, -8190, 6048, -3068, 367, 1984, -4247, -366, -1251, -1484, -6973, -4530, 3732, -797, 1118, -9782, 842, -261, 5437, -3342, -2861, 4764, 2367, 2555, 4387, 690, 3510, -7740, -6552, -7077, 4609, -5854, 4857, 555, -6535, -287, -8693, -2133, -7540, 467, -1648, 5344, 2234, 4778, 4713, 5689, -565, 414, 703, -4601, -8250, -770, 4491, 760, 4565, -6008, 2813, 4517, -6065, 2128, -2152, -1124, 1831, -2903, -4917, 673, -10228, -6096, -3577, 2209, -565, -1785, -7293, -1420, 1382, -3950, -5023, -5664, -1993, -4404, 7978, -2578, -2895, -4284, 2967, 5087, -904, -1224, 163, 1421, -7280, -6047, -7069, 5009, -2155, 5125, -4456, 280, -7935, 4547, 6562, -2772, -11161, -6170, 4066, 6371, 1867, 282, -6215, -5071, -8407, -6350, 9113, 4460, 2373, -991, -5314, 5810, -6407, 4841, 6103, -1560, -86, -3588, 5275, -2727, 8064, -2114, -3659, 2376, 2281, 2103, 8195, -3741, -8565, -2509, 628, 2079, 2332, 10273, -2239, 10105, -6575, -3281, 4207, 7093, -9809, 2663, 6649, 7156, -3188, 3145, 6000, -1293, -4370, 1835, 6188, 1257, -4120, 8077, 404, 10192, -9801, -2735, 2764, -899, -7775, -2639, -3913, 231, -119, -3789, -6711, 7033, 552, 1883, 2602, -4934, 3663, -2806, -644, -7032, -3659, -1682, 5759, 6670, 8836, 3264, 13124, -369, -3196, 10013, -254, -2869, 3829, 11735, 527, 4889, 2727, 8009, 2107, -2820, -3152, -1673, 1666, -6791, 2656, -5430, 387, -1661, -5728, -2114, 436, 5708, -3496, -1490, -13181, 623, 990, -5552, 7144, -7607, 2025, 4658, -1789, 7143, 4627, -10208, -5489, -3216, 631, 2434, 417, 3356, 769, -4829, 9270, -1207, 2131, -3938, 712, -5185, 3875, -4389, 559, -1852, 4753, -6253, 3830, -9787, -2091, -1842, -6200, -1107, 2939, 4387, 732, -2304, -1658, -6695, 3275, -3647, -4502, -1244, 178, 399, 3749, 4549, 3394, -5137, -3609, 499, -4159, 811, 1494, 5019, 2353, 6859, -1935, 5826, 2658, -9830, -4781, -1540, 414, 3150, 187, -2029, -2102, -3113, 2603, -4344, -9996, -1222, 2740, -1020, -2455, 3324, -6432, -3520, -2403, -3406, 2456, 132, -310, 2785, -2112, -8842, -1955, 5233, 8861, -4728, -836, 6000, 248, 13478, 983, 7227, 1119, -373, 9682, 1747, 11675, -2400, -5697, 5371, -1030, 5216, 1383, 3517, -7418, 5067, 44, 2734, -5349, -6025, 2880, 4886, -2480, 2948, -3866, -1559, 2712, 1397, 3520, -4454, 339, 1105, -2449, -295, 2409, -2355, 183, -859, -3211, 360, 7258, -4609, -5139, -3810, -1561, -4652, 5457, -929, 634, 2305, 2403, -1636, -741, -6677, -2875, 2010, -3709, 6645, -5870, 1961, 476, -6242, -9476, -7473, -7610, -5150, 1705, 793, 4171, -995, 698, 2533, -8492, -3344, 4225, -2838, 2585, -5436, 3212, -2457, 1599, -3984, -7452, 2235, -6786, 2709, -4252, -2693, 7676, 5674, 354, -461, 7558, 4039, 1047, -720, 9387, 725, 1780, -3335, 4966, -7129, -5441, -2216, -1097, -5062, -4284, 5559, -2269, 1176, 6043, -1915, 1256, 7142, -4721, 3503, 5230, 5973, 766, -2469, -10615, 890, -2067, -1730, 3611, -1039, 258, 1104, 1128, -4843, -6396, -2773, -3697, -4978, 3987, 786, 438, 124, -616, 3512, -4733, 1374, -4428, -4059, 2330, -5380, -9077, -4455, 3956, -4765, -3153, 6980, -2528, 4598, -7421, -7120, -4700, -4233, 1564, 1335, -4042, 1116, -6293, -582, 2668, -7862, -8615, -1145, -1917, -3835, -3831, -3740, -5602, -2035, 2668, -9411, -3596, -6158, 5227, 4251, -2964, 566, -9162, -7214, 8205, -5131, 3764, 6224, -847, -13390, -6204, 3998, -4116, -1077, 4916, -1001, 4448, -9351, -3351, -137, 6141, -10625, 8066, -7572, 648, 6550, -69, -1461, 2330, -6909, 9953, -6937, -11269, -4524, -8867, 615, 3420, 4220, 3575, 9729, 6763, 1154, 4919, -5771, 8157, -7729, 1529, -2567, -2438, -7471, 5837, -10084, 2642, -8164, -11228, 0, -701, 6437, 1821, -6341, -2836, -405, -6440, -820, -159, 2527, -5968, -4474, -6663, 1639, 1641, -9108, 6396, -1952, 6230, 1034, -5284, -11099, -111, -1739, -2899, 5100, 1727, 7809, 469, 10773, 1720, 7358, -10853, 12927, -6482, 3407, -1433, 7495, -11078, -10009, -4354, 336, 1002, -3401, 3922, -4733, 175, -9170, 9050, -5406, -11480, -2529, 2920, -898, -3820, 3534, 608, 2687, -10517, 3235, 3231, 672, 2213, 10997, -4513, -1581, 10101, 1446, 2803, -2999, 3216, 3843, 1262, 3284, 1992, 2283, -983, 8560, -4573, -8643, -9745, 4400, -10608, -7529, -4138, -154, -6740, -9864, -2824, -6044, 2982, 1003, -1060, -3664, 7, 1215, -633, 1417, -8806, -4829, -3791, -5649, -2253, -2937, -3697, -8597, 7637, 2033, 61, -4833, -1734, -100, 5017, 440, -1029, -2527, 9757, -363, 1506, -4040, -1442, 5405, -316, -3086, 480, -3638, -3571, -4905, -1606, 224, 4379, -10188, -1904, 6619, -9629, 234, 6051, -1287, -6706, -2996, 2486, 1340, -6000, -4444, -1396, -2805, -5862, -8529, -7768, -5120, -15103, 13681, 3799, -5170, 2833, 2677, 234, -3175, -3420, -1891, -2905, 3682, -1650, 1663, 6270, -10469, -5373, -183, 6588, -1165, 0, 2025, -8606, -1852, -1653, -5120, -6089, -8491, -499, -5148, 4482, 2693, 2579, 649, -4780, -6457, -1239, 764, 8193, -1259, 5027, -1114, -10115, -8061, -686, 4360, -1392, -8171, 3524, 3895, -1828, 958, -11986, -3773, 354, -3852, 6941, -3657, 988, -1168, -7732, -7396, -9859, -5239, -5679, -1319, -2189, 957, 427, 2067, -6328, -3611, -562, -701, -5451, -3173, 3792, 2282, 7828, -4428, 2821, -5641, -6909, -3931, 7061, 3967, -4936, -2319, -6054, 2883, 5618, -7, 7959, 865, 2064, 3296, 1170, -353, -2436, -4571, -387, -7486, -8111, -305, 2880, 1788, -2839, -2111, 4551, -6166, 5438, -1917, 2586, -6763, 6212, -5449, -8759, -3659, -295, -13141, -8419, 1023, -7376, -9322, 751, -10459, -3718, 4194, -7360, -4016, -5463, -443, -1581, 10683, -3695, -833, 2861, -705, -5953, 4023, 155, -3551, 530, -4916, -7665, -4864, 4998, 1525, -4170, -11199, -8159, -15738, -10142, -5309, 2070, -3469, -10640, -5050, -2595, 13572, -6390, -57, 1470, -3037, -3889, 1736, -3197, 4599, -1815, 4401, -1042, -3758, -997, -4410, -949, 1601, -1770, 4200, 6029, 2285, -2500, 4020, 5493, -7602, -13945, 2594, -1551, 5794, -1459, 4948, -4681, -949, 1564, 2708, 7917, 1411, -9388, -4631, 7700, 2593, -8093, -5854, -4751, -2441, 5323, 4165, -7716, 7741, 4099, 9853, -6202, -4522, -3386, -2837, 1158, -5144, -1276, -5585, -2263, -2934, -7605, -34, -1975, 4399, -6219, 897, 3295, 2569, 1584, -2162, -4958, -8574, 8595, -8855, 6849, -4893, -4087, 2520, -2646, -1662, -5604, 2114, -5732, -4753, 2679, -3129, 7411, -1166, -11531, -9118, -1783, 8297, -2145, -6203, 3644, 3766, -5494, -3849, -5065, -2030, -1072, 10792, -5260, 5978, 3563, 2035, -604, 6633, 6776, -5453, 5014, -2349, 952, 2832, -5415, 10829, 6079, -3400, 5674, 1535, 5943, -3025, -4752, 2431, 9305, -6771, -4790, -5618, -71, 1993, -2658, -1243, 4040, -876, -1217, -5654, 5429, 2321, -9099, -3174, 6797, 4559, -2242, -6389, 5673, -5537, 7609, -986, -2734, 4208, 7598, 5225, 545, -26, -4618, 1997, 6279, -2494, -2360, -8836, -7490, 10232, -5679, 3509, 474, -5876, -4459, 7257, -4752, 5818, -2786, 5603, 5213, -1122, -7042, 5990, -3534, 4853, 5260, -704, -1330, -4319, -5160, 1126, 2795, -4369, 3675, -1500, -1194, 5429, 15236, 3332, -2917, -4803, 287, -792, 7154, -5998, 3396, 4829, 3018, 2211, 4898, -3626, 2883, 7054, 1034, -2611, 6480, 7441, -1229, 1585, -3649, -3679, -3411, -9416, -2620, 2779, -1662, -4809, -6792, -1238, -8178, -1825, -1509, 5498, -4203, -4935, 6320, 977, -764, -2371, -1103, 4877, -492, 2086, -4390, -173, -1294, 1525, 6201, -5863, -5923, 4079, 1540, 10645, 1992, 244, 2191, -5630, 9228, 586, -6180, 4883, -4172, 7535, 3580, -3353, -626, -9152, -2779, 9959, -2180, -6988, -995, -5376, -1614, -4431, 5725, 1471, -999, -4165, 2586, -4745, -3376, -6045, 9459, -7515, -3565, 3133, 5672, -1890, -669, -7777, 500, 6347, 5166, 828, 4935, 2389, -595, 3826, -1291, 384, 5825, -1143, 5826, -1708, -7388, -2064, 948, 1982, 8131, -1015, 1240, -8419, -3015, 2496, 4317, 6325, 7296, 2152, 1590, -1139, 996, -4083, 4294, -6273, -1628, 1525, -6907, -4287, -674, -8197, 351, -4223, -1905, 1306, -2274, 6457, 1978, 2198, -3507, -8452, 2190, -6956, -3048, 4237, 6562, -1229, 4813, 643, 763, 7260, 2783, 1186, -155, 380, 6659, 686, 8087, -1899, -4295, -15038, 732, 1671, 4361, 3689, 7678, -4859, -777, -2835, -2289, -229, -7739, 6859, -4907, 6645, 3726, -4843, 2973, -2740, 719, -2001, -4613, -5173, -5950, -2967, 3454, -4058, -10261, -3898, 7014, 5155, -6481, -7116, 2620, 2216, -1369, -406, 6977, -1192, -839, -4238, 5124, 7871, 4400, -5206, 8396, -4444, 3497, -3194, -2193, -986, -2287, 6674, 6598, 358, 2419, 5165, -5397, 361, 8803, 623, 6051, -7050, 1156, -869, -1897, 2499, 5418, -8109, -1522, -2292, -2676, 1684, 4776, -515, 2109, 2074, -6130, 5886, 5588, -1774, -6053, -7507, 1821, -1311, 1663, -7904, -1291, -11309, 413, -5629, 8357, 7475, 7734, -3225, 5109, 4113, -2626, 9150, 6820, -124, 3355, 1033, 298, 1047, 4286, -5130, 1647, 6866, 1543, 5974, 5460, 1502, 5301, 1290, 6917, 6866, -4572, -3429, -1356, 5822, -3464, 2232, 5680, 9411, 7495, -1636, -3826, 3267, 2312, -4725, 10343, 719, 506, -3612, 6915, -917, -4150, 6443, -2751, 307, 11527, 8334, 2529, -8786, 3129, 865, -3273, -5491, 2076, 4817, -2300, -3509, 5571, 438, 6205, -2665, 2282, -3359, -2879, 4922, 1121, 1688, 4957, -259, -2057, 1100, 2751, 4689, -1432, -2360, 6551, 4826, 381, -3202, -348, 2114, -2450, 6115, -6562, 3849, 209, 1009, -1329, -1597, 3557, 2179, 6665, -5333, -2207, 10307, -5754, 11670, 4372, 3966, -7956, 421, -4117, -28, 5413, 72, -2336, 5012, -745, 253, 8265, -802, 1873, 4575, -777, -1825, 784, 6582, 625, 8602, -2627, -5248, -2882, -2056, 1484, 5633, 2318, -468, 503, -3447, 5440, 1506, 1403, -2362, -5490, -9283, 7664, -7127, -4354, -6470, 1611, 4110, 5821, -2294, -3741, -463, -860, -7354, 1494, 6568, 6730, 1873, -8793, -7038, -6656, 4804, -7218, -7824, -3114, 5941, -4314, 20, 9570, 4858, -1254, 5030, 851, -331, -2590, 2350, -336, 2088, 3324, -880, -2405, 2971, 6456, 5773, 5756, 2492, 257, 3558, 1216, 11127, 8106, -7163, 6154, -749, 3357, 1763, -3104, 10924, 1137, 2550, -799, -3089, -3284, 1168, 8037, 5138, -258, -979, -2881, -5957, -4146, 2036, 3217, 5841, 2085, -771, 2404, 3835, -1358, 1143, -1206, -3443, -300, -6257, 5225, 2232, 5078, 4825, -2770, 3894, 147, -5674, -7105, -3181, -4048, 3010, -2913, -624, 4984, 3135, -5364, 1397, 3602, -6096, 784, 5214, 2148, 5521, -4819, -3235, 1996, -7096, -1311, 4192, 2825, 6109, -3078, 8494, -1664, 1036, -3280, 3454, -852, -3453, 5844, 3802, 799, 3187, -4469, 1708, 2854, -5795, 171, -351, -5553, 3946, 2320, -2711, 5967, 5324, 1098, -8960, 2859, 4969, 1203, 1336, 3789, -4366, 5161, 8654, -8465, -2628, -8500, -1893, 993, -4353, 8105, 2438, -4881, -4016, 2489, 3676, -2283, -816, -4744, 834, 7474, 1942, 7441, 4851, 831, -2132, 265, -997, 8198, -2272, 9982, -4715, -1203, 7569, 2523, 3667, 6040, 741, 2052, 4967, -6066, -2877, -4203, 12199, 5306, 5931, -5916, 1785, 4582, 3622, -1798, -4490, 3006, 5590, -7502, -268, 2664, 2041, 3672, 2482, 2977, 1125, -1177, 927, -8872, 751, 2438, -6005, 5395, 4581, 5867, -4958, -2030, -5900, -808, 5970, 106, -4437, 5910, 177, -7188, 199, -1090, -145, 7642, -1413, -7729, -2594, -200, 2107, 472, 4936, -1726, -790, -5137, -2276, 3585, 1908, 4384, 6487, 4340, 3584, -443, -2854, 166, 9445, -1841, -6576, 3701, 5289, 6576, 130, 4979, -7856, 3961, -4882, -1331, 8414, -4646, 4546, 5082, -6475, -5644, 646, 8563, 5368, 8306, -3442, -4114, 25, -4493, 4152, -2380, 1879, 2087, 886, -5302, 2336, -4533, 6214, 5925, -10826, 1310, -1967, -599, -3999, -2191, -8899, 3887, -1709, 8314, 2509, 576, 149, 5458, 4814, -6551, 5871, -5270, 10012, 5434, -3998, -7175, 4067, -1540, 3914, 323, -7738, 2669, -2123, 1779, -3548, 7701, -1123, -8434, 4816, 1612, -5780, -1883, 1368, -6987, 260, 3716, -227, 1995, -7109, 4182, 7030, 7763, -6820, 1825, 4389, 3903, 3561, -2364, -8724, -2231, -5189, -2834, 2930, -3246, 3927, 1492, -2177, -5450, -123, 716, 2450, -2010, -4332, 2116, 5996, -3527, 1432, -186, -2150, -4744, -308, -2135, -2793, -8072, -1337, -2184, 3135, 2164, -1603, -6, 3657, 4082, -5764, -6092, -2454, -4912, 499, -1840, -1344, -527, 4487, -6383, -2045, 51, 4376, -7393, 590, 772, -1118, -288, 2846, -4491, 2082, -879, -525, -5349, -3891, 2335, 1123, -1591, -6450, -1013, 9347, -23, -2380, -3803, 8867, 3276, 432, -1768, 5340, -901, -4978, -2144, 6168, 9070, 5817, -585, -487, 1376, -5143, -5122, 4045, 735, 7882, 2248, 2306, -4268, 2712, -2333, -2169, -3090, -2591, -1958, -4011, -5186, -4106, 1212, 7424, 6480, 6408, 1594, 1567, -6581, -3069, 5837, 4787, 1173, 5319, -2609, 3373, -377, 19, 282, -4142, -5793, -8325, -703, -15506, -2054, -3630, 5930, 4055, -5646, 4114, 7549, -9421, -895, -2560, -638, 2560, 5325, -10005, 3663, -2992, 607, -7215, 149, -3324, -407, -7391, -10926, -1581, 6033, 1998, -192, -10754, 6183, -6819, -7446, 3551, -4530, -5391, -2835, -1000, -4658, 631, 7740, 4756, 165, -4582, 2259, -6531, -4960, -5174, -4938, -9181, -1073, -11403, -16554, 3465, -5806, 2601, 9419, 2589, 313, -1371, -5702, 3430, -3183, -7371, 7354, -8105, 1425, -5746, -3300, -1545, -2414, -1093, 100, 1604, -1160, -6131, 3950, -8343, -5374, -14282, 2646, -9495, -75, -2490, 2000, 2134, -6865, 1445, -8411, 3915, -1986, 1758, 1478, 3369, -6128, -3736, 2187, -3874, -7374, 1921, 2554, -9664, -1950, -8201, -3161, -364, -9666, -9414, 5832, -534, -500, 1107, 752, -3797, 5549, -5852, 6763, -7644, 1300, 8148, -4585, 4590, -4065, -2738, -3045, -4228, 11829, -1943, -4185, -4822, -6951, 2112, 8725, -5612, -4185, 2841, 4905, 2783, -6085, -152, -2686, -9509, 3187, 5467, -1704, -703, 5680, -63, 4141, -2276, 6997, 705, 4817, 1533, 5823, 9002, 2686, -7874, 4274, -2157, 2438, 1537, -269, -8232, -5904, 332, 7020, 10272, -6106, 5788, 8262, 270, -1716, 3503, 7416, -1790, 5115, -8892, 3596, -11481, 3595, 1965, 4929, -2496, 7652, 8029, 4168, -1753, -2241, -6617, -6089, 5178, 296, -1095, -50, -86, -9462, 3431, -991, -4947, 351, 4880, -2937, 7180, -3423, -8081, 2266, -1995, 1587, 1407, -2499, 251, 4082, 8707, 4758, 5454, 4818, 13601, 5457, 11644, -2736, -5240, -7960, -4521, -5201, 5676, 11949, 10486, 3821, -11187, 9472, -455, -5474, -6608, 504, 1325, -4658, 1585, 6043, 6125, -5717, -9557, -6348, 2097, -3830, 4199, -1445, 3561, -6415, -3802, 2284, -3296, -4632, 677, 2781, -5026, 220, -5299, 8196, 6657, 1821, -4196, 552, -5427, -906, 2776, 7632, -1029, 4765, 575, -7674, 7638, -2590, -2645, -905, 4974, 60, 1569, 3982, -8619, 1847, 6946, -2030, 2833, 4146, -276, -4635, -3934, 3892, 953, 346, 1180, -6916, 2961, 1640, 2625, -8590, 4536, -3428, 2250, -3996, 8124, -3799, -1602, -2772, 3344, 8264, -557, -2656, 6141, 5747, 893, 1673, 4361, 11, -3508, 9144, 4691, -7370, 13313, 2339, 1130, -412, -5, 998, 5057, -1605, 3949, -3654, 3521, -4449, 18901, -4560, 9074, -2609, 66, -926, 4311, -9271, -1154, 3760, 6866, -132, 1984, -3686, -3745, 995, -545, 2029, 2274, -1905, 5534, 1128, 2485, -1943, -489, 4559, 12686, -3325, -1903, 9635, -834, 3668, -1383, -7303, 7433, 5922, -3672, 2310, -2257, 2549, 280, -4033, 5840, 4673, -5209, -3827, -3967, 2439, -419, -3083, 12226, -9909, 8784, 1327, -580, 900, -2639, -5142, 8340, -2800, -4386, 7485, -5553, -3251, 3177, 6315, -5337, 414, -7845, -8984, -4900, 5924, 10778, 826, 2072, 713, -1654, 2860, -214, -2860, 8224, -1127, -584, 5283, -2018, 1210, 3308, -3596, -401, -433, -2181, 7645, 8314, 6899, 6692, -3350, 3610, 1356, -2076, 4963, 8297, 6981, -4224, 3637, -5, -2428, 5071, 20, 6780, -3011, -3755, 2340, -575, -2907, 1625, 2339, -6521, 4976, 128, 2728, -1845, 67, -1343, -3251, -271, -1997, 3777, -1814, -4326, 9378, -5668, 6279, -5869, -254, 223, -5878, -2216, 4542, -5650, 1015, -1467, 4685, 4343, 2801, 2063, -2698, 6580, 3477, -3064, 5833, -7090, 5400, 1344, 2204, -4593, -539, -779, -3648, 7459, 3255, 4071, -4019, 229, -6298, -1172, 737, -2703, -868, 29, -4424, -990, 1055, -8444, 2188, -3852, 3906, -4873, 7098, -1852, 2732, 3410, -7183, -4309, -7676, 5573, 6524, 2064, 11619, 7120, 758, 767, -11634, -4284, -3049, -7905, 3987, -29, -7143, -911, -4922, -7342, -5326, -6006, 538, -7584, 5182, 3353, 5803, 7089, 2503, -6390, 5961, -5312, -1994, -3875, -1511, -10070, 1723, -4560, -1852, -608, 4929, 8033, 3075, 8903, -5806, 1060, 2351, 1607, -8657, 2488, 11111, -580, 2914, 3692, -613, 6516, 9048, 4670, -11630, -6361, 1409, 538, -6809, -3201, -395, 6898, -3573, 1985, -3815, 2562, -6393, 3336, 2616, -5126, -3422, 310, 610, 5773, -5164, -4331, -3299, 4125, 3524, 4714, 5643, 1869, -2644, 398, -6053, 13, 977, 7260, 3619, 7129, 1205, 1937, 4259, 6595, -1914, -2249, -5482, -11328, -4839, -2154, 2794, 1072, 5138, 5382, 1271, 695, -2212, -2580, 12329, -8285, -8764, 1992, 209, -1835, 4820, 3723, -7188, 5228, 6140, 263, -737, 3287, 2383, 1694, -407, -11795, -9422, -7217, 1733, -7601, -4016, 9393, 303, -13367, -6931, -3169, -3856, -6773, 5332, -691, 4080, -7270, -3999, 1647, 8171, -5663, -3725, -2960, 5236, 2199, 2899, 5921, 5578, -2240, 4534, -5767, -5208, -9638, -11127, 4497, -1264, -1025, 3963, -2955, 5482, 4507, -2362, 5188, -2839, 168, -3557, -2575, 11735, -648, 5853, -9876, -977, 10102, 8227, 4212, 951, 4951, 11547, -6383, 1554, -3448, -4482, 746, -5801, 1311, 254, 11223, -1360, -5886, -1124, -4299, 9952, -1669, -2833, 256, -3340, -1731, 2253, -4340, -6536, -1790, 7462, 948, 5492, 5626, 885, 3490, -5955, 8583, -10921, 7710, 226, 5262, -5429, -1290, 4499, -697, -5211, 9637, -914, -14678, 1478, -3861, -7539, -6103, -3733, -4408, 6787, -1675, -9309, 9981, 6101, 118, -5385, -6367, 1267, -8724, 5036, -2406, -3134, 3802, 3050, -8261, 3042, -4263, -652, -5787, -9610, -3981, -8848, -3346, -1182, 2325, 1060, 4953, -3623, -5831, -8976, -1151, -6110, -4125, 3446, -3403, 6597, -8838, -3383, 6076, -4772, -12103, 7215, -9957, -4118, 3348, -10108, -6703, 5009, -6792, 7956, -9348, -2659, -7954, -3109, -2469, 6807, 8698, 425, 6015, 5331, -5955, 5195, 3779, 6960, -72, 3262, -1776, 4813, -3930, 1970, -10035, 6675, 6288, 8447, 8980, 4678, -3530, 4888, -11185, 1260, 3604, -4546, -2776, 7174, -5183, -11313, 5797, -8139, -6642, -11451, -5690, 7519, 375, -2174, -9741, -28, -963, -14392, -2711, 2276, -5625, 5776, 474, 1375, 3632, 2264, -2262, -2092, 240, -7402, 6999, 5434, 4996, -11173, -1804, -5102, -1894, 3540, -529, 4221, -10311, -6461, -7317, 884, -8928, -1679, -4930, 3051, 1192, 307, 1613, 3565, -1268, -2308, -4478, -2149, 4326, -2658, 4156, 974, 4203, 9773, -2335, -9455, 3310, -6, -1329, -4965, -1111, 3315, -5468, -3873, -8758, -3128, -4343, 4991, -2023, -1618, 245, -4308, -4540, 2252, 4414, 1983, -6962, 4766, 2757, -9750, 1517, -5163, 307, 1727, -5334, -7142, -2690, 2921, -5544, 8852, -3034, 2406, 9168, 6933, -4759, -2109, 4227, -2551, -4752, -563, -2358, -257, -1809, -281, 4581, 4753, 890, 4351, 2580, 4090, -1484, 3680, 741, -4722, 1136, 553, 5975, 2929, -3622, 844, 9712, 99, -746, -285, -3020, -2880, -2674, -360, -76, -8316, -2460, 7240, -2654, 4008, -569, -2449, 230, -3349, -3314, -907, -2630, -46, 2613, 4590, -5658, -684, -6344, -3565, -2192, -7558, -4810, -6078, -183, 5766, 6742, 519, -10252, 9552, -6955, -8182, -8564, 298, 5382, 3154, 4202, -7144, -6208, 5315, -6991, -5698, -1058, -4501, 3623, 6391, -6720, -6202, -1178, -5597, -2241, 6835, -2371, 5453, -5892, -2880, 6353, -1982, -3819, -7661, 1568, 1319, 2683, -1741, -2621, 4730, 866, -5337, 246, -4412, 715, 6071, 3104, -3093, 4929, 9728, -6006, -3321, -9169, 3685, 8853, 8062, 3078, 5505, 4143, -4024, -1002, 4133, -3801, 1623, -10969, -582, 271, -1499, 7474, 3432, 484, 2038, -2537, 6313, -332, -6868, -6954, 3198, -909, -1769, 3690, 589, -238, -4132, 5895, 1823, -6223, -2836, 6888, -8028, 1478, 7461, 1496, -1043, 5663, -2272, 2543, -933, 3420, -990, 4407, 8137, -3580, -2732, -1118, -2105, -3935, 4519, -4722, -6070, 112, -116, 227, -2594, 5116, 7685, 2562, -2937, -10932, 3383, -1117, 4279, 7141, -3691, 1896, 4134, -5583, 4007, 5613, 4813, -6109, -6337, 3813, -6675, 3975, 2548, -5304, 3638, 4788, -194, 4098, -1386, 4346, 1336, -2272, -2890, 8268, 5172, -5553, -2172, -1096, -5659, -1180, 7599, -353, -2192, -5537, -3984, -4071, 3672, 994, -2352, -7261, 2758, -354, 162, 4515, -557, -3610, -88, 6531, -5675, 4094, -288, -3722, -901, -6185, -3734, -4619, 3277, -4679, -1656, -4418, 4434, -5036, -1935, -6128, -4028, -1765, 975, -1333, 2464, 2478, 3120, -6918, -4898, 2391, 1090, 3874, -3782, 3151, -3509, 1782, -1465, -2122, 2448, -1969, 9470, 1814, -7698, -4560, -4332, 1175, -6452, -7116, -6357, -3869, 5166, -898, -5642, 1446, -2750, -4742, -288, -1041, 4845, -4261, 41, -3264, -1580, 5446, 742, -670, -7909, 577, 2308, -4572, 4970, 1119, -5855, -4428, 8176, -416, 1671, 5221, -6899, 693, -1842, 4722, -3174, 1724, 3250, -8468, 5406, -341, 1532, 297, 4137, -4007, 4569, -4377, 6854, 1851, -2949, 2575, 8288, 899, 4397, -3527, -7085, -896, 1830, -2806, 3846, 3403, -2501, 7521, -1094, 4015, -6702, -2496, -3025, -2244, 5332, -878, -3468, 3815, -2363, -4394, -4289, 3731, 4046, -2044, -10692, 1213, -1777, 2908, -9573, 6741, 2856, 462, -5522, 2871, -1189, -2735, 6548, -2037, -3534, -6272, -1967, -5223, 5234, 5239, 6882, 1640, 4843, -1435, -4962, -1844, -3211, 565, -5064, -3158, 7680, 8878, -919, -2926, 3612, -6324, 2129, -6648, -3264, 2992, -7465, -1990, -6019, 1996, 4213, 4943, -1159, 4659, 12900, -7078, 8663, 1168, -2302, -2120, -1794, 4840, -4956, 3294, -1589, 1650, 1428, 5700, 3785, -2772, 7421, -3881, 3465, 2661, -1793, -816, -2716, -3092, -4643, 5906, -582, 9191, 63, -4444, -5036, 6661, -1314, -7, -3310, -4602, 7140, -6287, 5009, 2306, -2386, -3953, -2691, -6436, -6897, 969, -3074, 5116, -2509, 6711, -4127, 3272, -1953, 5818, -3960, 1144, -4714, 1228, -95, -70, 3529, 2199, 3032, 5395, 88, -7284, 6344, 2538, 1565, -6838, -1271, -5349, 1740, 945, -2828, -1840, -2751, 5127, 6557, 334, 4994, 8343, -240, 2490, -1068, -1157, 3030, -1586, 522, 9748, -2823, 4806, 5588, 5893, -1904, 2638, 5233, -3447, 8121, -6182, -2084, 925, 4976, 1555, 6121, -4142, -476, -2298, -50, 1590, -6045, 11732, -2156, -4148, 2660, 7345, -5743, -642, 1734, -1510, 217, 5759, -4029, 3088, -2043, 3569, -4903, 3327, -12137, 6533, -5655, 9766, -3226, -3845, 2647, 2765, 1925, -10917, -2793, 3242, -107, 7374, 5, 4789, 14765, 993, 8507, -693, -985, 11195, -3404, 4935, 526, 389, 11322, 6181, 3416, 411, 4682, 9909, 2634, 2072, 6659, 3491, -4744, -4170, 2083, 3603, -4405, 2794, 6641, 2822, 7644, 591, -2376, -4932, 10689, 13971, 6355, 5587, -5934, 2275, -1995, 7550, -2529, 468, 4021, -3410, -2518, -2054, 737, 3963, 2888, 5854, 260, -7428, 6138, -1842, 3881, 2517, 4222, 5638, -5155, -3735, -1930, -3160, -1752, -5250, 3649, -7193, -972, 4208, -1859, -4342, -3297, 11431, 9579, 3259, 3265, 6231, -5886, -3162, -3682, -293, 5574, -903, -3028, -4700, 2279, 4876, 1121, 6575, 1895, 1801, -2022, -3052, 3123, -606, 2821, 4911, 8730, -3774, 6801, -5769, -2326, -4558, 5807, 416, 5502, 5189, -4999, 7111, -2064, -355, 905, 7154, -13705, 738, 2558, -4522, -3657, 1156, -3749, -160, -4064, 596, -5322, 5657, -4929, -3012, -2482, -1598, 3399, -1707, -242, -1358, -3480, 7254, 6779, 1800, 8981, -3548, -5876, -4902, 3015, 4374, 14436, 307, 4643, 5510, 2732, 7652, 3762, -1410, 2874, 4609, -419, 9481, 3771, -2287, -789, 265, -5511, -908, 4874, 6881, 8582, 17, 3552, -1047, 4853, -3431, -4304, -2972, -402, 5219, 7006, -977, 1737, -235, -4628, -871, 4646, 3180, -3922, 11435, 2522, 2381, 7226, -1678, -529, 4845, -917, 5455, -1351, 2166, -646, -3553, -322, -7314, -4687, 2734, -2004, 850, 6755, -14104, 314, 4322, -10097, 45, 5730, -4365, -646, 6772, -7269, 8506, -2473, -10312, 5171, 5013, -7389, 13939, 9154, 9672, 6509, -574, 10658, -9086, -7630, -1086, -7388, -429, -194, -7072, -1787, 6531, -6078, -5380, -2390, 8801, 144, 7165, 2413, -385, 8571, -4253, 3168, -3758, -7383, 744, -7731, 2268, -3002, -2487, -6925, -11816, -6650, 4096, 693, -1635, -6704, 4171, -489, 4686, 1865, 2293, 4590, -4606, 6638, -3242, -2360, 5427, -1762, 1722, -7531, -2829, 810, -5361, -7992, -12483, 9118, 852, 3510, -912, 4181, 5281, 10232, 2041, -4666, 4362, 2084, -2194, 1033, -360, -7990, 1223, 218, 731, -381, -3631, -3754, -3689, -4951, -5657, -1566, 4958, -1198, -1458, -2676, 1791, 7659, 6234, -4458, 4351, -1994, 9789, -646, 1582, 2721, -916, 464, 5815, 1067, -397, -9799, -2909, 2402, 2841, 3105, -301, 9237, 7153, 9560, 6090, -783, 2948, 1907, 7299, -3209, 5315, -5167, -772, 2933, 4137, -1119, -2387, -6687, 3600, -4860, 5195, -2849, 1091, 7031, -5670, -6916, 8531, -3666, 900, -186, 1115, -3080, -7265, -2442, -2826, -4602, -2442, 7979, 3576, 2102, 11646, -300, 6190, 1673, 1866, 301, 1256, -3706, 1088, 4524, 1461, 1288, 4899, -438, -3559, 3417, -1005, 4333, 1048, 6409, -4851, -2585, 2148, -7795, 2006, 3731, 7715, -1320, 11923, 629, -1761, 1922, 2493, -6187, 6320, -4998, -2348, -822, -4287, -974, -3517, 4963, 794, 269, 6881, 3889, 7393, -672, -9481, -5400, 1228, -236, 16521, 738, -4560, -6605, -605, -2579, 2031, 670, -6864, 5450, -3832, -5112, 10804, 2876, -7451, -1150, -717, -4324, -5404, 2249, 5037, -8305, -648, 9064, -70, -3593, 8796, -1777, 1015, 6568, -7620, -3595, -1405, -2344, -1115, -3893, -3153, -2913, 1212, -5861, -1337, 1997, -3529, -1952, 551, 795, 65, -7266, 3649, -8500, -4508, -4929, 4490, -7561, 2223, -1578, 2415, -1715, -8239, -1631, 540, -2679, -4074, 893, 6747, 6661, -6196, 7542, -8465, -4347, -763, 4042, -3746, -223, 4726, -5106, -1578, 4424, -4100, -2702, -2484, 1730, 4055, -3540, 2257, -1472, -3793, 1191, -2258, -3245, 7632, -99, -11523, 7770, 1026, -1437, -7411, -4755, -2111, -2643, 2211, 5366, -4163, -112, -12226, -8889, -1754, -5412, 488, 3614, -1409, 4836, 4766, 7475, -8458, 8413, -1652, 3418, 2473, -5213, 4856, 562, -2479, 1538, -2731, 525, -2044, -2841, -5285, -1379, -2528, -12088, -2366, 4487, -2203, 4950, -3368, -2404, -3146, -3848, -1676, 3294, -1350, -2005, -129, -3214, -2579, 2389, -3171, 5213, -8261, -2649, 3031, -1248, 6922, -2246, -6337, -3346, -6636, -4882, 19, 262, 3295, -4807, 3563, -7984, -5065, -823, -8749, 4259, 3439, 519, -7275, 3619, -7475, 3745, -4860, 8800, -7925, -9261, 4419, 7406, -2991, 6287, -1693, -1782, -666, -3321, -1422, -2373, -2876, 8541, 4670, 4070, 2742, -4184, 2569, 1599, 5444, 4912, 5174, -4679, 4208, -5577, -5577, -1760, -8374, 645, 10983, 1521, -3195, 4245, 2647, 896, 4968, 2027, 521, 3748, 4668, -3079, -4777, 1276, 10576, -11536, -3075, -2211, -6330, 3135, -5205, 1314, 79, -8132, -14788, -8103, -6487, 5496, 595, 2681, 4068, 8958, -2375, -7457, -1093, -3666, 3898, -2545, 1435, -6237, -2141, -8102, -5486, 7599, -8036, 1917, -4783, 3517, -968, 3741, 123, -7016, -4480, -2976, -3469, -1615, -7674, 6044, 2740, 7524, -6470, -6408, -1991, 966, -2369, -6330, 1694, -117, 8566, 933, -771, -4269, -3145, 5338, -9208, -4278, -14687, -6636, -4637, -3104, 1553, -9007, -589, -1150, -11720, 486, -692, -8925, 5699, -1661, 3165, -64, 1090, -4557, -662, 1054, -1647, -2725, -4329, -10202, -8511, 4480, -1568, -691, -10805, 6524, 707, -7274, 2326, -1258, 4489, -2982, -2371, 1715, 1456, 5476, 5926, -7643, 822, 1849, -8192, 7720, 931, -8084, -4399, 2198, -5768, -13747, -3187, 15, -2035, 5019, -1238, -559, -4639, 7473, -1876, -2839, -2229, -792, 250, -4141, -348, -2090, -4939, 2229, -5827, -1966, 1757, 6869, -2551, -2542, -713, -5768, -15386, -2102, 5225, -3238, 9216, -4334, 1678, -1248, -1922, -6487, 8147, -4953, -5156, 3836, 837, -9288, -5261, -1709, 70, 6733, -4981, -5133, -3854, -2267, -3468, 12902, -3107, 2076, -6133, 3600, -1693, -6610, -6036, 4909, 2925, 3109, -918, -1900, -863, 5214, 68, 3553, 6342, -2096, 7536, -9232, -2918, -2402, -6759, 4735, 5537, -2562, 5014, 2876, 4004, 919, -3627, 913, 6200, 2089, -4434, 4250, 5535, -6558, 7866, 2967, -762, 6270, 6586, -911, 4229, -4108, -195, 72, 2361, 2242, -6447, 2212, 10541, 974, -3228, 2856, -3910, 1348, 1994, -742, -5702, 65, -2780, -2580, -2281, 1702, 783, -5234, 184, -4495, 2797, -5891, -2294, 1776, 7047, 3563, 2325, 3229, -4892, -4322, 8010, -3376, 3291, 3470, -5643, 4291, -8181, 3355, -2470, 3931, -7408, 993, -7420, -8991, -4540, -6057, 752, 1838, -3727, -2322, 4869, -233, 3473, -5585, -3745, -4650, -6195, -2981, -2366, -2280, 2871, 82, 2935, 10336, -4231, -966, -8489, -2382, 397, -7652, 2244, -735, -2308, -1211, 13442, 1888, 1324, 9544, 5120, 11922, 3543, 2084, 9091, -3378, -12935, 2249, -854, 1128, 4431, -289, 3646, 5339, -2339, 4466, 622, -1769, 1221, 3969, 6651, -3523, -1264, -3543, 277, -1486, -5826, -3406, -163, -2534, 8479, -3292, 375, -6489, -6351, 1099, -1640, -4232, -7808, 4163, -1969, -1794, -4993, 1555, -5329, 1125, -4850, -2157, 2754, 5521, -4937, -405, -2650, 11722, -3420, -4481, -6301, -271, -2024, 192, 679, 5654, 1759, 1675, 2706, 4599, -4077, 4300, 646, 3453, -3355, 9997, -3217, 801, 628, 2994, -278, 10571, 3514, -877, 4621, 6071, -1448, -3631, 7920, -1955, 5267, -1584, -4480, -6367, 7835, 7543, 2724, 3714, -9008, 7182, -2056, -3726, -4416, -4409, -1140, 70, -2143, 4273, 5040, 5576, -4080, 10266, 618, 7501, -3962, 2074, -1302, -5088, 4021, 1973, 4442, -4138, -6640, 6614, -7598, 5562, -1499, -4805, -6229, 3182, 2551, -4565, -971, 7395, 399, 1896, -2308, 1640, 5810, -1447, 693, 3911, -5062, 3406, -1760, -989, 7668, -1492, 5942, -272, -4760, -6919, -4729, 1688, -268, -1840, -8556, -208, 4812, 365, 746, 1977, -3519, -3082, -2739, 5820, -3052, -103, -2055, -1798, 4789, 1372, 1519, 2686, -8560, -5334, 667, 148, -6864, -10023, -6310, 7481, 1097, 476, -603, -2958, 3647, -3510, 76, -3492, -666, -2719, -4717, -6575, 204, -2860, -9321, -385, -2962, -2, -1154, -2483, 1487, -4558, -9781, 3285, 1750, 7414, -3681, 2595, -5915, 2703, 2829, -8707, 6466, -3757, -1199, -5752, -9877, 5995, -4745, 7597, -67, -1499, 321, -8206, 6968, -7125, 1171, 7413, 1731, 8320, 747, -1017, -6406, 5383, -270, 2269, -2858, 2698, -3510, -2255, -1420, 439, -4822, 2020, -7441, 4563, -4043, -1124, -9195, -2308, 4517, 3320, -93, 4610, -1989, -476, 1329, 6779, -141, -8206, -4782, -2052, 4421, -3795, -8469, -3594, -2318, -4457, 8081, 1074, 4419, 5327, -4868, -3795, -7855, -4516, 729, 7016, -4091, -6330, 6363, -868, 8947, -1340, -4796, -4702, 4141, 2608, -416, -5615, 1872, -1308, -3969, 908, 2329, -7304, -12146, -6904, 3351, 9033, 5814, -11530, 6075, -3058, 6231, 555, -1342, -10800, -6447, -5951, -263, -3620, -9397, 523, 3780, 5490, 4919, -6435, -369, 2416, 634, -7051, -3634, -3640, 2952, -213, -6045, 3373, -3143, -2691, 103, -7103, 7935, 7706, -1480, -674, 1704, -2930, 421, -4132, 2256, 8865, 6683, 5645, 18, 641, 9786, 2019, -281, 7856, -1176, -1410, 8593, -920, -1435, -3385, 7194, -10030, 3845, 4019, 6543, -487, -5618, -237, -10013, -4602, -2983, -2132, -2275, 3170, -2773, -2400, -2230, -4510, -1118, 5122, 6847, -761, -3137, 1657, -7912, -7614, 7222, -938, 6461, 2317, 4540, 2050, -7839, 4228, -5335, -1864, -1968, -6082, 2876, -2767, -4090, -4530, 5449, 473, -4236, 9537, -1039, -7588, 6160, 1719, -1349, 1057, -3813, -8330, -6225, 4201, -5848, 3129, -6496, -3582, -2450, 176, -3280, 4843, -2930, -6169, -13722, 685, 7308, -3169, -6054, 5089, -11079, -4911, 967, 1422, -166, -1549, -11562, 5136, 6372, -4839, -76, 2832, 1554, 6365, 267, -2187, -10246, 3957, 563, -4041, -5950, -795, 1781, -4238, -5573, -3887, -13, -5634, -1228, 4095, 940, 4638, -5145, -218, 7712, -2351, 2686, -5387, 3433, -1391, 962, -6057, -3198, 1806, -4760, 3983, -5733, 7041, 5007, -8152, -917, -5486, -228, 2809, -7448, 6375, 1429, 9414, -9165, 3914, 1273, -4703, 323, -3225, 2369, -4382, 5260, 232, -1843, 4236, 5971, 2710, 1352, -2837, 5333, 6339, 2180, 3313, -1307, -2002, 3292, -3714, -7102, -8850, -7388, -5549, 1734, -5569, 763, 9566, -7610, 1123, 0, 578, -5701, 7994, 2921, -8606, 127, 5410, 6983, 4774, -3662, 3669, 641, -6629, -397, -318, -2484, 4250, 6026, 6676, -7979, 2991, 5437, 4582, 1342, 6817, 3718, 3680, 5707, 3092, 6106, 178, 5925, -3374, 5045, 5832, -2477, -834, -3426, 10593, 654, 3822, 6693, -439, 2344, 4965, -4721, 691, 3597, -2069, 2667, -1167, 1044, 662, 673, 7557, 2730, -2259, 1400, -4678, 2605, 10, 1242, -2692, -4355, -4425, 5827, 498, 2435, 462, -1787, 4255, -5535, 154, -5092, 5754, -416, -6012, 855, 2756, -304, -6970, 9269, -5275, 7717, 5712, -2705, 8320, 1121, 3445, -2409, 4078, 8744, -2328, 6783, 2508, 13065, -1297, 5491, -827, -3332, -4532, 2549, 2916, 3836, -862, -3770, -2215, 5035, -5203, -2468, -3326, 6878, 571, -2055, 198, 731, 1237, 6448, 2101, -2276, 8030, -5943, 1433, 1905, -6470, 8562, 11610, -4929, 9300, 5601, 944, -5671, 6719, -492, -5061, 2229, -3469, 877, 1683, -3419, 12693}; -static INT_T F2[CTEMP * HF * WF * 1 * 1] = {-13686, -11907, 1690, -4110, -10896, -16408, -12538, -6822, -8858, 15593, -10774, -12616, 6591, -15833, -13939, -16762, -1157, -4805, 14127, 18904, 13782, 16347, 1743, 10741, 12188, -10891, 3695, -8892, -16096, -7888, -17113, -2913, -11536, 5866, -7654, 3351, 4227, 26881, 16417, 4883, 7007, 21680, -12947, 885, 488, -4846, 17856, 5196, -2329, 13490, 12529, -2337, 2770, 9702, -3414, -9567, -13573, -3305, -19031, -517, 3591, 18888, 11512, 7629, 4165, -11283, -3558, 22083, -10204, 9427, 20617, 11503, 6366, 806, 12631, -12659, -8756, -11999, 2758, -14468, -17588, 7123, 1906, -6249, 11243, 17817, 9540, 19127, 18557, -4060, -9372, 14596, -17105, -12157, 19249, 3482, 13525, -14177, -21639, -5742, -14180, 4676, -7537, -21198, -9157, 12612, 4350, 201, -10075, -4258, -2640, 854, 5429, 11574, 9635, 22284, 7079, 4816, 17448, 13478, 5482, 15645, 4620, 6492, -14044, -12524, 7541, 6353, 4340, 13165, -5482, 3560, -15070, -5729, -7322, 13394, 27478, -10868, 15824, -10195, 3129, -3825, 14600, 5569, 3248, -16156, 7345, -1471, 1262, 9664, 12510, 17273, 19997, 1629, 7747, 9979, 7738, -11764, -2404, -7506, -18584, -7685, -13125, 10803, -11147, -2697, 20209, 13975, 15626, 10705, 19439, 885, 1794, 16824, -8233, -4899, -163, -2701, -4950, -14489, -20205, 15584, -4396, -13937, -7264, 12346, 8514, -15313, -4089, -17566, 9278, -19468, 2334, -17478, -10425, -3923, -14283, 11102, 9380, 13712, 15223, -12157, 16454, 20985, 4367, 5047, 15021, -2680, 5814, 2918, -5502, 18695, 11528, -8357, 16846, -1408, 19901, 8965, -16184, -10845, -5854, -7368, -11823, -15614, -10117, 5145, 13823, 3673, 6145, 4315, 13052, -13913, -9270, 10364, 13829, 18310, 9910, -12649, -6409, 1585, -5830, -12252, -11102, -8785, -16210, -6687, -17849, -18969, -4120, -10193, -13551, -14529, -15350, 8631, -2138, -12656, 19704, 9206, -16140, -11762, -17038, 11707, -12180, 11685, 9493, 4078, 21416, -15840, -6350, 22478, -3879, -2769, -2613, -11395, -8273, -10507, -8471, -2867, -7900, -11972, -22212, 6917, 239, 17878, 1994, 4892, -9427, -3907, 14825, 12624, -7808, 20421, 11103, -12195, 7492, 3380, -11180, -554, -4669, -6263, -7436, -3535, -10588, -6372, -3446, -5412, -491, -5061, 23940, -2595, -15429, 4433, 1523, -13682, -8007, -15188, -6173, -17525, -15839, -7617, -15240, -7097, -9444, -10315, 1885, -18448, -22192, 7376, -11147, 7179, -14581, -16040, 20002, 3459, 1451, -22790, 10759, -9994, -7374, 1877, -2152, 13903, -3072, -5026, 11429, -5769, -1238, 19774, 8813, 18015, -6008, -7669, 10705, 8074, -3501, 14684, -21850, 432, -4725, -10267, 2258, 9581, 746, 9950, -10587, -13061, 3043, -8424, -17414, 15210, 2180, -9090, -12671, 18915, -16798, -8357, 15942, -14597, 20061, -626, 17001, 11017, 13698, 13206, 1531, 2194, 3176, -6006, -10811, 1573, -5844, -15802, -6638, 13144, -9667, -14214, -9175, 3623, -2596, 9323, 5455, 13395, 1928, 19271, 19266, 4245, -2754, 9956, 6913, 11780, 1911, -3801, 20556, 12057, -6487, -11259, 17121, -20234, 15871, 19994, -22280, -7535, -10567, 61, 6265, -7481, 3423, 2062, 4315, 5418, 16693, 19949, 5255, -12657, 22150, -1343, 8569, 2219, 6522, -8080, 21133, -6586, 988, 1369, -8422, -13532, -7828, -17404, -13656, -18526, -7698, -14734, 416, -8501, -7597, -18330, 13005, -4042, -8609, 16352, 17981, 6368, -4926, 16176, 8072, -2223, 8093, 15082, 14947, 9384, -3433, 22849, 5248, -15862, 8917, 9488, -10686, 21145, 14344, -10901, 10463, 19246, -13406, 17371, 17027, 3770, -10416, -9138, 1119, -20282, -6613, 24665, -13329, -1032, 21575, 9534, 17322, 15055, 7495, 14141, 8503, 393, 1204, 93, -11153, -2248, -9222, -20911, -1171, -15926, -14078, -5591, 15197, -10676, 19360, 14759, -6104, 23345, 9719, -8532, 7766, 12725, 7723, -18954, -13031, -4080, -7973, -13927, -8145, 5211, 17871, -5626, -17107, -8863, -14366, 13863, -10473, 499, 5306, 4778, 1649, -17616, -18930, 13976, 3196, -16614, 5607, -16318, 10237, -8743, 2852, 13096, -7033, -515, 3261, -4277, 14188, 21139, 14691, -3381, -6184, 11860, -10740, -15025, -16698, -10181, -2751, -9262, 3783, 489, -14730, -17930, -17860, 15208, 20593, -9228, 9123, -7963, -14010, -10076, -5735, -4301, 11721, -2724, -8054, -5611, -9298, -14466, 4361, 13461, -3305, -11578, -20597, -3160, 9700, -10269, -4717, 16197, 14864, 17694, 578, 9298, 19019, 2031, -22103, 10807, 4218, -143, -8096, -6843, -11781, -12372, -6106, 13025, -6007, 12680, 16318, 57, 16249, 17149, 15262, -4952, 22506, 10909, -6092, -14645, -1410, -11901, -8521, -7991, -3340, 9474, 12008, -4657, 17187, -8782, -6396, 16510, -5238, -12112, -15550, -6515, 10059, 16087, -9876, 12516, 24824, 2952, 16937, 16074, -1249, 12406, 1150, -10376, 17192, -9583, -12910, 1751, 8739, 11825, 16365, 16180, 7601, -3946, 12659, 3274, 17382, -8569, -1101, 11238, 4535, -23554, 11176, -3210, -14218, 12363, -1079, 20082, 14098, 14178, -4924, 14662, -15287, 16534, -3104, -907, 11574, -9029, -3606, 20698, -1957, -10547, 10501, -2646, 21948, 12742, -9558, -4572, 1363, 14925, 7841, -15277, 3439, 3675, 6865, 7351, 10815, 9265, 9733, 13092, 6192, 3641, 14684, 7630, 4842, 14704, 13649, -7904, -12672, -11079, 17957, 15825, -1361, 22192, 99, 3238, 3946, 27103, -10249, -1722, 1368, 13959, -9697, -8391, 19956, -5208, -2366, 18745, 4964, 7073, 2833, 16354, 27200, 13968, 9221, 14486, 7334, -12789, 7506, 21620, -10422, 18108, 3631, 3681, 8873, 132, 265, -5399, 12081, -1129, -1610, 18407, 5674, 17518, 274, 15420, 20900, 15853, 20452, 7001, -1994, 7989, 7039, -10, -570, -10300, 4472, -6633, 14785, 16928, -5333, 23664, 3080, -2115, 2391, 21659, 2480, -11061, 19895, -4564, 5690, 19019, 22758, 6526, -9508, 14354, 551, -12517, -5328, 8494, -16228, 14929, -15130, -15206, -2955, 3322, 18135, 6540, 11751, 11919, 8793, -13991, -11655, 16879, 22657, 17776, 14834, -1844, 16517, 16087, 12110, 25127, -14517, -3339, 4779, -13045, -11675, -13718, 1967, -10056, -569, 10111, 5601, 6359, 18405, 14563, 9955, 476, -8813, -4641, -17333, -3068, 1256, -6256, 17101, 12436, -11420, 17865, 4589, 18764, -8467, 2764, 7596, 19061, 16180, -377, -7253, -3964, 208, -5683, -2903, -3667, -7179, -8981, -2033, 16330, 10924, 6852, 17227, 11561, 16499, 13859, 8680, -1029, 12964, -5888, 2659, 24814, 5233, -4714, 8374, 7983, 14809, 7150, -4582, 4853, 23803, -2177, 2075, 23854, -13831, 7869, -3323, -10089, 9703, -6495, -7702, -19065, 13344, 15055, 8806, -15534, -1332, 5195, -24811, -2042, 4134, 3773, -3167, 7947, 12525, 6783, 16111, 10829, 4158, 12262, 7929, 12252, -10599, 4896, 22442, 16427, -4313, 6060, 18326, 20511, -11488, -11479, -15622, -15999, -4640, 18702, -5736, -3022, 26581, 19990, 5729, 18841, 5236, 23439, 17584, 15303, 2459, 18939, -893, 12247, 29557, -647, -12910, 5673, -17252, -1913, 6379, -14453, -11895, -13257, -6501, -14904, 3947, 8259, -7483, 9564, -8775, 14953, 16651, 14258, 19292, 12543, 10636, -1367, 14539, 16437, -4352, -300, 10331, -18485, -15215, 24582, -6, -14349, -7377, 5030, 10387, 11349, 9911, 14740, 15101, 3279, 10527, 9237, 8602, -21907, 5634, -10823, 4113, -15238, -4758, -20282, 12903, -17248, 7978, -18374, 2184, -12718, -9655, -1993, 4740, -15524, -1821, 137, 774, 11768, -23213, -8594, 7017, 21276, 5241, -14886, -21324, -18798, 8513, 8387, 14158, 7395, 4294, 11099, 10747, 11855, 2184, 9114, 11411, -5746, -792, 12892, -278, -2169, -12343, -2695, 19697, -17789, -7694, 14937, 7088, 2209, -6893, -11214, -14677, -11742, -3275, -19763, 2807, -12133, -10023, -4540, 22156, 638, -1537, 24975, 14985, -7435, 1270, 9783, 18782, -9682, -16039, 8285, 15282, -3770, 3313, 2639, -15372, -6353, -14054, -1729, -185, -1860, -3288, -19827, 931, -173, -7272, -5246, -8176, -6302, -13740, -13345, -7742, -2567, -2004, 8423, 16502, -12777, 11459, 1572, -9520, 9019, -9085, -17316, 4326, 8204, -19602, 11615, 1296, -19163, 12340, -929, -16396, -15395, -14310, 23383, 4741, -13117, -8283, 9371, -12716, -17210, 22138, 4874, 21788, -7988, 4308, -14550, -9007, 2934, -3158, -11232, -14060, 2510, -6387, 1764, -2121, -11540, -15852, -5502, -21030, -1739, -17876, 12245, -11474, 18665, -18647, 3512, -9629, 20851, 12099, 25803, -5222, 14211, -6396, 1827, 8702, -13120}; -static INT_T F3[1 * 1 * 1 * CTEMP * COUT] = {3957, 4199, 625, 7618, -3520, 7920, 3161, 3635, 2887, -169, -2482, 6425, -563, 2016, 1627, 6164, -6454, 2937, 2121, -7586, -4161, -2282, 3581, 9194, -451, -623, -3180, -1949, -4834, -2057, 4398, 1441, 1012, 4465, 4369, -7093, -1168, 7260, 3439, 361, 3799, -1960, 43, 167, 1227, -1388, -1999, -966, 2888, 689, -3129, 6645, 5765, 579, -2978, 970, 1072, -2858, -190, 1676, 3787, 5392, -4595, 2339, -5836, -7433, 4685, -3809, 11598, -5560, -1548, 2799, -11185, 6858, -5431, -628, -6141, 703, 2781, -1203, 6562, -2913, 1564, 3037, -5333, -5476, -3981, 722, -1102, -4060, 1480, 1493, -1742, -2660, 6836, 955, 2793, 952, -1297, -1334, 462, 3169, 4349, 1454, -1458, -1541, -701, -819, 4243, -1750, -5832, 2502, 2375, 2270, -1053, 3953, 2160, -5029, 3968, 928, -335, 1468, 5074, -3308, -4236, 5022, 1637, 6135, 2077, 1149, 2009, -3804, -2177, -3834, 3005, -1475, -3197, 627, -372, -3212, -1321, -2090, -2959, -6183, 923, -3207, 2748, -1771, 1293, 440, 313, 4396, -3434, -2867, -858, -4282, 1919, -4570, -4486, -6718, 575, -1915, 3353, 1481, 521, -1846, -1555, 3627, -1757, -6434, -1046, 1369, -1834, 4217, -2499, -3934, -3361, 542, -2438, -6603, 3503, 1287, 5390, -2527, -1687, -1631, 1458, 286, 1114, 1695, -1378, 1150, 843, 7770, 925, 1231, -1054, 8939, -2499, -3718, 6254, -2052, 3705, -5189, -172, 1455, -2919, -710, 2020, -456, -439, -752, -562, 1228, 4009, 7975, 3801, -2420, -1224, -3641, 4122, -2477, 2580, -1088, 2316, -5642, -2147, -1616, 6248, 805, 2953, -73, 7437, 2149, 4019, 567, 4277, 6290, -2941, -6127, -3491, -852, -731, -2740, 759, 7343, -3531, 4987, 4661, -691, -2772, -11575, -1625, 3650, 2809, -5021, 304, -3136, 552, -2418, -4312, 4779, 1122, 3461, -5531, -3227, -181, -2287, -9379, -1285, 4555, -90, -6062, 4229, 1850, -3159, 1433, 1067, -448, 4486, 4606, -681, 1304, -3292, 492, 2676, -2260, -2065, 1011, -2457, 4886, -4214, 2183, -4054, -640, -1407, 2863, -891, 4953, 3425, 6656, 3408, 4174, -1945, -4384, -3992, -5147, 450, 5381, -3409, 3401, 5141, -6307, 4011, -9937, -4381, 1933, -3984, 317, -5047, 206, 1840, -2055, -3336, -3250, 2609, 5921, 167, -23, 4116, 5460, 102, -2886, -1874, -4344, 2742, -4321, -420, -5193, -3492, 4598, -671, -6371, 6218, 2811, -1951, -3421, 788, -2973, -227, 959, 7410, 2559, -4696, 8624, 2634, -4282, -3651, 4416, 5070, -1702, 1911, -1293, -2873, 1903, -3569, 3702, 2808, 5801, 4724, 3575, 5165, 3046, -2888, -1872, -852, -4935, -3034, 1082, 2601, -520, -710, 7794, -3223, 4542, -1355, 5047, 1, -11833, 564, -7035, 2271, -4127, -816, 7049, -4060, -2665, 1952, -8589, -7128, 1993, 2982, 292, 5446, 8458, -5796, -5692, 4700, 9107, -2030, 5807, -12175, -2757, -3816, -12650, -2320, -8900, -4019, 8753, 9492, -1886, -11662, 2823, -7632, -6805, -4164, -6665, -5087, -8368, -5075, 4500, -1708, 8576, 2678, -9238, -8252, 2215, -8004, 8881, -1186, 8840, -4176, -7131, 5504, 3863, -2052, 112, -1500, 8337, -1610, -9541, -5864, 11309, -5171, -10839, 3600, 8944, -6889, 13377, 2565, -7394, -5707, 1572, -747, -128, 2018, 6332, 7332, -2762, -560, 1657, -10561, 1281, -5922, 977, -9218, 11510, 3903, 9212, -756, 896, 1264, 6129, -498, -7168, -6081, -1498, -772, -3842, -2287, 3947, 3172, -2605, -761, -1459, -763, 200, 393, 3925, -4472, 1332, -5976, 3904, -5339, 1885, -4260, 2138, -4700, 1780, -2874, -4465, -2810, -4701, 221, 3608, 1404, 5442, -3223, 3988, -2309, -6270, -3337, 847, 4611, 5662, -4326, 3530, -540, 4344, 1844, -2527, -2903, 2873, -87, -24, -1251, 4667, -1737, 6061, 4365, -2042, -1185, 4699, 3738, 2931, 9499, 2149, -681, -2899, -2091, 368, 1793, 5375, -1115, -665, -4444, -5969, -88, 2169, -4623, -4578, -9373, 1052, -3891, -459, 1951, 1158, 679, 3347, -1717, 2250, -7099, -5161, 4845, 4589, 2530, 1529, -772, -6, -2097, 682, -892, 3239, 3513, -1031, 1093, 1610, 2188, -363, -3196, 1443, 1296, -675, -4591, 2548, -4581, 2807, -2968, 257, 1304, -365, 286, -7316, -4563, 3555, -3299, -2718, -3357, 1321, 4876, -5775, 2650, -7127, 1259, 5754, -5966, -1050, 894, -3357, -6216, -1221, 4296, 1346, 5856, -3680, -2542, 4164, 4365, 7489, -1795, -1637, -1002, 693, -2910, -1788, -2087, -3390, 4937, 696, 6752, 3577, -2623, 5905, -7995, 2110, -1598, 2837, 4788, 3, -18, 1134, -2531, 6432, -1253, 1118, -316, 7223, 837, -714, 2698, -2379, -2559, 3282, -2781, 627, -1347, 772, -4446, -2082, 2115, 8562, -1420, 363, 672, 6, -2708, 3267, -1565, -2414, 4768, -128, -3146, -556, 5134, -6414, -6207, 572, -1627, 0, -1345, 481, -5530, -4146, 566, 942, 7466, 717, 6556, -3171, 1142, -2640, -122, -3758, -1945, -1712, 4302, 189, 2731, -4787, 6436, -3808, -4491, -2660, -242, -3242, 4872, 570, 1279, 2220, -1257, 5766, 845, 2020, 6267, -3159, 5204, -3222, -2261, 1868, 2028, 1229, -3601, -4396, 2962, -4096, 3002, -2181, 81, 2473, -1004, 2875, -3828, -1114, -1212, -2109, 3998, 2570, 4324, -1701, 3038, -2825, 2691, 693, 370, -6392, 1519, 2625, -2998, -4470, -2377, -984, 1992, 5710, 3618, 1317, -899, 10419, -3432, -2987, 4699, -4124, -1335, -980, 341, -106, 4306, -4088, -1348, 2490, 3870, -5577, 912, 4774, -5535, 1557, 1028, 284, -2756, 535, 5956, 874, -4132, 3248, 1514, -3157, -1555, 146, 2527, 3336, -3809, 3125, -1613, 1081, 2662, 2136, -2426, -2138, -926, 4636, -1623, -3542, 2913, 532, 1797, 3469, -4374, -3857, 1909, 649, -3996, 2587, 6696, -1044, -879, -491, -4090, -5857, 3059, -528, -320, -713, 1101, 4347, -1220, -2087, -6840, 220, 5240, 2570, 2569, 2805, -3368, -561, -2977, -4248, 4410, -682, -2036, 30, 4654, 4383, -2992, 803, -2366, -1346, 407, -825, -4866, -392, -500, -2890, 2747, 3670, 3987, 2239, 662, 1837, -3987, 459, 1559, -4341, 1682, 326, 4294, 313, -1074, 3703, -439, 2560, -334, -3660, -4612, -4983, -7007, 1109, 3148, 1268, 1392, 3280, -618, -4451, -316, -2433, -8701, -523, -612, 875, 3338, 3296, 2189, -523, 2500, 2846, 5759, -445, -1017, -3224, 2650, -8467, -2420, -6571, 742, 8859, 924, -6162, 3611, -856, 2609, -2128, 7, 3514, 153, 1961, 1096, 1314, -673, 1082, 7752, -3926, 2510, 4054, 1605, 5548, -648, 5600, -4254, 2200, 3751, -4120, 1650, 1824, 2387, -3526, 671, 1884, 5573, -681, 5752, -75, -8244, -6603, -824, 4595, -1298, 1505, 5169, -2733, 2344, 1030, 1241, 1506, 1365, -2225, -2144, 2101, -835, -3406, 561, 2374, -2694, -428, -4964, 411, 285, -4281, 1977, -2337, 2090, -2009, -2431, -1594, 3432, 376, -2770, 3238, -2282, -3240, -6035, -1390, 1124, 2301, 1208, 3293, -1865, -4269, -3048, -2137, -4862, -267, -4205, -3947, 3362, 1536, -958, 3595, -2249, 597, -1169, 1845, 757, -2238, 1982, 38, 870, 411, 5765, -1424, -6091, -1032, 909, 3842, -1239, 179, 2848, -292, 2671, -1065, -2144, -2958, -4116, 1128, -700, 3904, -5758, -3863, -950, -5178, -3232, 6707, -4460, -1959, 1114, -5820, 4817, -168, -1323, 1091, 3590, 2353, -1336, 4164, 327, -774, 2135, -3874, 1535, 3372, 5106, 1516, 4613, 3932, 1601, 3061, 5848, -2126, -184, 6624, 1763, 4015, -713, 550, -5870, 208, 1231, 3507, -5636, -1667, -5015, 3549, -1714, -3179, -1666, -4275, -1823, -1543, -487, -1758, -2544, -946, -4528, 1953, 3199, -6087, -2139, -21, -2001, -3699, 2434, -570, -1032, -1486, 2109, -3042, 1742, -1544, -271, 1415, 3123, -4183, -2650, -1448, 1450, -350, 2220, -2708, 1374, 1636, 395, -2728, 2239, 1117, 4829, 470, -1537, -1243, -3900, 1899, -555, -2274, -133, -3752, 2836, 644, 924, -1003, 3150, 242, 2345, -72, 2201, 5662, 2500, 3762, 2587, 532, 3620, -2365, -3071, 5492, 1374, -488, -5972, -3324, 3464, -6381, 963, 2323, -2535, 1182, 3591, -2557, -607, 6896, -3433, -6708, 602, 3642, -7616, -265, -3342, -2016, 378, 1344, -8248, 771, 85, 1589, -1969, -2022, -2283, -1858, -5916, -1095, -4753, 1538, -2025, -1721, -4488, -5072, 270, 665, -1277, -4533, 1453, -2774, -3645, -3023, 6357, -1098, 2699, -2318, -790, -926, -510, 1412, -3940, -3473, 4174, -5220, -1044, 2094, 4928, -3111, 2527, -2940, 1312, 1374, -4048, -992, -7871, 1777, -6397, 2306, 5941, 1648, 2980, 3247, -4813, 4612, -1416, -3626, -928, -4983, 6048, -359, -5346, 292, 1268, 1815, -781, -1922, 2572, -472, -788, 5150, -5507, 5109, -1352, 2292, -3611, 3324, -3594, -9002, 5249, -5254, 4948, 2429, -4638, 7689, 6904, 2655, 10212, 1958, -9329, -11686, -6674, 690, -783, 1138, 5977, -522, -410, -7147, -2004, -884, -4073, 1060, -2122, -1855, -5403, 1256, 1237, -1880, 4939, -6537, -779, -7320, -7289, -2882, 9156, 262, -3898, -21, -4407, -2937, 999, 195, -7838, -6859, 5948, -3925, -87, 1927, 5108, 3567, 8541, 8864, 4842, 7057, -1260, 1117, -5294, -7357, 5140, 1535, -929, 3795, -378, 2401, -2775, 5420, -7398, 4984, -5131, 599, -2210, -9400, -76, -5620, -4484, 1906, -7879, 2931, -2612, 6737, -5078, -588, -1470, -3516, 2472, -2896, 1577, -249, 3853, 1234, -4810, -1598, -6222, 2462, -1148, 4595, 2107, 1830, 3366, 43, 211, -599, 578, 1148, -4355, -2417, -3788, -498, -600, -5, 172, 4835, 1153, 1013, -2749, -2345, 388, -4312, 1719, -2531, -3435, 71, 2228, -614, -3132, 1936, -1856, -5563, 553, 3000, 1790, -1339, -2567, -1032, 784, 325, -988, 445, 60, -1509, -1298, -3787, -220, -684, -2921, 985, 1671, 4120, 1074, -652, 1330, 4385, -2254, 2071, 7097, 781, 7365, 2271, 3554, -3058, -3435, -953, -201, -2189, 4334, 409, -1141, -2657, 4085, -3197, 1171, -2280, 1127, -1408, 670, -851, -690, -2239, -2621, -1842, -4198, 8544, 2447, -1043, 4439, 3399, 325, -1507, 1447, -822, 3582, 3251, -1716, -2027, -1039, 5263, -859, 191, 4161, -4822, -3582, -6914, 3875, 1591, 4678, 652, 1177, -3453, 258, -867, -372, -2568, -91, -5762, 2300, 1230, 6263, -4877, 5143, 5533, -3142, 3073, 3567, 4608, 3041, 952, 3910, -1057, -4584, 4138, 2531, -5041, -3273, 2086, -2976, -2782, -3253, 4453, -835, 773, 4358, 3075, -2550, 1530, 6671, 4738, -2870, 1006, -4100, 3430, 765, -5191, 4561, 1346, 1452, -1761, 1652, -2391, -4798, -1392, -1797, -174, -2371, -3606, 6135, 9728, -662, -621, 1874, 3779, -6009, -2890, -4322, -3561, 4869, -5841, 3201, 610, 786, 1154, 2804, -5761, -9479, 3982, 4128, 5612, -7781, 4593, 4152, -10499, 607, -11425, 587, 8367, -9163, -6945, 11110, 88, 2110, -10251, 7398, -2811, -524, 6366, -4677, 5675, -719, 4298, 2986, 4351, 8741, 2207, -6589, 5387, 577, -1594, 1175, -4437, -1035, 1906, 158, -4835, 7139, 10551, -3449, 3753, 2923, 368, -2390, -1958, -7025, 1980, 2009, -4862, 11613, -6950, 4096, -5069, -7698, -2523, 3290, -517, 13553, -3669, -2737, 4500, 3030, 9571, -392, -5050, 6102, 890, -4607, -1130, 7407, 4319, 2452, 5739, 760, 7917, 1147, 7492, -3788, -7319, 138, -2879, 1049, -6413, -6962, 3767, 5651, 9768, 11428, -10704, 126, -172, 7075, -8955, -694, -6606, -2172, 6672, -3108, 5572, -4011, -2390, -1759, 2523, 1771, 4358, -5305, 2796, 5021, -3854, -7478, 1793, 1405, -2372, -4704, -5355, 5773, 2555, -588, -160, 3013, -1623, -3217, -1121, 1678, 3217, -3527, -1155, 6010, -922, -248, 1929, -6320, 354, 1155, -6095, 2179, 5828, 5847, 2274, 2837, 3987, -4486, -3967, 9744, -35, -421, -2225, 5150, -1918, 3554, 2174, 1960, -3551, 4279, 1075, 3873, 5860, -2055, 1296, -1522, -1790, -3978, 2335, -894, 72, 2462, 3251, -2485, -2628, -2244, 4242, -1612, 1699, -1657, -2349, 4982, 1391, -1846, 2515, 5146, 1828, 6121, -5929, 4116, 3712, -4224, 6126, -4058, -1252, 1048, -5551, -3887, 2527, -1582, 5552, 4590, 3360, 6782, -174, 2008, 4228, 3751, 7375, -1069, -7580, 1632, -4578, 5145, 1864, 5555, -723, -1465, -3081, 29, -12, -5720, -2591, 2878, 4047, -1233, -1228, -4476, 4111, -671, -627, 3258, -2381, 6925, 2017, 2552, -4029, 753, -6183, 3727, -1309, 5467, -4642, 10949, 4957, -163, 1226, -4983, 3576, 3547, -726, 6224, 7474, 2933, -9609, -11795, -908, -788, 6214, 4147, -921, 3718, 2742, -2434, 7684, -3103, 3095, -3427, -3725, 939, 1549, -620, -1646, -4133, 5327, 5528, -4830, 5442, 3161, 232, -2177, 583, -2458, -3835, -5710, 3338, 3500, 1986, 2102, -1138, -2948, 5141, 5399, 3885, 1622, -234, -1633, -1166, 259, -4890, 1466, 731, -472, 829, -3943, 1197, 141, -4449, -3033, -3793, -956, 3000, 2063, 1541, -1704, -4543, 1600, 2010, -1928, 1411, -7629, 2834, -1661, -891, 2843, -447, -3462, -2453, 3885, -2888, 4113, 6903, 534, -2085, 4535, 2647, 2775, -2461, 4710, 5627, -2882, -544, -1138, -2500, -2457, 298, 236, 1674, -2644, -2185, -2808, -879, 101, 1099, 11, -2052, 4479, 5218, 585, 1281, 800, -5765, -1427, 6619, 391, 1481, 363, -1830, -1680, 4831, 1880, 1830, -36, -3328, 2252, 1702, -3204, -2744, -2076, 612, 2078, 115, -2906, 1099, -1429, 1719, -118, -4799, -1882, -620, -6084, -2276, -3431, 2007, 6097, -5819, 1953, 1559, 196, 2698, -3413, 876, 3321, -2315, -3383, -262, 1511, -1965, 1443, -493, -2535, -680, 1430, -4630, 1650, -1268, -494, 5952, -2308, 441, 1385, -136, 5012, -332, 2336, 4769, -4044, 1794, 2794, 6058, 3240, 1146, 5507, -3294, 2142, -2829, -2642, 2290, 691, 2910, 1023, 1225, 1350, 1188, 1056, -1416, 3027, -3962, 1020, 2621, 901, -330, -3648, 1330, -548, 4224, -3175, -3388, 5142, -597, -873, 293, 1249, -709, -4275, 2713, 141, -5570, -3444, -1712, 4698, -1053, 2005, 3335, 159, -2539, -1031, 2483, -1361, 6584, 2283, 5044, 4563, 711, -1008, -3275, 3906, -2349, -2267, 2911, 5201, -1328, 1752, -3309, -3881, 2462, -7435, 3181, 4296, 4252, 5006, 2482, 2084, -4705, 2219, 4702, -3632, 2944, 5054, -852, 3168, 6524, -1287, -2292, -685, -5611, -4271, 2734, 6097, -6457, -2176, -5007, 1206, 4752, -2485, 2694, -1477, 2454, 3775, -1867, -953, -4569, 6269, 903, -3686, 2249, -7178, 1218, -883, 6598, -1524, 4552, -3397, 5994, 456, -2755, 6520, 1302, -682, 3043, -1649, 3944, -1339, -1284, -2676, 1590, 3441, 2507, 2574, -3658, 2473, -4469, 4952, 4044, -1989, 2196, 100, 2805, 215, -3136, 908, 940, -2432, 417, 2049, 1222, 2996, 949, 858, -324, 6409, 1159, 1236, 886, -2579, -3290, 5703, 5557, 4432, 3800, 3628, -1138, 1060, 1590, -4809, 3420, 5002, -33, 642, 4342, -2133, 4618, 2585, -4863, -4393, 7364, -1406, 1138, -5673, -6916, 6991, -2689, -4785, -2508, 4971, -2686, 4297, -1642, -1015, 5531, -1838, -3698, 3410, -6486, 3698, 2980, 3974, -2702, 5796, -2608, 668, -3535, 3269, 6970, -5757, -3719, 6218, 673, -1029, -2120, 5498, -5656, 1099, -979, -3711, 3593, -4391, 5427, 1750, -1310, -2384, 2004, 650, 6842, 745, 3483, -2061, -2214, 5480, -1269, -7654, -3458, -3887, -458, -652, -916, 6074, 3352, 2454, 2119, 898, -1249, -1959, 3920, -2246, 4063, 1970, -11256, 2821, 6555, -4283, 6028, 6088, 2568, 1965, -2436, 4497, -5793, 4535, -4147, -380, 926, 421, 1817, 6276, 1481, -105, 904, -65, 2294, -4511, 999, -5894, -2672, -4495, 740, -1750, 3106, 2125, -121, -62, -2772, 2021, -2999, 5955, 4790, -1789, -4005, -334, -4332, -2360, 3161, -331, -4808, 689, 2746, -2952, 1408, -1281, -5326, -1573, -1846, 2938, 2054, 904, -1204, -1469, -1995, -359, 4501, -6891, 6846, 736, 3966, 330, -8177, 877, -5539, 5, 6952, -5053, 357, 2429, 6305, -1368, 3360, -3724, -5474, -1799, -1749, 3535, 186, -1838, -1975, -3273, 4483, 6120, 3608, 42, -1318, 10181, 7099, 6220, 3571, -4785, -1599, 2181, -5928, -1118, 862, -4437, 3306, -8365, 5366, -4100, -2442, -839, 7931, -3420, 4630, -3088, -2022, 3743, -4494, 3332, -2175, 7683, -4943, -1910, 4894, 876, -3133, -7795, 2860, 3816, 2173, -695, -1091, -4914, 2052, 3094, -1576, 2989, 4862, -4907, -2378, 5316, -7622, 3213, 1555, 1523, -6871, -9564, -2320, 3034, 644, -1386, 3277, 788, 2761, -4749, -312, -3132, -5184, -4555, 6190, -142, -2483, 1595, 7112, 1621, 186, -2794, 4533, -1848, 2945, 448, -3163, -5864, -765, -108, 4332, -3676, -2629, 6399, 4369, 2474, -1528, 507, -3595, -4729, 4651, -2508, 3227, 7247, 6305, -2056, 2103, 2300, 4020, -2293, 3905, 1503, 4245, 269, 1075, -5386, -5322, 2756, -946, -4627, -1464, 3563, 3094, -2354, 5489, 3584, 2512, -6357, -40, 883, 3079, 7666, 919, -159, -277, 2352, 1153, -4738, -3205, -1725, -4253, -2798, -3172, 1080, -4632, 1705, -2648, 483, -1237, -698, 2602, 2044, 1187, -2372, -1181, 139, -3012, -400, 1328, -52, -954, 423, 2288, -406, 3651, -3102, 149, -1856, -3517, 120, -1478, -3551, -4955, 3276, -2115, 485, -74, -1543, 4464, -3826, -2354, 5750, -3410, -1390, -919, -1752, 830, 3887, -687, 4886, -4912, -1080, 1208, 4602, 524, -525, -865, -742, 2054, -3843, -1195, 5064, 8211, 6385, 4580, 6219, 6067, -1804, -4999, -5413, -3264, 311, 1752, -1457, 6898, -2563, -4452, 2381, -3498, 1155, -1503, -500, 3357, 4003, -101, 5182, -5625, 995, -3104, 1049, -357, 10725, 192, -1371, 6217, 3569, -395, -4397, -1505, -6965, 934, -7100, -3037, 1287, -118, -5285, -1244, -2171, -7210, -480, -5564, 2192, -3937, -10, 1457, -1746, 134, -3055, 3987, -2684, 1070, -2761, 1679, -4815, -2566, -5499, 6601, 2254, -2783, 3660, 301, -3373, -299, 2668, -2143, -1175, -4229, 1846, -2372, -5061, -2111, -2180, -3798, 2255, 2379, -2522, -2914, 4910, -3062, 2196, -142, 369, -264, -2033, 2176, 178, 4796, -7458, -551, -6436, -9419, -2570, 460, 4116, 1030, 2546, 7939, -7366, 4116, 4790, 3231, -4043, 159, 2000, -2109, 474, 4702, -286, -864, 3763, 1250, -5378, 5608, 4401, 73, -5267, 8330, -5424, 1406, -2694, -3123, -1428, 931, 3561, -4757, -2600, -3215, -2275, -260, 2718, -2081, 1345, 4502, -5002, 7277, -6166, 115, -3650, 3782, -1309, 5577, 5193, -9151, 1491, -1491, 3724, -920, -841, -519, 4670, -3798, 4067, 2480, -5026, -3170, -9622, 6861, 8531, -652, 10821, -3979, -735, 1001, 4256, -6798, -710, -2572, -3253, -2523, -3893, -671, 1443, 1001, -3210, -1794, -4642, 1493, 6438, -6247, 1419, 6857, -6224, 710, -3635, -3183, -6749, -4376, -2508, 1319, 2551, 2449, 3934, 2906, 10, 2717, -600, 126, 473, 3776, 4010, -7246, -1850, -345, -1073, 3414, 4139, -27, 150, 1575, 2786, 4113, -1622, -518, 979, 2913, 2705, -91, -3806, 2127, 5141, 2552, -1830, -1208, 1740, -269, 5071, 4329, 1256, 2769, -2140, 4029, 64, -5261, -112, -436, 2375, 4575, -847, -230, 5174, -413, -7025, 1553, 407, 3690, 557, -2336, 1101, -3970, 6267, 2125, 4776, 692, 6013, -4785, 3415, -504, -4503, -1565, 4433, 1043, 4635, 4425, 206, 1770, -943, -13, -1994, -1105, -4208, 6179, 5434, 1919, 2338, -2787, 2631, 3722, -680, -1054, -3557, -318, -5996, -1314, -616, 596, -375, -335, -3318, -887, 718, 2388, 3187, 2911, -875, -2198, -4427, -974, 4840, -783, 854, 2449, 4080, 7305, -3176, 4708, -1747, 4882, 1783, 1913, -1285, -1077, 3254, -2797, 3307, 2918, -1823, -4405, 6324, 4363, -2751, 2757, 2786, 621, 968, 4050, 2063, -2291, -900, -3248, 2041, -3697, -2277, 1153, 1193, -104, 1943, 2345, 338, -4902, 1241, 1974, -3209, -189, -1177, -146, 649, 5288, -4089, 6208, 1178, -4423, 5187, 1091, -3310, -2223, 1552, -12, 3899, -5260, -1002, -11, 546, 4526, -3521, 3758, 2731, -2840, -921, 294, -2977, -1578, -154, -3304, -3921, 2616, -650, -394, 2147, 181, -19, -5070, -994, -757, -9674, 2225, 4240, -1199, 2989, 3460, 1461, -2153, -29, 2038, 8822, -292, -3288, -1194, -4071, 2657, 4072, 1013, -1694, 111, -7747, -8236, 4839, -878, 840, -5617, -7147, -138, -1464, -3119, 5319, -8053, 1884, -1450, 2182, -9290, -5716, 5753, 925, 4461, -3158, 1694, 4095, 5989, 6219, -1472, -2839, -1067, -5862, -2107, 3967, 7370, -1189, 3669, -839, -491, 5091, -8870, -544, -1826, 2848, -5272, 2609, 2602, -4707, -2667, 2902, -4183, 4853, -1768, 4659, -6769, 2450, 749, 63, 1870, -3519, 2215, -3301, 889, 1823, 6051, 4756, 2035, -5146, -7099, 1669, 1557, -3039, -872, -1190, -6008, -643, -1452, 3898, 2814, -1687, -3356, 2895, -811, 820, -3649, 3549, -1941, -4518, -7958, -977, -4710, -2329, -2117, 73, -1053, -4097, 2110, -3500, -2437, -4808, 88, -2416, -2950, 4236, 1375, -4234, 2460, -532, -1580, 6008, -5417, -1032, 2558, -686, -1526, 811, 1594, 1158, 1436, -3844, -3206, -4868, 1740, 5122, -15, -731, 3298, 575, 1373, -5613, 68, -2389, -2619, 290, 2402, 736, -5007, 4235, -3518, -4160, -4023, -3409, 1681, -479, 863, -1223, -2999, 3873, -589, -388, 3960, 1851, 3681, -651, 2829, -2242, 2190, 452, 4, 4784, 1185, 822, -228, -1326, -639, 2845, -401, -923, -1971, -5594, -4248, 4455, -661, 1214, 1390, -9669, -1704, -4555, 5261, -2873, -543, 6131, -4685, 1937, 8922, -391, 2215, -802, 3742, -3774, 813, 1391, 2339, 8437, 4292, -791, -6365, -2657, 321, -2586, 4912, -230, -1733, -4699, 3820, -6680, -5134, -3402, 0, 3674, 4000, -3276, -4011, 5673, 2537, -704, -2908, 2653, 4023, 883, -4917, 1268, -8360, -6614, 1723, -3861, -4300, -1886, -1436, -1824, -1242, 4745, 2277, -651, 5692, 4353, 2434, -2434, 3393, 4945, 1610, 1409, 2065, -2321, 1875, -46, -3802, -4407, 3749, 4650, -861, 4217, 137, 2963, -2010, 308, -3284, -7923, 2714, 1195, -2906, -555, 964, 6629, 2689, 2658, -2712, -1299, -1821, 2007, -7536, 1617, 1954, 799, -2587, 3290, -2382, 300, 1265, 59, -612, 1289, 5319, -1251, -5709, 1436, 5014, 907, 1097, 2124, 512, -3595, 2216, 3894, 1776, 3117, -6699, -3210, -112, 4716, 878, 392, 1583, 4458, 7053, 4612, -7757, 7211, -3649, 1644, -839, 2016, -5013, 6833, -4890, 3297, -1156, -2656, 9829, -1860, -1344, 8567, -6594, -4261, -1102, 4724, -1605, -2450, 5661, -2931, 7502, -1501, -762, -2538, 8642, -9342, 4314, -4272, -3685, -2594, 4739, -6817, -426, 4086, -2734, -3798, 1239, -7566, -3970, -4655, 2019, 3696, 5044, 4278, 6242, 1834, 1128, -4095, -2183, 3155, -590, -5266, 251, -2825, -3572, -1563, -1710, 984, -2872, 844, 2303, -2914, 2538, -1902, -3384, 146, 977, 140, 2965, 2178, -607, -2081, -2074, -2369, -6427, 748, 1632, 1135, 4284, 629, 4822, -1115, 3429, 2873, -2290, -1353, 2471, -5185, 123, 3139, -5476, 2010, 1475, -5788, -1103, -3109, 48, 1937, 2393, -355, -2191, 1247, -5079, 8556, -2267, -4118, -523, 2860, 3045, 1861, -2232, 232, -4903, -3921, 2425, -6048, -216, 4638, 3795, -2295, -2373, 2971, -5171, -708, 2309, -2367, 3942, -721, -571, 1188, -4749, 569, -2212, -2589, 1583, -3246, 2050, -4801, -5846, -498, -5063, 1700, 4387, -3687, 667, -10387, 1970, 840, -11178, 6284, 6296, -3835, 7596, 12317, 1266, -864, 1577, 30, -2745, -8258, 6448, 542, -315, -2245, -6075, 5976, -3148, -110, 2492, -11884, 2315, -3304, 4610, -8524, 5487, -9425, 4098, -6671, -5179, 6957, -2303, 5198, -3124, 2833, 4198, 5553, 14056, -2758, -1284, 5551, 337, -9063, 5996, -4332, 1623, -1568, -3262, -4879, 414, 5301, 326, 4368, -270, -6168, -4965, 2746, -2530, -2167, 5190, -3603, 1446, 5583, 7379, -3314, -2559, 10931, -5842, 6998, 2693, -5608, 6608, -9206, -7757, 2604, 5114, 1300, 4937, -2509, -4146, 5117, 5902, -5080, -7863, -3678, 843, -515, 1915, 4326, 11123, -4476, 1409, -1330, -190, -4152, -836, 885, 2254, 4659, 5653, -1349, -2958, 996, 2503, -1451, 390, -1440, -1009, -1485, -3834, -3305, -3936, -96, 3636, 3956, -10, -5467, -4036, -3600, -1011, -477, 4230, -3494, 1281, 2217, -2238, 218, 1701, -1450, 2608, 6902, -4898, 4757, 6034, 2559, 2357, 1192, 3793, 804, -6457, -2795, -3072, -7776, -243, 2241, 301, -2075, 3366, -920, 211, 4930, 2488, 654, -2681, -983, 80, -2616, -3039, -3521, -3557, 499, -525, 3362, -624, 2980, -4019, 1417, -900, -3926, -809, 1091, 5232, 4070, 2202, 2018, 5058, -1563, -4398, 1664, 513, 1102, 2540, -4172, -4209, -1917, 5341, -3709, -881, -1175, 77, -1270, 1940, 1159, -1492, -1991, -1323, -1216, -1436, 1948, 2851, -337, -2751, -4636, -957, 3497, -1254, 2223, -1696, -3526, 2248, -3145, -2118, 3165, -5696, -1000, -505, 4531, -521, 1246, -1663, -3651, -1229, -2546, 4409, 700, 3304, 519, -4413, 1849, -497, -2750, 4062, 2613, -351, 868, -4347, -1676, 6471, -2560, -1249, 2322, -2200, -2929, -1538, 369, 3405, -1825, 2885, 1737, 1767, 362, 740, 911, -574, 122, -1841, 1813, -2335, 2388, -257, 189, 1228, -1862, 357, 2127, 2445, -1990, -778, -161, -2793, 1465, 1067, 3452, -90, 970, -464, -1144, -538, 1866, 2662, 205, -1209, -1082, 444, 133, -1598, 114, 1089, 5783, -2485, -4390, -4985, -1075, -3843, -2532, 1332, 2557, -10734, -6605, 4889, 8141, -3181, 1062, -923, 1209, -206, -365, -262, 5526, 2560, -885, -5207, 2338, 6682, -119, -337, 563, 3523, -1208, 994, 2429, -4327, 2575, -1362, 2672, 4323, 7742, -2483, -1160, 1325, 3238, -435, 4098, 8139, 1473, 992, 151, -1116, -3155, -757, 4760, 110, 4346, -4244, -4868, 10728, 3535, -1667, 6085, -4949, 1985, -3163, -1625, 642, 4523, 2276, -3406, 638, 2082, -1575, -1982, 5301, -2144, -4070, -2553, -1002, -5216, -199, 481, 4239, -1722, -2549, 5152, 3508, 8940, 10298, -5997, -4781, -3428, 2468, -1971, -1131, -4993, -2242, 3805, -4505, -3572, 196, 1128, -722, 3538, 402, 4056, -2667, 3097, -475, -4176, -3568, -594, -1580, -507, -2849, 274, -3315, -1256, -6011, -4192, -2992, 620, 53, 994, -2009, -197, -2103, -2223, 2303, -2767, -3437, 2967, -489, 1424, -3608, 720, 91, -493, 5896, -1279, 3888, -1923, -7255, -3364, -2337, 4010, 1002, 3964, 3127, -3205, -1832, 2330, 1088, 3002, 4977, 2921, 5650, 1197, -5116, 4800, 1901, -2009, -4392, -2090, 2036, 1369, -18, -752, 5022, 3442, 4755, 3276, -6166, 5652, 1742, 4628, -5273, -305, -344, 4079, -5166, -2859, -236, 5060, -3372, 505, 391, -1804, -1620, -919, 570, -3378, 1163, 2151, -5589, 2214, -2881, -976, 8334, -2192, 3959, 347, 759, -1467, -6360, -1033, 867, -1301, 2117, 3312, -2944, -4369, 2691, -6928, 1008, 4005, -1974, -956, 4658, 3322, 1739, 1910, -3299, 4134, 6293, -2730, -1455, -2392, -703, -3310, -4711, 1804, 2771, -1638, 810, 5905, 59, -120, -2813, 2795, -1552, -2029, -266, -5765, -2101, 2746, -2114, -224, -4867, -1803, 3008, -995, -4784, -2731, 868, -2021, 3821, -5319, 1643, 1601, 2258, 356, -4113, 2829, -673, 356, 435, -2786, -692, -2088, 779, 2105, -1522, 2495, 3066, 5756, -558, -1321, 639, 2388, -7159, 2147, 2424, 1738, 584, -368, -1233, 1186, -1256, -3715, 2077, -3697, -81, -250, 433, -3065, -6203, 6053, -4586, -403, -2064, 4, -7873, -1982, 788, 960, 4475, -3117, -4197, 5680, 2443, -2, 1281, 1892, -3270, -2924, 3203, 782, -2857, 801, -793, 4444, -4452, 581, 3604, -622, 1677, 1698, -3590, -1427, 917, 740, 3014, -3424, 1218, -132, -1337, 4009, 5383, 197, 3967, -6287, 3864, 1698, -2645, 3794, 5480, -2695, 1315, 1405, -131, 3168, 2153, -1190, -204, 4281, 2624, -1714, 5298, -4937, 3416, -1723, 2616, -23, -1563, -2075, -924, -1144, -2842, 3323, 3786, -1843, 2362, -1325, 550, -3232, -545, 4383, 5191, -4556, -503, -2470, -4912, -2156, -314, 2364, 132, 4787, -822, -2696, -1807, 2848, 2346, -1774, 1170, -316, 2553, -79, 709, 2825, -1476, 1871, 2462, 2065, -2475, 2176, -2961, -297, 1149, -919, 1264, 321, -5197, -2515, -1489, 179, -897, -953, -630, 2910, -2061, 1202, -825, -2058, -6318, 614, 338, -2815, 1559, -2012, -1996, 4506, -834, 168, -166, -2883, 6011, -2104, -2143, 1804, 1431, 1173, 2271, 1904, -4542, 643, -3943, -3395, -2646, 1515, -551, -6650, 300, 379, 857, 1112, -1443, 745, -237, 512, -2709, 2314, 1065, -3524, 2444, -2673, 1020, -2055, -2440, 6779, -364, 1097, 172, -3256, -1914, 272, 5668, -1244, -989, 4164, -3884, 1079, 4305, 4947, -4025, -598, 4407, 1912, 2038, -3522, -3095, -2469, -3335, -3738, 552, -1623, 1810, -4941, -1452, -2099, 625, 212, -9, 2808, 5219, -1979, -2264, 178, -6575, 792, 338, 5190, 5001, 5841, -698, 2623, -553, -2012, 2356, -3955, 1973, 1605, 2566, -3097, 793, 5589, 1772, -651, 479, 2417, -1681, 4926, -1325, 1051, 2277, 6249, 3787, -2562, 4632, 7591, -1318, 22, -3311, -1669, 6462, -6602, 3400, 665, 3540, -509, 1653, 3065, -4020, -389, -1152, 5565, -5022, 2040, 5961, -5818, -2552, -2617, 3729, -6010, -4926, 4624, 2614, -2845, 310, 3757, -1084, -3781, 4517, 1231, -4503, 3044, 933, 1019, 8158, 3158, 5442, 970, -5270, 3417, -4766, 1868, -1506, -599, -2719, 1907, 3611, 4345, -2338, -14, 3186, 1042, -4576, -59, 4986, 2748, -2873, 330, -1336, -476, -828, -4550, 3876, 3346, -4736, -868, 1651, 273, 2176, 1318, 2484, -6034, -4859, 3830, 2513, 349, 5523, -4944, -3569, 109, -2411, 1654, 938, 1314, 1196, 1685, 2110, 2699, 5321, 429, 791, 189, -3207, -3094, -7491, 3557, -2032, -1387, 2271, 712, -300, -729, 5040, -1753, 605, 1036, 1638, 2109, 1453, 4368, 2083, 752, -4798, 2385, 1505, -3022, -45, -821, 441, -698, -6427, -6007, -3353, -1464, -2394, -3416, 3367, 4274, 1328, -4804, 4861, 1389, -2161, -2771, 4079, 4549, 1457, -4099, -6302, 2231, 3530, -6630, 2402, 2137, -3921, 2194, -5721, -2490, 7068, 4088, 2224, 5863, 4327, -4624, -4652, -655, 3619, -2911, 6617, -2635, -2113, -1982, -2133, 4239, -2884, 2261, -4217, 67, 1209, 9582, -4654, 2599, -5532, 976, 5139, -1107, 3324, -2628, 638, 1226, 3731, -7175, -5679, 6381, 4890, -5469, 1055, -4059, -401, -930, -1091, -1484, -1703, 6041, -5828, -1695, 1984, -1990, 8806, -1905, -3089, -6730, -5873, 1801, -2678, -228, 4580, -101, -1124, 5823, -4142, -903, -2613, 5679, 2979, -297, 5568, -2294, 183, -1122, -1324, 3627, 1366, -326, 442, 3100, -5702, 1269, -1163, -132, 5897, -196, 729, -2703, -1837, 595, 371, 2120, -468, -6509, 3134, -1502, -1961, 1027, -2878, -7263, -57, -1388, 1807, 7562, 3072, 25, 4140, -2552, 1715, -1566, 1872, 542, -5160, -330, -2130, 1298, -224, 5882, -651, 1916, 1051, 8084, -549, -2421, -2190, -1325, 1780, -556, 1779, -297, -3917, -22, 5505, 1403, 2460, -3243, 4118, -5708, 3096, -7323, -3107, -1010, -832, 1250, -3949, -2417, 502, 1855, 3922, -3373, -1751, 860, 3715, 745, 1658, 487, -2259, 4056, -726, 2850, -88, 2151, 173, -4119, 135, -3478, 2871, -162, -3484, -317, 1378, -4420, 1583, 3456, -7059, 813, 5203, 3536, -745, 7572, -362, 3040, -6260, 2651, -3980, -4426, 4001, -864, -7538, -2878, 2884, 4422, -2515, 3124, 2378, -1340, 276, 205, -779, -8481, -7436, -8072, -1280, 5846, -3197, -3040, 1630, -1749, 3795, -2026, 6492, 2212, 6690, 656, 597, 2503, -2909, -9083, 2707, 700, -401, 3736, 2599, -2552, -3055, -1840, -7778, -8466, -3620, -5367, -515, 4267, -10498, -3682, -120, -6018, -4045, 3245, 4728, -11077, 6477, 3973, -6785, -139, -2813, -4708, 5260, -3028, -3797, -1262, 5705, -4414, 46, -242, 3247, -4545, -1306, -232, -3106, 922, 13861, 591, 4765, -2005, 2163, -8544, -2467, 5491, 1329, 2222, -255, 3284, -2154, 3326, 3360, 3273, -1875, 1457, -3151, -2394, -4446, -4686, -3903, 6461, 1467, -3862, -1249, 864, 3477, 2725, 1666, -2857, 78, 1560, 6363, -3814, 3616, -598, -5661, 673, -527, 1783, 2556, -2559, 6538, -2416, 4813, 1906, 5203, -2528, 838, 298, 549, 2344, -1468, -2630, 6200, 1065, 7620, 3424, 1970, -1972, 3298, 2638, 6223, -5459, -5293, -3301, 3122, -2259, -4893, 550, -4336, -7255, 2025, 6842, 2097, 1571, 7444, -6403, -183, 1677, 4862, 24, -5247, -10370, 3781, 776, 8426, -530, 3317, 4020, -3988, -2648, 195, 5605, 4420, 755, 7400, -2668, -1485, -2493, -977, 1308, 2173, -3880, -3284, 4922, -1735, 7109, 3753, -3248, 527, 779, -2062, 4045, -1153, -501, -5672, 4376, 2359, -1857, 1223, -65, -2897, -5513, 1749, 3359, -4392, -2053, 4447, 4468, 3213, -2944, 2377, -808, -3919, -10, -1809, 1887, -700, 5088, -1374, 2929, 3451, -5774, 2237, 4663, -1282, 4445, -5174, 2095, 2075, -1724, 2175, -843, -5343, -2848, 893, 1776, 3797, 4771, -4392, 1410, -2062, -2660, -5274, -107, -4169, 845, 5513, -3796, 2260, -543, 7116, -4468, 2159, -2324, 416, 1196, 6319, -1379, 886, 3115, 162, -2234, 6814, -776, 3285, 7086, -986, 7697, 819, 4312, 2389, -1407, -7458, -1889, 2745, -2982, -722, 2106, -3167, 3049, 2749, -597, 7617, 1739, 5990, -606, 5762, -7552, -6815, -1798, -1606, -8543, 1796, -3935, -11114, -3499, 2186, -6799, 7167, -1383, 2051, -7989, 8820, 1805, -5388, -10713, -2871, -3021, 7552, -5171, -3421, -7774, -4446, -1641, 1790, 213, 4164, -7287, 2903, 4947, 3772, -2244, 5697, 2568, -2718, -3785, 6220, -1802, -4604, 512, -5943, 4563, -2120, -1625, 5442, -7461, -4196, 3250, 5670, 5365, -288, 6661, -1582, -2968, -9339, 4047, 1726, -1785, 4111, 7355, -3577, -6964, -1108, -2003, -338, 417, 4180, 2726, 1148, 2859, -4873, -666, -3669, 4195, -2098, -1739, -1305, -1891, -774, 10464, -1856, 649, 1482, 2102, 770, -1670, -4040, -5240, 6266, 1530, -1546, 8692, -2324, -4654, 2603, -5988, -2382, 2492, -83, -4291, 2474, -3179, 3846, 798, 1740, 1141, -4305, -1227, 108, 2017, -5874, 5914, 5482, -5046, 667, 432, 1524, -381, -1225, 6253, -1935, 536, -2918, -609, 2359, -1001, -1986, -2934, -8287, -3846, -5525, 4591, -1109, 3479, 6889, 1979, 250, -11453, -648, 3671, 1413, -7748, 3182, -4263, 1946, 508, -6746, 6322, -791, -6035, 2402, 3063, 2845, -3836, 2349, 3002, -3015, -1723, -1514, -580, -1834, 3391, 6871, 3076, -7945, 177, 812, 2077, -2411, 3452, 1958, -1869, -6172, 2290, -525, 5734, -7451, 1435, -6722, -842, -462, -3182, -607, -2038, 6211, -704, 5671, 4087, -2149, -2338, 5875, -4477, 4654, -6167, 8361, -2870, 1040, 5207, 3473, -336, 479, -6898, -5069, -4013, -1891, -5194, -6282, -2753, 0, -4383, -2113, -1576, 7361, -9847, 3482, -9608, -5979, -4666, 1624, -6189, -357, -15464, 4598, 771, -3331, 4528, 4959, -2772, 3447, -1573, -1604, 2351, 4843, -754, 5171, 2889, 4878, -2082, -2438, 1361, -3121, -9400, -2010, -6974, -3238, -1434, -4461, -1584, 1235, -3604, -688, 3153, 6901, 3436, 4825, -5772, -2325, -2485, -240, -5724, -3941, 8239, -2571, 8784, 1926, -7777, -731, 211, -8334, -855, 2200, 9012, 3575, 740, -331, -3815, -310, -453, 3349, 168, 4830, 1051, 5416, 1494, -1603, -886, -3746, -2302, -1272, -519, 6859, 409, -501, -1641, -6630, 3304, 797, 371, 128, -1092, 2134, 5337, -4655, -1032, -1814, -3473, 1885, 3551, -1034, 4443, 4025, -3181, -1021, -5526, 3660, -4449, 833, -33, -298, 4853, -3623, -3885, -262, 2300, 1329, 483, 16, -4810, 2535, 1518, 2759, -992, -3006, 1750, 2356, 3209, 376, 3096, 5496, 1764, -5680, 2886, 541, -1133, 3641, -2728, 2500, 284, 5476, -4644, -3924, -7884, -4724, 1560, 5993, -2256, 4318, 3066, -1539, 1322, 1507, -922, 326, -5638, 3021, -820, 2575, 8258, 1556, 1642, -3501, -957, 5047, -11107, -6229, -5789, 5352, 495, -5963, 1875, -8458, -4886, -110, 6000, -3488, -2051, -7212, -4561, -853, 3964, 194, -1856, -364, -4592, -6068, 1806, 8, -2389, 7147, -3826, 84, 1558, 2833, 3653, -1058, 2159, -1188, -767, -3239, -2940, -3371, -5004, -2425, -3910, -60, -7589, 357, 2826, -1575, -164, -3203, 5572, -8038, 1329, -233, 284, -7813, -2357, 7053, -2992, -4109, -7326, 6254, -2556, -3175, 5165, -714, 1791, 1780, -4968, -2813, 4252, 3476, -748, -5327, 4590, -3874, 8798, -3978, 3604, -608, 4620, -2704, -886, 2373, 6753, -1048, -5752, -4836, -9180, -758, 4190, -1781, 1256, -2960, -692, -2326, 258, 5507, -2821, -2119, -232, -2251, 7363, -2057, 1388, -4209, 4131, -477, -3525, 7016, 4172, 4255, -7353, -755, 2054, 1154, 587, 6379, 6282, -4776, 2702, -7693, 7855, -813, 3744, -2545, -2100, 3107, 1377, -6837, 775, 1518, -1257, 4155, -1300, 88, 1664, 852, -9024, -4540, 2726, -5739, 1044, 5200, 3051, -4922, -3790, 6312, 3532, 1291, 7356, -1619, -1605, 6259, -2168, 69, 4898, 1309, -1829, -4581, -6316, 4440, 4483, 274, -7467, 5983, 994, 4537, 1895, -2092, -618, 1018, 4214, -3682, 444, 4034, 3877, 2973, 1289, 945, -1201, 4088, -3440, 5398, -2917, 2241, -2403, 3528, 6552, 699, -3748, -6110, 2371, 3650, -229, 846, -5441, 4477, -4847, -3689, 3033, 1223, 2741, 4631, 2322, 2629, 1945, -7165, -759, 5118, -3520, -5564, -6500, 2161, -6344, -3212, 4033, -1588, -7670, -1445, 2173, 374, 4848, -2836, 3957, -3416, -3460, 2817, -3902, -2185, 1347, 53, 4110, -184, -2531, 3496, 2761, -463, 1306, 6907, 5633, -2052, 3723, 827, -5790, -5934, 5178, 2851, -3577, 6515, -4287, 3484, -2192, 337, 3334, -3093, -3728, -135, -20, -1087, 6286, -2195, -1714, -6029, 4060, -849, 2005, -2009, -1452, 915, 3839, 994, -3323, -109, 2597, 203, 5668, -4832, -1408, 2671, 2306, 616, 1122, -3504, 2888, 964, -3323, -513, -2228, 807, 604, -1036, 2073, 1117, 236, -4257, 2456, 2432, -2328, -1805, 4586, 262, 326, 4473, -235, 5076, 1973, -1305, -768, -5320, -2889, -4578, 3545, 7384, 2381, 1980, 1047, 5447, -4891, 79, -907, 5151, -518, -864, 3358, -3475, -3399, -3525, -4179, 3210, -631, -2566, 3090, -5999, 170, 7186, 2213, 5439, 312, -1832, 3187, -5196, -3602, 6728, -1469, 2731, 3025, 1532, -4706, -1742, 3883, -5820, -4207, 4689, 6495, -2810, -4296, 934, -1083, 1938, 506, 2888, 382, 3192, 834, -3435, 4093, 2211, 2149, 6086, 38, -3222, 2708, 3009, 7981, -7532, 1388, -1150, 691, -8103, 2212, -990, 525, -3160, -1679, -4836, 2611, -893, -2372, -119, -1395, 1983, 932, -947, 1960, -431, 5165, -1717, -1989, -2700, 2540, 3545, -3877, -4040, 118, -3345, 533, -2151, 3227, 4676, 5705, -3091, -644, 826, -2166, 3027, -3086, 1731, -4326, 2260, -1049, -2420, 1111, 330, 742, -4647, -3825, -2061, -2297, 2347, 966, 392, -1002, -3442, -97, -3679, -5398, -1106, 2603, -3571, -1491, 511, -1054, -3152, 2567, -5727, -2948, -481, -586, 2207, -2781, 4902, -4269, -5439, 5827, -230, -378, 2638, 4911, 1911, 1865, -3715, -4480, -3406, 3511, 2448, -5862, -2205, 482, 2273, 3634, -4474, -3132, -151, 2522, 2551, -2727, -3894, 3193, -1231, 112, -3340, -1413, 2089, 1844, -1606, -1521, 3124, -3046, 3205, -14, 1956, -5020, -2359, 1214, -3288, -4506, -1159, -4317, -1331, 5111, 4893, -2289, -1249, -2526, -4113, -4613, -1305, 515, -4844, -1156, 4862, 2953, -816, -454, -1589, 33, -929, -2825, 4009, -5973, -1168, 2295, 212, -5098, 2972, 3035, -1408, -1393, 334, -595, -1320, -4639, 210, 5348, -186, 2170, -245, -2754, 2192, 5466, 2795, 3695, -3425, 220, -4682, -3248, -1465, 417, -4025, -6190, 4511, 1588, 2674, 2859, 1296, -1058, 441, 2081, -3513, 102, -4075, 4205, 70, -2380, -1396, 2168, 3709, 1804, 2526, -670, -4591, 1482, 2179, -2803, -2084, -993, -2297, -1816, 616, 3599, 2756, -3027, -3044, -5015, -2860, -3035, 363, 304, -967, -3290, -1423, 1949, -3049, 1746, -1176, -155, 21, -220, 2190, -1663, -1276, 920, 351, 421, -354, 1651, -2082, 1063, 4418, 4237, 6405, -2834, -4874, 1802, -832, 400, -579, -3368, 3359, -3594, -4876, 4126, 3668, 3603, -1225, 1661, 1633, 1450, 2442, 2074, 5144, 1278, 423, 2848, -2604, -2899, -2463, -4486, 2239, -2322, 1668, 3352, 2172, 674, 4408, -4928, 2410, -4516, 3082, 3815, 4210, -620, 362, 343, 1960, 3660, 1904, 1503, 2298, 1564, 33, 2814, 4354, -371, 3652, -3636, 912, 1843, -616, -357, 941, 5007, -2825, -1617, 6357, 2811, 3112, 44, 4476, 954, 1021, -604, -3274, -1815, 2265, 3564, -6107, 2498, -916, -3072, -2954, -1029, -1935, 6759, 5394, 1652, 5596, -1022, -7241, -2786, 1760, 5416, 2702, 6723, -191, 7809, 877, -4422, 4154, -400, 5553, 426, -544, 5396, -2309, 2716, -1266, -1564, 3930, -8084, 688, -6769, 5924, 3774, 3586, -4366, 5319, -5951, -92, -2618, -1414, -1977, -5820, -1992, -5276, -3607, -2976, 2963, 5258, -5875, -1848, 954, 7984, 3379, -1503, -5781, 1664, -4413, 340, 7666, -342, -3031, 446, 353, 900, -5448, -3674, -2913, -2721, -3514, 4031, -4299, -1340, -6913, -4613, 3484, 5319, 7897, 5018, 1800, 5529, -1443, 7809, 1135, -1291, -5558, 1606, -2697, 2765, -2913, -2231, 184, 6765, 770, -4381, -2959, 2882, -316, 1318, 2497, 806, 5555, 2449, 972, -3791, 1836, -1809, -4863, 5716, 5000, -965, -2985, -1457, -10322, -232, -1368, -2499, -5023, 2179, 2987, -2517, 119, -3309, 2102, 3711, 2779, 3050, -4358, -697, 1002, -3706, 400, -546, -5693, 1607, -4141, -2209, -1265, -3571, -4666, 9090, -2736, 2523, 4079, 3885, -5627, -3356, -6596, -1818, 5712, 3626, 922, -6475, -3951, -1374, -3418, 4291, -3899, -5900, 9452, 988, -4816, -2894, 1013, -5570, -4863, 838, -2373, 3379, 2940, 3250, 2550, -2824, 2410, -3226, -5944, 5091, 3233, -5209, 3588, -2180, 4029, -4568, -2709, 4108, -5391, 2192, 2876, 1162, -1857, 3466, 1414, 208, 4051, -387, -1276, 63, -646, 500, 1115, 862, 2053, 3421, -2357, -1539, 2800, -4118, 2612, -785, -2748, -3170, 2340, -433, 3457, 606, 702, -2554, -1764, 2188, 6934, 3561, -33, -490, -3969, 2975, -2980, -1665, 4784, -1831, 3096, 449, -3706, 1058, 3282, -1333, -984, 926, -6331, 3789, 615, 5958, 492, -1627, -1597, -2416, 5, 408, 553, -1017, 1878, 3204, -754, 3240, -5124, 5623, -2212, -202, 2460, -4463, -124, 4801, 228, 798, -1033, 3599, -3691, -1485, 443, -335, 1350, -2031, 1472, -1690, 3979, 4375, -4779, 5233, -3423, -376, 734, 2018, 2278, -1631, -6161, 2325, -2492, -2481, 168, -5178, -6723, 7786, -177, 2187, 1085, -4563, 4539, 685, -37, -589, 476, -1861, 3703, 1759, -2758, 650, 4141, -4295, -4908, -95, 5670, 3902, 94, -20, -3060, -541, -1406, -1236, 4050, 2487, 1505, -4516, 1281, 3862, 2154, -3018, 1217, -3182, 1407, 1826, -814, -6079, 2209, 1416, -1204, 1351, -2872, 492, -2120, 3553, 3028, -696, -4677, -4511, 3209, -518, 20, -437, 2066, 395, 2883, -3280, -1766, -2330, 1338, 1255, -3177, -6061, 1600, 765, 1109, -911, 2342, -1998, 3959, -3281, -4487, -2127, -1490, 2232, -1168, 3995, 5240, 3331, -2034, -2667, 75, -1743, 3040, -1647, -1595, -744, -4843, -2259, 1582, -2391, 1381, -1775, -125, 2703, 5010, 3532, 5000, 7205, -2799, 1899, 986, 1072, -2304, 919, 7427, -1377, -8, -103, 4437, 4625, 2103, 2620, -260, -3546, 636, -6886, 1732, 1719, 208, 368, -4840, -1396, -5446, -3733, 2303, 1072, 1316, 1185, -850, 2154, 2306, 4379, 2739, -99, -4886, -672, -2693, 2128, 5049, -3284, 4309, -1579, 150, 1582, 3820, -2176, -1383, -1730, 537, 3241, 2197, 2792, 3391, 7035, -284, -3491, -3320, -6049, 887, -3687, -141, 3456, 517, -1495, -6817, 679, 620, -8367, 1792, 3119, 5375, 4871, 8295, 1200, 1484, -4804, -4497, -7298, -3306, -4523, -1556, -5757, -8466, -5306, -2531, -5932, -5322, -3250, -3069, 4819, -6872, 5993, -3133, 5811, -5584, 2084, 3372, -4398, -7075, 1412, 3946, -4282, -2382, 4427, 5167, 2829, -4684, -4420, 2136, 1096, -5986, 4994, 3808, -2432, -3986, -2174, 1782, 4204, 951, 6071, 1143, 5663, -5204, -1997, -3693, 4588, -2181, -3853, 1277, -4378, -1253, 2097, -3309, -7236, 5489, 1085, -5000, 289, 3795, -1610, 124, 1830, -4379, 1365, 6369, 632, -2562, 4150, 514, -5203, -1909, -1294, 6283, 1385, 1349, -2581, 878, -4672, 2155, 2355, 2714, -296, 1742, -6217, 1419, -2667, 4830, 958, -773, -1906, 1618, -437, -22, -1200, -1774, 3421, 385, -2834, -1877, -3572, 3719, -3844, 4955, -3210, 4572, -1872, 1364, -4251, 1539, -4980, -3722, 2276, 4294, -3053, -3458, 2442, 2609, -2808, -3659, 1758, 3662, 1379, 2656, -4316, 604, 2911, -1126, -756, 2879, 46, 915, 2519, 822, -3109, -1483, 3515, -640, -4536, 4143, -3976, 3234, 1685, -2519, -1734, 2492, -283, 1074, -3359, -137, -4860, 313, -2290, -4263, -1438, -2750, 3467, 3326, 1332, -158, 3176, -1563, -3236, 2389, -1283, 286, 3818, 2376, -2362, 5410, 7499, -2217, -1674, -3451, -1106, 5419, -3736, 1267, 4654, 1449, 906, 3553, 2783, 4093, 3911, 8135, -7835, -2405, -843, 3068, 3543, 4707, 5853, -1712, 774, 6705, -8776, 2242, -7979, -3181, 2392, 4652, 610, -6828, 998, 2990, -10962, 7183, -7259, 13494, -6783, 1421, 4845, -6026, 9429, 9516, -3796, 2412, -2617, -6446, 2820, -2277, -10338, -2238, -5428, 568, -3524, 7298, 2445, -1554, -3166, -8867, -4841, -7583, -4647, 6071, 4850, -3450, -89, -4687, 8459, 1350, -2054, -6809, -2899, -3875, 4212, -3062, 11173, -7690, 6910, -5971, -1724, 7645, 8927, 3302, -5137, 1393, 5120, -6009, 9096, -7837, 9281, -7001, -368, -1930, 8019, 1607, -3150, 1402, -5321, -2436, 1009, 2970, -2451, 7788, -190, -5923, 2010, -2733, -3386, 3308, -8582, -431, -909, 3306, 7817, -3044, 1066, 3748, 5186, 3131, 1853, 6100, 5720, -1007, -5406, 5375, -624, 3184, -2037, -264, 7476, 3475, 206, -3597, 2485, 3941, -816, 4272, -1414, -2828, -621, 5375, -6669, 8428, 5707, 808, -2449, -2523, -6700, 1949, 158, 3238, -8424, -7782, -1743, 4451, 4161, 3229, -1988, 1750, 2438, 2890, -1886, 4773, -4099, 600, 2487, -6752, 4760, 1690, 5712, -836, 1690, -449, -511, 2877, -2761, -6413, 1109, -2292, -5302, 3448, -1546, -1020, 1758, 3618, 1989, -2261, -1492, -4541, -2879, -2518, 5572, -5521, -583, -3464, 3967, -1209, -2046, 396, -3133, -4577, -1454, -4840, -1656, 5368, 661, 5874, -3630, 4338, -3426, -545, 3326, -1125, -2099, -1534, 6123, -227, -3228, 4406, -321, -1092, 2388, -778, -3962, 2579, -2687, 2598, 639, -963, -711, 5234, -2803, 5131, -3571, 3533, 887, -690, -3337, 4360, 406, -2857, 1510, -1824, -1651, -2845, 3490, -2674, -4645, 1348, 644, 440, 6325, -3899, 6375, -1190, -1136, -2801, 2254, 3303, -4388, 778, 3833, 3539, -1823, 3702, -1303, 48, 4601, -1498, -2757, -1170, -3528, 5218, 3731, -1246, -260, 4301, 1209, 778, 5789, -4523, -2225, 4042, -2735, -2243, 3774, 3141, -5299, 317, -1669, 563, -4301, -8475, 12350, -7469, 8659, -1214, 6037, 6747, -6922, 6044, -7172, -947, -7173, -3352, 9009, 4820, -1634, -10712, -3415, 5045, -5131, -363, -3736, 546, -1093, -3564, -2641, 3591, -4495, 49, -7116, -578, 409, 5429, 6733, -3168, -6136, -7437, 2537, 5812, -231, -8554, -7639, -7005, 4722, 3321, -8585, -5599, -36, -3494, -9050, 17704, 229, -7310, -10251, 9839, -4871, -2858, -8246, 272, 10430, -4518, -11463, 3056, 4083, -770, 1819, -3679, 4474, -4187, -7257, -720, 512, 1946, -241, 606, 7924, 3290, 2050, 607, 6044, 12307, -4452, -7609, 2012, 5605, 4159, -2550, -5473, 1301, 6754, -6209, -2992, 7006, 1444, 1646, 9130, -3546, -1712, -3803, 3977, -3768, -3936, -2193, 3564, -2690, 1190, -2408, -411, -563, 2274, -2377, -6566, -2204, -2311, 1298, 3559, -4183, 1043, -6102, 2741, -4813, 37, 2268, -6124, 4658, 347, 987, -1052, -3496, -2215, -5129, -1521, 1854, 1381, -2220, -508, 1503, -793, 2931, 5032, -3702, 182, 2459, 1809, 3902, -2616, 3781, -1966, 5253, -1993, -5356, -2142, 3253, 327, -854, 2863, -2383, -1532, -1290, 480, 806, 710, -3815, 3256, -8291, -2986, 4886, -2895, -1234, -618, -270, 763, -2632, -1166, -567, -2738, -1028, -3003, -869, 927, -1125, 543, -1996, -2582, -3483, -4082, -2969, -6897, 691, -3051, 1688, 3555, 381, -7009, -2653, 383, -3596, 1178, -905, 9410, 124, -812, -245, 6587, 3691, 4882, -2076, -3825, 1272, -5005, 2718, -6897, -6240, -4539, -5326, -1568, -2925, -2011, 1481, -4846, -1281, -1058, 2333, -613, 5518, 2480, -8628, -821, -1845, 2800, -4766, -7009, 4956, -5859, -4123, -2395, -7164, -4793, 3085, -7782, 4555, -8209, 1227, -5547, -3783, -6132, -10804, -6836, -258, -4034, 5941, 5859, -3004, 2346, -2225, 8423, 768, 3677, 6152, -7369, 2065, 522, 4707, 245, 4856, -5728, -1219, 2577, 8820, 1273, 1721, -4853, 7044, -8254, -897, 3456, 235, 6407, 6850, -7835, -492, -1285, -3, -8778, 770, -3775, -1238, 1958, 1507, 1262, 1764, 6487, -1136, 1908, -481, -447, -789, -432, 1048, 4220, -1119, 2439, -7819, -2199, -2082, -855, 1688, 2634, 1738, -1657, 2955, 1522, 1465, -2379, -2051, 418, 5628, -1785, 1315, -3428, 790, 4723, -2112, -1763, -620, 1358, -1692, -4306, 639, -1345, -2557, 492, -999, 806, 7389, -1018, 1021, 2180, -3646, 1834, 4255, 3205, -5118, 3346, 5205, -575, 1228, 1272, -1684, -224, 281, 811, 203, -1345, -885, -2628, 5315, -4219, -6582, 1070, -6066, -69, 2071, -6146, 2860, 3491, 224, -4657, 6287, 1230, 3733, 3104, 2106, -573, -618, 157, -1143, 1818, 651, 3752, -4154, -6398, 9908, 4412, -2486, 5941, 4606, 3788, -2659, 4634, 1444, 1454, -3116, -1417, 225, 762, -4291, -1680, 2503, -5082, 3780, -1638, -490, 2013, 5759, -3066, 3221, -26, -1721, 3144, -706, -1391, -911, -739, 3504, 912, -6631, 1100, 4677, 3534, -3780, 769, 811, 2391, 2452, -882, 293, -2343, 4786, -1178, -2449, -245, -3194, 2817, 3131, -1703, -4784, 1923, 1593, 1091, 3080, 2059, 3766, -5108, -4809, -5987, 3205, -1038, -6685, 1744, -2265, 662, -3270, 3704, -613, 4490, -4259, -118, -5348, -5225, 1739, -5012, -1421, 2650, -354, -3050, 763, -1647, 2457, -3526, 952, -1181, -1454, -3252, 5714, -4801, -2042, 4825, 1978, -5704, -6606, -3929, -389, -7989, -2077, -1126, -6769, 4615, 2544, 2106, -200, 3175, 1351, 892, -1872, -1613, -4671, -2560, -1978, 5025, 2502, -2651, -8109, -4300, -5027, -1168, 4455, 3039, -4230, 957, -1775, 5078, 2166, -2099, 7075, 3652, 2759, -5082, 3115, -943, 8301, 240, -5763, 3490, 1185, -1235, -9752, 4497, -1969, -2317, 2255, -7558, 774, -864, 3267, -904, -502, 2463, 4928, -4758, -46, -4590, -3445, 2413, -2994, 6088, 3172, 6984, -6021, -5864, 743, 3898, 4795, -8284, 901, 3301, -1973, 4741, 4826, -1530, -1715, -4128, -4027, -4331, -3569, 1783, 8273, 5192, -1873, -4368, 572, -3262, 10711, 4742, -7520, -4160, -1964, -2820, 612, 4615, -176, 5279, -2703, -49, -102, -2487, 2754, -2723, -972, 353, 188, 1095, -1599, -2070, -1731, -2334, -2889, -4909, 2353, -2196, -1492, 1712, -1575, -1367, -1685, 2529, 3007, 1939, -1038, 676, -2264, 4646, 4644, 1994, 2534, -1697, -831, 3149, 2555, -5425, 212, 3789, -991, 3344, 439, -2325, -3988, 8257, -1568, 357, -3575, -816, 14, 2625, -5267, 1720, 1696, 1639, 1900, -1253, 617, -2938, 4741, -1490, 172, -3746, 4508, -573, -3687, 969, -4768, -1011, -1609, -3538, 3741, -2457, -940, -3391, 336, -1477, 5903, -2004, -4349, 3836, 1227, -943, 1772, -44, -3644, 2278, 1041, 2523, 9155, -452, 2882, 4678, -344, 2896, -9, 4157, -483, -490, 6155, 5525, 5519, 463, -7864, 2192, 9205, -1350, -2604, -8892, -5567, 1662, -1891, 1125, 3127, 3158, 2078, -8152, 1924, -2758, 3937, 4343, 2174, 7110, -367, -990, -5339, -10700, 1230, -1280, -5251, -2701, -193, -51, -1545, -7307, 2363, -11978, 1415, -3095, -1358, -3853, -5727, 4783, -7640, -8882, 1570, 774, 454, 133, 338, 6387, -1204, 2706, -9182, 1694, 2327, 192, 7014, -3922, -4899, 4693, 6605, 2549, -2155, -4731, -2659, 5816, -5031, -3395, -2602, -4453, 6136, 10477, -1431, 4222, -816, -5138, 7961, -543, -3836, -3324, -1070, -3443, 5547, -1261, 3888, 461, 6257, 760, -4332, -360, -249, 1540, 2755, -4929, -5416, -8091, 3357, 6983, -1704, 1729, -6289, 6396, 690, 578, 5751, 5667, 1177, 8698, -4409, 6003, 6139, 2452, 4083, 3002, 2168, 1728, 3445, 7687, 5475, -2398, 1857, -1773, -3523, -510, -1133, -678, 2467, 7103, -4044, -11441, 3158, -3944, 2587, -1376, 813, -6204, -4, 7708, -3668, -2436, 5487, 38, 3044, 3335, -1083, -2483, 89, -4183, -7574, 7565, 14, 3074, 4092, 9002, -5230, 1949, 4412, -6950, 34, -204, -8439, -4148, -5417, 1819, -5788, -2541, -473, 7462, -1365, 5174, 2299, 3984, -6312, -2748, -41, -3736, -2455, 3399, 1386, -1799, 3923, -2471, 8480, -5088, 5451, -8002, -2175, -6720, 7508, 9482, -3671, 7661, 4764, -15827, 5903, 6433, 17362, -1277, 735, 3445, -2316, -2910, 958, 5376, -1868, 531, 283, 10694, -3248, 1146, 12, 585, 8522, -6671, -2491, 612, 6867, -2188, 7397, 2354, 152, 6579, 13488, -3107, 3709, -3383, 6878, -4591, -1492, -2443, -11506, -2797, 5049, 1975, -1332, 854, -9188, 3316, 8626, -13430, -988, 14938, 8354, -6845, 6495, 1051, -398, -3295, -1026, 5495, -5807, 6542, -5131, 7961, 1654, 1595, 2735, -1718, 3509, 821, -134, 1937, 674, 2711, -15443, 9529, -149, 4832, 11975, -1056, 10150, 5926, -13251, -8691, -2032, 942, 2216, -6183, 1977, 8746, -6036, 912, 2435, -843, 960, -4279, 4689, -1967, 3203, 1988, 2961, 2452, -4442, -5182, 3578, -547, -677, 2266, 422, -1518, 4997, -8111, -2425, -11659, 2826, -3137, 4817, -4057, 4796, 242, -3145, -2846, -1187, -3340, 7096, -4058, -5276, -3991, 1540, -5802, -4240, -1307, -3442, -3332, 9113, 213, -2939, -3007, 5160, -2196, 1468, 4512, 1588, -4887, -1582, 5400, 3698, -3134, 4032, 1253, -1653, 46, 3777, -6052, -1315, -3681, -5067, 2636, 5554, -2589, 3541, 326, -1017, 5545, 3808, -6843, 2512, -3307, 3649, 753, -5376, 2523, 4462, -2022, -2181, 5258, 1174, -3437, 962, -297, 5317, 3562, -3127, -7353, 718, 3267, 5916, 2638, -3616, 997, -727, -5490, -7180, 7385, -3520, -749, -9196, 13563, 5194, 2513, 1428, 533, -2412, -11760, -10861, -3624, -772, 787, -5846, -7345, -3156, -1216, 5277, -6079, -1378, -7462, -7659, 9358, 2035, -8734, 2406, -9964, 38, -8007, -1236, -5847, -5009, 1139, 4078, -1210, -4789, -517, -4481, 3887, 534, 2700, -5407, -5044, 2398, -1046, -4590, 5517, 1786, 6033, 6564, 7084, -7149, -12631, -6954, -3482, 1241, -4812, -7259, 5697, 7945, 9909, -2199, -2627, 11250, -1972, 5265, -9006, -12756, -646, 5872, -3853, 4779, 6461, -6118, -11133, 2721, -6464, -818, -4266, -2904, -5298, 11610, -726, -4839, -4460, -3328, -4086, -5644, -1898, -267, 2422, -1324, 5652, -1111, -920, -2100, -2072, 3021, -5176, -6077, 1246, -825, 3293, -1515, 2626, -7659, -2118, -3547, 1172, 86, -2768, -63, -1491, 1171, -1652, -2853, 2631, 75, -636, 720, -3054, 1708, 561, 6539, -9012, -1173, -1216, -856, -6740, -3829, -1014, -806, 4093, 3791, 2152, 4628, 177, 2256, -4838, -38, -139, 5083, 2297, 3637, -2181, -2042, 6325, -2450, -1552, 4146, 7166, -3255, -816, -296, -2451, 2832, 293, -3554, -2754, -460, -930, 5079, -923, -1400, -711, 3979, -3722, -510, -2096, 4676, 2872, -1826, 1802, -5038, 1275, 1979, 293, 607, -2705, 230, -2044, 4437, -702, 5639, -4571, 6805, 2835, 2619, -3475, -5218, -2894, 3336, -905, -2890, -2178, -5530, 7633, 5262, 744, -2982, 2956, -1553, 4490, -1285, -2815, 6977, -889, -1743, 2481, -4986, -7252, 5951, -3856, -1464, 4197, -3883, -720, -4655, -1780, -6168, -635, -1314, -2415, -4242, -8650, -514, 684, 4123, -3497, -2205, 1795, 3061, -1908, -1490, 36, -958, 6054, -1632, -80, -4450, 2894, 627, -2583, 5076, -4424, -1178, 1668, 2241, 960, 643, -2606, -4846, -5074, 1813, 6759, -500, 4043, 463, -2039, 5567, -798, -2265, 7511, -1982, -796, -3558, 416, 4421, -1039, 4444, -4393, -601, -4545, -3593, 924, -2856, 2213, -1466, -6092, 712, 6318, -6646, 568, 3328, -1874, -3386, 946, 4885, -6643, 1216, 731, -254, 1993, 1827, 5088, 8067, 2546, 2787, 4761, 258, 3332, -5161, -2560, 3934, -1946, -4079, 6586, -1434, 1025, 1902, 260, -3471, 756, 692, 5811, 3248, 5094, 2784, -2278, 5352, 4230, -4723, 2823, 813, -2086, -4289, 1784, 3842, -3771, -3376, 3086, -1599, -2530, -3204, -3417, 6296, -2699, 75, 5354, -3236, -3701, 1377, 4055, -2041, 2903, 4318, -2254, 1136, 1991, 786, 678, -6062, 4342, 863, 1653, -2646, -151, 1103, 5301, 1819, 3886, -476, 1209, 1929, 1941, -4001, 11047, 1642, 4211, 526, -2697, -513, -1865, 646, -946, -1789, 8620, -750, 6099, 4369, 1563, -7590, 2056, 1478, 1463, 960, -2228, 2242, 8059, -3253, -2469, 3777, -2613, -1493, 1690, -2698, 5337, 1402, 3024, 1133, 1566, -5477, -3059, -3575, 1297, 6819, -995, 970, 462, -4796, 6185, 519, 6539, -228, 5595, 2634, -2515, 3239, 1406, -563, -366, 4330, -456, -3130, -953, -848, -4911, 1027, 3637, -1877, 964, -518, -448, -3034, -7752, 479, 9316, -1082, 7090, 2864, 127, 1558, -6183, -4361, 2934, 4193, 5510, -416, -6548, -953, -4575, -3013, 1331, -2103, -666, 6328, -4209, -1571, -2403, -2103, -1614, 1049, -3237, 1813, 3441, -3456, 5308, 2542, 4106, -1897, 7528, -4255, -1564, 3152, -3436, 2379, -543, 1464, 1111, 951, 2072, 2769, 2895, -2371, -1443, -1349, 2123, -2635, -6520, 652, 3369, -387, 5052, 2980, -7386, 1869, -5152, 2231, -257, -2015, -1294, 3639, -2062, 2636, 3169, 1366, 2964, 4880, -5676, -5744, -489, 8673, -4102, 5478, -1415, -2783, -1225, 4840, -3175, 1373, -9072, 4327, 2829, -4862, -6008, -1313, -5340, -2852, -1247, -6503, -2438, 4623, 1804, 410, 1196, 5655, 2209, -316, 4603, 1200, 154, -5331, -1649, -5242, -2499, -1031, 969, 2787, 3812, 11394, 5800, 5953, -3281, 4432, 4755, 2751, 3528, -191, 6582, 1867, -4669, 2881, 21, 2595, 608, -3778, 1470, -1292, -4401, 2168, -1410, -391, -3835, 2710, 2609, 1787, -3751, -2027, 4299, 2804, -2212, 79, -3299, 1731, -899, 3341, 1774, -545, -29, -1838, -1804, 1869, -1170, 3815, 69, 2023, -3199, 622, 2294, 566, 487, -5725, 5419, -4827, -8758, 3567, 451, 2570, -2721, 1686, 320, -292, 2454, 2393, -1310, -2180, 1832, -2103, 873, -4936, -550, 4387, 1673, 893, -3829, -2146, -2297, 3055, -2042, 1085, -3297, 388, -1946, -2425, 765, -2687, 1107, -3166, -4492, 2782, 520, -2016, -102, 1853, -1361, -957, -2737, 270, -3320, -1258, -3258, 3079, -174, 1252, -1576, 1293, -686, 7175, -3719, 3207, 2821, 2635, 2112, 3228, -3945, 3824, 414, -4161, -301, 4331, 3383, -3348, -5935, 189, 2234, 6020, 2968, 2357, -1596, 1126, 4455, -783, -1815, -1304, -1332, 3896, 3290, 5008, -3883, -1537, 1323, 2602, 5632, 1080, -768, 3233, 2182, -4074, 1518, 2676, 1817, 1699, 5130, 2244, -3119, 578, -1673, 5246, 2693, -1840, -2721, -3391, -3418, 540, 4911, -9561, 1361, -2319, -295, 2251, 6244, -2854, 451, -2240, -6979, -2621, -1934, 718, 868, -3332, 1564, -1270, 3738, -9, 2931, 797, 6488, 978, 3223, 1494, -1149, 6758, -322, 2187, -1525, -350, 2913, 3926, 5275, 2511, 1141, -3329, -1419, -1200, -396, -1230, -1874, 1494, 1687, -4078, -3285, -3425, -2889, 7047, 7601, -593, 1534, 2989, -2186, -5413, 5815, -8478, 1167, -2465, 7, 4073, -2790, 498, 4667, 885, -6767, -5083, 3067, -9846, -4648, -3852, -2641, 2643, 4368, -956, -4028, 4505, -1794, 693, 3829, 1491, -346, -1103, -1343, 1499, -2963, -4958, 1666, 2349, -3876, -2535, 2936, -2153, 4877, -1610, 4237, -1946, -1668, 4597, -1196, -300, -2317, 5487, -1624, -1763, -3540, -3722, -86, 2756, -8955, 2819, 2844, 799, 3373, -5669, 3971, -4878, 833, 5442, 2425, 1728, 2880, -2879, 764, -844, -713, -3540, -1267, 1822, -2801, -2366, 1934, -780, 2402, -4393, -2176, 3411, 4443, 5790, 1094, 4158, -2123, -2255, -5868, -1251, -3656, 2656, -3490, -6607, 3161, -1567, 3539, -1638, 5437, 7583, 6330, 209, 1519, 5090, -3346, 4033, -7124, -738, -2693, 5109, -3169, 1078, 4901, 2566, 425, 6811, -1001, 1584, -2029, 2168, -2292, -8068, -3405, 4737, 8187, -1963, -5278, 2722, -3626, 2454, -225, -2184, -2037, -4975, -1141, 4576, -1478, -2232, -2777, -670, 3314, -5766, 1754, -2878, -1241, -421, 899, 5185, -5289, 3117, 3714, -2135, 1615, -3886, -940, 8220, -2216, 5072, 1284, -8133, -2590, -3043, -3044, 5145, 2264, 5582, 5819, -2479, 3149, -1656, 1907, 1694, 1355, -5054, 5510, -1154, -1322, -8085, 835, 161, -1049, 1616, 1072, -2413, 4844, 783, -586, -2217, -697, 5844, 5330, -596, 2375, 1023, 1984, -3379, 5696, 6546, 1790, 122, 4712, -9806, -4501, 3131, -1909, 2648, -2058, -1820, 999, 1662, 2724, -231, -1876, 6308, -5330, -152, 2100, 9088, -2197, -302, 1797, -5186, 3326, -4234, -6313, 2339, 1668, -2441, 4624, 1466, 3699, -4381, -280, 31, 3603, 2091, -1900, 6816, 9552, 4258, 3025, -777, -2362, 4913, -3894, 1445, -7209, -1924, -5812, -772, -7030, -4214, 5457, -1278, 182, 4943, 5627, -5464, 1548, 2426, 1878, 1153, -444, -8000, 3748, 1208, -997, -3855, -7662, -2197, -111, 3950, -2384, -6222, 3578, 75, -537, 3640, 1112, -1936, 1235, -1289, 7757, 5700, -565, -2130, -3843, -57, -2615, -4324, -5724, 3779, -1425, 2019, 211, -3169, 1646, -2706, -549, -2301, 1041, -3892, 1591, -3244, 2006, -149, -4681, -3753, 1268, -7173, 5964, 3936, -1169, 696, 460, 273, -1979, 3429, 6085, -420, 4903, 38, 1543, 3037, 4461, 4967, 3434, -937, 3500, -3623, 3731, 300, 2287, 4606, -718, 459, 6394, 1105, -1403, -874, -2342, -1019, 1036, 6558, 1806, 3290, 4047, 4187, -1719, 3179, 2909, -28, 4901, -2737, -990, -2655, -3422, -968, -6951, 5148, 3347, 4325, -2470, -5858, -5580, 2188, -192, -837, -5297, 5133, -1878, 579, 4899, -2351, -2597, -5533, -12752, -5428, 145, 141, -3362, -3445, -741, -1083, 3429, -3720, 1213, 2029, 3720, -428, -3917, 1389, 1417, -903, -2749, 4131, 512, 5075, 2079, 1969, 2145, -906, 1481, 4609, -6753, 2329, 2155, -123, 2121, 2588, -3711, 1975, -3315, -4744, -5234, 804, -5774, -1120, -1859, 1203, -542, -830, 3363, -3042, 3706, -1270, -1461, 5445, -3065, -6499, -2188, -2409, 4476, -522, 2990, -4650, -273, -2224, 5397, -4183, -1602, -4615, -1379, -2887, 4400, 871, -509, -2717, 6142, 1255, -7442, 2488, 1421, 4846, 646, 1552, -2211, -251, -6955, -2685, -3462, -954, 5958, -6211, -3967, 5313, -1976, 5687, 8070, -8721, -4444, 1349, -712, -3337, 27, 2269, -4284, -2349, 4258, 4537, 9454, 1842, 1698, 3107, -1241, 987, 584, 330, -700, -754, -5907, -1145, -1971, 5408, 2174, 3702, -3442, 1743, 5613, 5243, 4202, 4040, -6758, 7013, 181, 2615, -5, 8279, -5448, -4496, 1985, -2022, -2097, 3751, -1599, 1575, -7329, 8461, -4234, 3992, 8865, -4649, -8828, -3877, 5276, -749, -5296, 5346, 2187, -1731, -961, 5684, 1269, 4262, 2022, -2680, 2308, -1859, -1271, 732, 994, 481, 4965, 1686, -4852, 5444, -6140, 22, -264, -4278, 4956, 1747, -606, 5619, 2021, -3194, -1596, 596, -2493, 5862, -2101, -2633, -406, 6012, 678, -4651, -5, -9903, -3483, 877, 2320, -3391, -3274, -712, 1811, -2117, -2633, -1445, 5277, 6649, 2604, 5629, 9933, 5986, 1475, -4758, 958, -4278, 2831, 3084, -4396, 4475, 3410, -4531, 6383, -8396, 2799, 1456, -879, 2275, -53, -4741, 203, -203, 4691, 4301, 1871, 5710, -1121, -4396, -6562, -5876, -2055, -6655, 3415, -5604, -2699, -1558, 1040, 2214, -4137, -3957, 5583, 6172, 908, -775, 1645, 7927, -1996, -1132, 4647, 2981, 9473, -4012, -5381, 1038, 2812, -192, -6065, -7932, -3519, -2558, 400, -3866, 570, -324, 8, 2621, -1474, 3634, 3076, 3373, -8033, 4131, -3236, -2827, 1732, -203, -1393, -4946, 1509, 8141, -1791, -6238, -5197, -6225, 5913, -9423, 1223, 590, -4258, 4088, 215, 2953, -4889, -128, 1401, 863, 5057, -7372, -3989, 68, 2477, -916, -4458, 6950, 3822, -238, -1618, 3708, -1259, -213, 804, -586, -2540, -2569, -1726, -3510, -4665, 8802, 1156, -3505, -595, -48, 389, -1747, -641, 6612, 3553, -4366, 2474, -5000, -4437, 3820, 4927, 1410, -956, -1448, 10, -9670, 386, -4144, 4250, 3554, -1248, -1161, -5179, 1300, -2265, 1485, -2297, -9987, -11562, 1986, -1458, 3267, 1040, -6644, -1657, 8891, -139, 2602, -1508, 4489, -4111, -5758, -302, 4090, 3316, 3288, 5602, -3797, 2345, 1575, 5945, 3220, -3628, 8530, 9868, -1321, -4334, -2883, -11447, 262, 936, -531, -3714, -7029, -3232, -2354, -64, 233, 773, 891, -14815, 1978, -2157, 9833, -2636, 9093, -3708, 1132, 1140, -374, 3765, 2569, -1032, 4916, 5465, 5687, -5515, 14690, 29, -3521, -1374, -6473, 269, 5380, -3969, 6053, 2750, 5369, -13326, 4545, -6904, 1865, -4273, -794, -4964, 9173, -4707, 3137, 6859, 8846, -10567, 3478, 7698, 7216, -3802, -6202, 2564, 2889, -1858, -2369, 7503, -4317, -2353, -2258, 7782, 1575, -3339, -1077, 2489, 10493, 1795, 4802, 10607, -7414, -5941, -12113, -5475, 5025, 7292, -2813, -1877, 7671, -1396, 3838, -2088, -2470, 2329, -1585, -2809, -94, 28, -2017, -1268, -1370, 1961, 1692, 319, 3427, -3120, 778, 4373, -3077, 3050, -757, -2485, -2288, -4520, -1410, -321, 275, -1893, 560, -415, -110, 3544, 1330, 4331, -3224, 376, -2323, -2964, -132, 1186, 181, 1579, 3026, 2295, 2840, -818, 2575, 4251, 3301, -504, -1450, -662, -642, 4478, 2743, -7769, -1621, -1569, -5129, -1930, -2297, -1843, -3430, -3265, 500, -1690, 100, 2146, 239, -199, 2601, 193, 491, 1461, 682, -140, 374, -2814, 6015, -3757, -334, 3712, -23, -80, 2514, 2315, -1874, -804, 397, 2893, -1320, -3420, 2502, -3429, -1318, 1885, -3271, 4140, 1757, 1928, -7650, -2217, -4589, -4058, -5726, -6019, -1067, -1928, 3846, -5458, 6241, 3271, -1030, 2453, -445, -2522, -3089, 2908, 438, 4655, 625, -11206, -3056, -5605, -5401, -8138, 264, 7779, 7290, 11924, 1125, -3936, -7136, 1238, 2394, -10704, 5768, -4077, 1992, 787, 1167, 333, -7954, -898, -10347, 110, 692, -5456, -2902, -8195, 1482, 2401, 7763, 9524, -7513, -4969, -4382, 899, 6445, 56, 7290, -899, -4255, -9782, 4552, 291, -4587, 1506, 4013, 1343, 14254, -8561, -7156, -2754, -3265, 3513, 7589, 3013, 2860, 1597, 3522, -219, -7227, 6185, 3569, 2333, 2274, 6170, 5020, -6124, -111, -4100, -9445, -8177, -1550, -1868, 2869, -417, 1544, 1491, -2461, 413, 4361, -327, 6902, -6286, -5795, -2311, -2195, -1812, -4312, -1600, 7374, -2066, 4830, 1121, 44, 5949, 4267, 3040, -3265, -4448, 5098, -4610, 4923, -5508, -2776, 1875, 2869, -3392, 3246, -2606, 4325, 4856, 370, 234, -918, -3819, -757, -2049, -4049, 3720, -3921, -6990, -5417, 278, 1675, -556, -3976, 4616, 457, -4647, 3972, -306, 742, 5132, 10312, -570, 1699, 3299, 3125, -3770, 2571, 133, 912, 4425, -4833, 4473, -2734, -1380, -2852, -225, 9528, 3945, -832, 1924, 1098, -3389, -1868, -3732, 3245, 6171, 3598, 2614, -64, -1820, -4172, -4956, 1565, -7660, -561, -3787, -922, -3041, -3452, -2422, 7539, 9, 2173, 2441, -2872, 1905, -712, -4410, -3076, -2387, -5137, 4714, 3429, -2938, -1497, 4396, -3230, 1798, 3081, -3971, 169, 2322, -1598, 3552, 598, -82, 5326, -3825, -3639, 4927, -4477, 1661, 4088, 3951, -3365, 9056, -1620, -4888, 177, -4244, 3672, -4347, 4032, 4117, -1688, -2376, -1154, -184, -2377, 2082, -3982, 2783, 6682, 2724, -6436, -3995, -1606, -327, -2234, -841, -2777, 5637, 2128, -1314, 418, 3956, 1275, -381, -2497, 837, -3769, 3705, -3034, -241, 3348, 1401, 2544, -2351, -3905, 2014, 5890, -3068, -540, 235, -1463, 7705, -281, -4134, -1480, -5868, -373, 1772, -2782, -3415, 419, -2236, -1650, 3706, 405, 3492, -3465, 4168, 1998, -4783, 2409, -3129, -3894, 4787, 104, -5936, 1907, 2294, -2720, -309, -5799, 2801, -4096, 2323, -6577, -1240, -3775, -2437, -1290, -51, 3432, 1510, -6830, -673, 4914, -3099, 2295, 1554, 642, 2683, 4278, 2429, 1984, 4513, 809, -4376, 705, -732, 1695, -6824, -2616, -4133, -1337, 2845, 3191, -3167, 2278, -6194, 4205, 340, -203, 576, 2700, 798, -7994, 366, 3294, -2799, 720, -2796, 3180, -2221, 1373, -975, 6505, 4250, -2788, -5421, -6611, -1436, 948, 300, -2038, -2075, -1498, -280, 695, -1193, 7681, -2589, -5498, 5221, 1341, 3761, -763, 6248, -2567, 13874, -2035, 67, 14877, -2583, 16304, -3556, 1938, 14346, 1621, -2398, -18681, 4445, 8558, -9559, -2072, -3795, 2727, 5198, -2256, -3637, -5259, -3430, -3607, -16699, -6915, 428, -1573, -7616, -1188, 3705, -3420, -780, -577, 5490, -2369, 339, -16983, 2400, -5976, -6624, -7442, -5646, -3143, -3391, 2333, -2548, -3187, -9250, 13459, 8097, 8029, -4379, 1572, 1300, 2976, -17279, -4801, 5087, -6665, 8134, -7146, -3697, 904, 3045, -4522, -3153, -4450, -5609, 2575, 3904, -3246, 698, -1760, 998, 473, -8355, 5646, -1525, 7769, -5622, 6026, -1970, -10616, -1667, -14527, -4992, 13432, 138, -433, -3863, 4222, 2326, 3674, -3871, -3987, 3966, 5095, 2675, 6104, 2747, 3673, 5878, -3128, 1061, -1527, 2146, 2677, 3084, 5711, 4464, 1933, -124, -3612, 125, -1416, -6151, 2382, 790, 2076, 546, -2524, -1137, 4872, 1277, 1905, 1532, 625, -1672, -1732, 1064, 309, -1714, -1752, -160, -1186, -292, -8124, 2400, -2387, -2625, 1255, -642, -5283, -2227, 3830, -2530, 1731, -1823, -345, -4230, 4888, -2044, -789, -3638, 1255, -797, -32, 8351, -4938, -409, -453, -1676, 7484, -823, 2642, 2443, -1498, -1207, 2430, 1573, -2087, -5683, 4601, -4805, 769, -1497, -3407, -1434, -1500, -3758, 3553, 3290, 264, 686, -7230, -1775, -6324, -3332, 3343, 1693, -6811, -1529, 2090, 2967, 2294, -1914, 3263, 259, -2888, 49, -2836, 1096, -6604, -5200, -8203, -5735, -197, 5249, -2709, -2665, -6797, 4977, -3996, -1077, 2226, 6720, 2032, 4187, 1920, -717, -4760, -5550, 2852, 2143, 654, 3271, -1552, -4412, -6323, -1483, 4711, -1302, -3976, 3236, -2096, -2825, -2409, 2444, -3174, 714, 3349, 1037, -2299, 4881, 1320, 1057, -745, -4885, 3296, 2412, -5034, 2376, -1239, 4370, 554, 866, 5869, 463, 2726, -4156, -4666, -1390, 212, 535, 850, 3900, 152, 1885, 768, -2537, 4057, -4757, 4882, 2542, -859, -3894, -1922, -2333, 657, 6918, 4420, -3976, 2557, -277, 4870, -2016, 1140, -2126, -817, 885, -3141, 1506, -3222, 2939, 541, -321, -3470, 4297, 960, 7036, -655, -2471, -2472, 6865, 3943, -3313, -3900, -1455, -6822, -5092, -3438, -3009, 1940, -3675, -2220, 4781, -2312, 3782, 884, 1184, -8536, 39, 3822, 422, 459, -3634, -9436, 4441, -3279, -659, -7382, 5784, 6521, -1250, -23, -784, 5837, 613, -1332, 949, 148, 3591, -3676, -153, 840, 4519, 2, -2603, 1259, -3071, -6004, 1324, 8160, -6903, -960, 668, 1502, 4575, 3304, 21, 896, -4011, -3624, -3997, -6211, -901, 4983, 2489, 4532, -6554, -11604, -4294, -3273, -3497, -1172, 5254, -2488, 2453, 729, 17, 3313, -281, -7995, 599, 1201, -5748, -1187, -4741, -198, -2671, 1433, 10689, 5626, 678, 4019, 267, -1662, 6963, 7068, 3848, -1083, -4604, 3176, -4612, 3467, 1049, 287, 6547, 4768, 1278, 5142, -522, 3583, 4297, 866, -1860, 978, 3775, 1706, -6762, 8703, -1034, -5832, -1648, -8889, 536, -1362, -5217, 2640, -5163, -19, -2040, 6869, 6670, -6781, -6693, -1652, 243, 989, -3332, 1832, 4682, -4442, -6408, -418, 432, -464, 4986, 1993, 3767, 8784, -3163, 2394, -5857, 24, 4453, -644, 767, 3666, -6951, 4554, -1067, -5007, 6873, 4862, -381, 495, -3495, 6548, -6747, 3549, 2852, -4681, -608, 646, -3554, -1095, 535, 5966, -6654, 1520, -3160, 1757, -3584, 1661, -1360, -2996, 1257, -1393, 5609, -188, -184, 290, 6758, 6328, -6265, -2588, -2937, 396, 1873, -3440, 1096, 1813, -782, 1273, 3365, -903, -6267, 4615, 9048, 3161, -3021, 4005, -1482, -7931, 9936, -4037, 1425, -7996, 10519, 5170, -868, -10376, 6639, -308, 4283, -2073, -5881, 5768, 5158, 1392, -3433, -1135, 3563, 4113, 2421, -1586, -4351, 6477, -2956, -5567, -3137, -1063, -1668, -4809, 5806, 3839, 276, -1598, 11362, 4576, -10586, 846, 1373, -3881, 7246, -7783, -3630, 1353, 6090, -3339, -190, 3453, 1543, 1241, -1161, 5353, 6067, 1173, -4633, -1811, 1860, 2135, 2158, -616, -2110, -6111, -2378, 700, -2859, -1201, 4813, -6405, -1106, 2071, 2418, -1363, 2328, -4513, -778, 2741, 5804, 686, -4261, 848, 2883, -1692, 4912, 4064, 312, 3373, 4165, -41, -5241, -437, -4115, 5880, 5655, -3201, 3573, 2473, 2905, 402, -1389, -3316, 2321, -6717, -317, -481, -64, 494, -3703, -3145, -2403, 2882, 4453, -4954, -2072, -4651, 76, 2691, -1932, -1016, 4249, -3752, -4246, -1205, -2332, 1014, 74, 1315, 1069, 2729, -4722, 2530, 908, 4104, -5976, -3387, 4303, 1467, -3658, 2504, -2143, 1224, 411, -2134, -172, 972, 3695, -3550, -1409, -10, 878, -1489, -3880, 6152, 2195, 3337, -147, 1455, -2298, 7319, 3098, -524, -2244, 2475, -8621, -2045, -5390, 332, -1931, 2616, -2458, 3896, -2434, -1339, -3351, -6553, -107, 1963, -143, 667, 5142, 3207, 5573, 2171, -5912, -945, -8238, -65, 3933, 4256, -3673, -3165, 4928, -2693, 3922, 4089, 341, 3558, 440, -6022, -2996, -495, 2697, 2655, -1877, -3865, -3322, -519, 5942, -1065, 1795, 7320, 5927, -270, -1092, 4721, -1933, -2898, 9, -5553, -850, -3884, 3353, -2994, 244, -3048, -1303, -72, -1847, -2509, -1811, 2108, 3938, 8178, 1713, -3294, -1249, -5696, -2842, 3834, 877, 5917, 65, 4058, 2062, 1438, -4190, 3152, 3822, -2327, -2159, 5952, 1687, -2385, 2123, -6005, -3061, 3510, 792, -4670, -9036, 4556, 8160, 403, 5158, 5504, 8183, -791, 1232, 2232, 32, -3104, -7922, 3293, -2669, 31, -3040, -2805, 12978, 4017, 6813, 2203, 2702, 4608, -2986, 10013, -6794, 1277, 5614, 237, -7426, 1437, 6088, -1496, -3613, -4716, -5922, 7673, 4867, -1682, -3797, -3535, 6117, 2691, -642, -1270, -4025, -1980, -3817, 527, -3656, -6051, 2874, -4942, -6792, 2824, 4065, -3725, -1442, -290, -10177, 4183, -189, -5121, 4630, -5231, -111, 953, 8087, -3147, 331, -5165, 1210, 7092, -2665, -2883, 1881, 1744, 5381, 5276, 2787, -7274, -2015, -6016, 622, 319, 1984, -2417, -6567, 3855, 3853, 4069, 4679, -55, 4721, 4253, -2614, 4339, 2307, 2958, -2371, -3343, -7233, 5562, -5769, -6938, 2047, 3008, -430, 5016, 4165, 4899, -3275, -601, 439, 7293, 3642, -236, 1390, -4034, -2157, 1206, -5570, -2223, 433, 1437, -5660, -2394, -4649, -1196, -3004, -5673, -3093, 2236, -8069, 5014, -4157, 2062, -1391, -7499, 7039, 3713, 4206, 5134, 6249, -4325, -948, 3089, 7789, 3362, 2543, 4321, 1784, 572, -1969, -1431, 5218, -1513, 6360, 5492, 1147, -2510, 1381, 4953, -1204, 3654, 1236, -6426, 6712, -1491, -5876, 580, 6623, 1157, 3240, 3352, -4703, -5112, -4197, 544, 5706, -5025, 3402, 13036, -629, 524, -3559, -4104, 2007, 2340, 980, 8137, -10332, -1834, -1122, -2003, -403, -3598, -4321, -2013, -2602, 7815, 4804, 2793, -3458, -4614, 4216, -6385, 8357, 6074, 5098, 385, 205, 3915, -4007, -1321, -3528, -2193, -6681, 6581, -1251, -433, -6213, 3545, 4620, 5957, -5019, 2600, -138, 5794, 4199, -3625, -5277, 1646, 4654, 5585, 2118, -3651, -6631, -3884, -4931, -1656, 3188, 215, -307, -3201, -6826, 5792, -3165, -2222, 286, 5919, 3818, 3025, -4615, 2568, -8416, 1159, 1709, 5035, 1679, 6650, -1288, 6631, -4069, -3369, 4942, 109, 2567, -4464, 4525, -2386, 204, -1661, -286, 4323, -7059, 3431, -4604, 1214, 2701, 1104, -2286, -3924, 3518, 4074, 709, -3880, -536, -1250, 3411, -254, -585, 3119, -3571, -1486, -5518, -1618, 2891, -141, -933, -4410, -376, -2416, -4731, 2277, -2790, 0, -2296, 2007, -6144, -3413, -234, 2364, -660, 600, -7, 3100, -1092, 2167, 1116, -4102, 5045, 128, 3794, -3380, 558, -1138, 500, -1683, 3337, -375, 5812, 1641, -390, 2061, -2838, 1475, -359, -1395, -776, 2158, 1960, -1486, 1063, -364, -250, -3226, -3266, 1466, 2514, 3003, 2621, 1219, -3598, -2565, 2571, 4114, -1517, 2333, 1479, 6103, 2413, -647, 1801, 2505, 998, 3588, -1098, -3270, -1242, -6554, -4385, 4651, 5943, -111, -2084, 2296, -359, -1995, -1594, -2431, -4891, 1264, 4035, -739, -3350, -5308, 2113, 316, 4461, 2291, -905, -6406, -374, 2693, 2618, -2186, 1920, -299, 648, 2558, -5976, -5654, -2591, 1533, 5489, 2465, -6122, -182, 7150, 554, 751, -3227, -4159, -2022, -960, 6172, 1242, 3480, -3466, 2027, -4091, -5042, 4769, -3376, -4628, -2313, 4396, -2028, -2405, 2756, 729, -6439, 371, -6750, 1145, 1210, 4121, -2847, -2451, 6946, 6813, 3024, 3120, -5793, 5397, -2651, -991, -8891, 1712, -9316, -1720, -204, 5728, 4869, 1609, 6440, -3760, -2333, 5034, 6508, 1960, -7417, 9575, -5434, 5777, 642, -1407, 3266, 917, 3758, 406, -4599, -5330, -5398, -2169, -2334, 966, 1377, 808, -3391, 197, 5434, -4639, -2236, -2847, -502, 641, 8260, -1818, -5705, -4554, 2800, 51, 5430, 3068, 2589, -567, -39, 1585, -5446, -6548, 4121, 681, -3465, 784, -3531, -2135, -6217, 874, -2406, 4476, -3344, 4021, -5635, 1552, -4951, 795, 3846, 2760, -4592, -2514, 2996, -5084, -3855, -3693, -5389, 2935, 4990, -3967, 5027, -991, 4270, -6951, -3816, -3109, 2699, -1960, 279, 1587, -406, -3377, 3646, 1721, -3387, -7956, -6743, -63, -3624, 1525, -1515, -5885, 1857, -2760, -4397, -6089, -4707, -4532, -330, 1973, 4559, 8603, 1806, -2073, 4878, 2985, -4596, -5340, 2382, -2546, 1509, 6287, -5145, 3426, 997, 2976, 5713, -2212, 3402, 62, -3319, -295, 2550, -1782, 2279, -3658, 1266, 3193, -3584, 10527, 1428, 2171, -3610, 2278, -218, -451, -3942, -1042, 619, -1295, 419, 1986, -2131, 551, 1933, 443, -5632, -2329, 5216, -3011, -158, 5136, 4355, -3486, 1212, 2898, 3774, 10, -2310, -5100, -320, -1290, -1654, 2429, -2873, 1924, -4153, -1681, -1130, 680, -1068, 769, -4259, -2642, 3563, 4150, 2360, 1467, 1584, -3540, -335, -6359, -1801, 6380, -5006, 2461, -1770, -668, 933, -2544, -548, -5213, 165, -2128, -2466, 3185, 2140, 3249, 4656, 3616, 915, 1925, 1354, 3545, -5518, -106, -220, -4991, 4528, -1863, 6048, -1070, 4690, 2108, -66, 892, -230, -718, 5214, 374, 1177, 1283, -2137, -4536, 4082, 3625, 400, -2915, -399, 3320, -2553, -4085, -254, 4906, -1149, -2341, 5815, 2745, -5215, -4281, 3032, -569, 1418, 807, -2924, -1460, 548, -1678, 1966, -2519, 2886, 1197, 5207, 3788, -2868, 1651, 4341, -3531, -1262, -5767, 6308, -2359, 2382, -4551, -3418, 1235, 1216, -1910, -3986, 1913, 5384, 556, -5337, 209, -3368, 2377, -539, -401, -1804, -1748, 2689, 2911, -4947, 393, 1538, 2355, 3286, -134, 4609, -2222, -3268, -785, -4047, -2706, 2076, 3322, 260, 5322, 7604, 2162, -2187, -5381, -5573, 6645, 2063, -2009, -42, -6031, -3043, 1470, -7616, -2157, 9108, -5506, -3406, 2048, -241, -3133, 510, -2978, 1401, 4913, -1579, -3823, -3987, -557, -5225, 4621, 3653, -33, 293, 2854, 4430, -1533, -5573, -2636, -5013, 4382, -1514, -289, 2567, -2992, -2435, -7861, -5746, 4740, 1569, -6859, -8167, -365, 4225, -853, -5232, 4992, 6258, -2746, -1439, 2631, 24, -1913, 3628, -37, -698, -1341, -3897, 6672, -2135, 2243, 6446, -3093, -5208, 1035, 4567, 2635, -4257, 2886, 2670, 501, 2713, -4240, 3886, 6734, 1081, -6763, -871, 5701, -3829, 580, 985, 4316, 1107, 3002, -865, 5086, 5342, 404, -498, 4599, 739, -4602, 1334, 2830, 2266, -2171, -407, -2838, -7631, 647, 2248, 1299, 1245, 2679, -3672, 759, -2923, -5128, -2563, -667, 1261, 8627, -4259, 4031, 3539, 4485, 520, -1692, 356, -6301, 376, 2934, -3929, -395, -3068, 2404, -4602, -251, 724, -187, -3742, 2470, -3217, 358, -2447, 1865, -7178, -499, -4800, 1111, 1368, 6081, -1831, -2717, -3660, 4941, -1837, -4163, -1909, 4719, -6695, 297, 5908, 2092, -1110, 4366, -5552, -1763, 1336, 2509, -1579, -1823, -6306, -1656, -2311, -221, -7500, -2384, 3106, 5635, -6685, 3138, -2255, 3472, 3922, 5078, -6438, 2875, 874, 3976, -3314, -5640, 1626, 3182, -118, -4086, 1865, -1723, 1447, 763, -1365, -523, -4208, -1811, -1109, -4796, -2438, 92, 759, -2514, -4661, -775, -4090, 864, -5746, -480, -3214, -2812, 814, -5304, 5040, -650, -3825, -3588, -6889, -1537, 1826, -3429, 494, 3521, 710, -1490, -2670, 2695, 5423, 594, -1835, 6468, -327, -914, -4072, -4927, 3032, -690, 2228, 2785, -1680, -3604, -792, -1097, -2281, 1258, 2610, -2549, -722, 1049, 2007, 1119, 2409, -496, 362, -1469, 3050, -1106, -3056, -5154, -1309, -218, -1284, 3435, -400, -4861, 1563, 5238, 600, 4292, 863, 195, 4926, 2094, -1018, -3887, -3981, -2059, 5450, -3824, -3459, 126, 1898, 4339, 6542, 543, 2110, 1759, -1192, 7617, -670, 6219, -3099, -4952, -4175, -3162, 2031, 2852, 4290, -264, -3798, -2414, 5348, 2033, 2123, 4400, -1719, -2961, -676, -2171, -10661, -51, -3938, 2510, 2740, 4258, 2060, 4024, -932, -2677, -1009, 1567, -5888, -4157, -1310, 3297, -3138, 552, -1990, -2963, -379, 5008, -1987, 1876, -5760, -8478, 120, 3758, -1197, 3570, -1319, 2121, -386, -2138, 2963, 24, 859, -4873, 1247, -2429, 1649, -2319, -5325, -3257, -956, -1366, -2119, -8667, 5000, 3825, -32, 1890, -2064, 2282, 3520, 15, -3334, 1805, 1310, 1753, -2762, -744, 2224, 4620, -3762, -911, 2246, 2742, -2904, -767, -1506, 950, 2217, -1816, 4185, 1317, -2390, -1962, 554, -571, 1281, 779, 342, -277, 2805, -1478, 2619, -3979, 5015, 3328, 2397, 1884, -533, 1282, 3369, 899, -2024, -3713, -2775, -1054, -1057, -2770, -544, -1057, 1231, -3513, -669, -660, 1498, 1457, 1320, -2460, -789, 3788, 2411, -1294, -2359, 3773, 1842, -717, 905, 2840, 3023, -5031, -2558, -1442, -1217, -1260, 4647, -2159, -58, 958, -4324, -2307, 1625, 4449, 1486, 4298, 1099, 218, -4752, 870, 696, -1947, -4150, -1435, 1177, -1297, -3923, 1716, -4335, -712, 2079, -3063, 6185, 1753, 1018, 330, -910, -3218, 1041, -1306, -1378, 2213, -1206, -5892, -5184, 534, 2284, -1369, 2888, -2029, -5244, -2172, 8815, -3145, -2127, 5695, 2459, -3474, 1088, 4948, 3039, -3164, -84, 7077, -194, -4272, -1809, 5040, -9316, 321, -3476, -3544, 5996, 3260, -5175, -3159, -1018, -4173, -1540, 1166, 2986, 83, -878, -1616, 3909, 2032, 2460, -2542, 1083, 2271, -2594, -3203, 3327, 5307, 2075, 5574, -2773, 4862, 5663, 2517, -2273, -3854, -2149, 1143, 4065, 4829, -4717, 8153, 3172, -5256, 4677, 976, 1062, 779, -2066, 1095, -16, 488, -1862, -350, 531, 3767, -4389, -3773, 4324, 2991, -3251, -3768, 3865, 1256, 4542, -61, 4027, 786, 1328, -3748, -1717, -2127, 269, -1609, 1509, 5113, 4852, 4417, 574, 1405, 1605, -145, 5677, -1474, 3905, -274, -348, -3368, -2113, -1491, 3665, 2769, 800, -2458, 2391, -1, -4394, 977, -4553, -2508, 4437, -1883, -684, 3017, -3214, 127, -451, 339, 2083, 1294, 571, 3431, -894, 3604, -2270, 3347, -498, 2811, 1728, 1876, -5269, -5324, 1514, -3790, 2135, 330, -20, 1676, 2451, 2392, 6559, -1055, -3109, 7342, 112, -2101, 1275, 3203, -1544, 143, -1016, -457, 1309, 1380, -1758, -4233, 4479, -1607, 629, 3826, 4960, -4360, -1807, -1165, -1012, -1303, 150, 2266, 382, -1932, -1644, -4728, 5137, -1412, -188, 59, 6053, -1634, -2748, -1755, 950, 908, 433, -3538, -1991, 609, -3744, 8902, 1274, -6419, -5815, -1257, 4641, -2034, -529, 6742, -2829, -1743, -4432, 4615, 169, -1043, -1099, 739, 1335, 9237, -1894, 5348, -3557, 8818, -4945, 4426, 4977, -4615, 454, 1297, -4429, 3039, 10669, -7812, 1805, 9339, 3728, 5094, 419, -1244, -1968, -2101, 3427, -650, -9455, 3652, 5701, -3829, -643, 2336, 9339, 2380, 3989, -1458, 2237, -1426, 5542, -3882, 6163, -797, -313, 2968, 1569, 2394, 7211, 200, -4347, 8082, 1228, -3829, 8965, 2356, -6027, -3411, 3010, -3421, -3389, -1350, 6796, 6530, 8408, 4522, -7491, 2583, 7028, 2494}; -static INT_T W1[CTEMP] = {17017, 19529, 17179, 18286, 8737, 13563, 15882, 18782, 19230, 19203, 19456, 25471, 12554, 10485, 19418, 13622, 11164, 14686, 16740, 20330, 15084, 24454, 21138, 18955, 15140, 21354, 13947, 17199, 22820, 21448, 21498, 21165, 14533, 16778, 15325, 15593, 18523, 21365, 15671, 17979, 21084, 25756, 22460, 13637, 23945, 15634, 18745, 14041, 23845, 25844, 17189, 22305, 8599, 18819, 10575, 14152, 19962, 17389, 17664, 20796, 20798, 22578, 17279, 26630, 24488, 17586, 22453, 20906, 13527, 16455, 26186, 9836, 25189, 15573, 18342, 17394, 14727, 19176, 14324, 17629, 8642, 13678, 8987, 20371, 20281, 16199, 22043, 13271, 19443, 21668, 19171, 16988, 15005, 17742, 21479, 23528, 19084, 13634, 12271, 22752, 16969, 19306, 22343, 21196, 5418, 18690, 13993, 12758, 16980, 15562, 15264, 16169, 20813, 15180, 15017, 27001, 16917, 12239, 19544, 22506, 23084, 21204, 19130, 20882, 25210, 17332, 24433, 15447}; -static INT_T W2[CTEMP] = {8535, 10292, 5604, 9277, 10630, 9521, 13822, 8070, 10129, 6732, 14744, 13360, 12231, 13296, 19848, 9294, 10397, 15903, 7895, 14529, 15805, 9358, 6117, 14469, 9985, 13497, 14509, 7510, 14038, 7025, 12413, 16935, 10073, 12142, 13526, 6777, 9707, 13967, 13092, 15507, 12378, 17038, 7935, 9505, 8430, 9915, 10257, 10117, 11709, 6992, 11311, 7528, 15950, 6808, 13814, 9106, 9278, 8031, 11968, 15385, 10298, 11967, 9841, 9242, 14062, 10776, 8999, 10246, 7690, 10579, 12271, 13767, 9685, 10398, 9605, 8170, 16233, 10247, 14005, 8778, 10210, 14752, 8010, 8981, 12800, 5472, 8930, 9337, 12519, 10456, 6350, 10933, 9849, 13346, 9544, 18141, 5637, 12034, 11230, 18919, 16873, 6865, 10485, 8152, 12424, 11561, 12696, 5076, 10348, 10152, 12801, 8833, 11424, 15754, 11842, 12732, 7114, 6708, 9603, 11161, 11218, 8709, 7457, 9017, 10969, 9211, 10775, 11094}; -static INT_T W3[CTEMP] = {12368, 13004, 12100, 11959, 13254, 16515, 12059, 13361, 15720, 13710, 18765, 13356, 14064, 13519, 17339, 16531, 14603, 12099, 12376, 13623, 13499, 10513, 10804, 15041, 11999, 10641, 15260, 10878, 13068, 13612, 14244, 11100, 12406, 11941, 13466, 9906, 14022, 13501, 12064, 9390, 8943, 13008, 16716, 11632, 9350, 15337, 11673, 13357, 12354, 14307, 13764, 14733, 14145, 11535, 13445, 17489, 12084, 12721, 11737, 9927, 15752, 14964, 16905, 12186, 13966, 13273, 9645, 12992, 13590, 13313, 10062, 11590, 15541, 13678, 12459, 13440, 10833, 12467, 15060, 9469, 14126, 12190, 11136, 14279, 11990, 14388, 17415, 9278, 13177, 16070, 14818, 13810, 12733, 10381, 11791, 10578}; -static INT_T B1[CTEMP] = {180, 1676, -1325, 948, -11450, -1903, 3108, 5218, -1728, -848, 1339, 876, -4734, -1628, 1973, -731, -6950, 3353, 1493, 3465, -2195, 777, -2911, 1561, 2218, -452, -2126, 1694, 606, 2473, 3899, -1167, 577, 3982, 1148, -1973, -1620, -980, -2528, 868, -232, -566, -2179, 2448, -1979, 3481, -74, 5685, -1635, 1837, 2168, -1425, -10641, 3334, -4853, -2609, -321, -2292, -124, 754, -636, 1792, 4139, 209, -2071, 1764, -751, 213, -3664, 4274, -348, -8290, 1316, -2588, -1305, -428, 3135, 2659, -3311, 3626, -12036, -689, -8800, 2109, -1512, 5142, 2073, 301, 3101, 3553, 3708, -3655, 6149, 726, -40, 4115, 3405, -915, -7506, -2492, 2708, 1910, 1255, 3098, -24075, 1870, -2870, 2683, 2949, -4451, -84, 2500, -177, -1529, 2347, -2255, 3049, 2079, 3721, 23, 1895, 1990, 2881, 611, -3507, 3717, 2386, -3798}; -static INT_T B2[CTEMP] = {17963, 9447, -13669, 12815, -8243, -8824, 2967, -7024, 8722, -11486, 4106, 6231, -6498, -6606, -272, -10412, -8946, 4804, -9936, 2516, 5110, 10331, -14780, -5533, 9842, -5167, 1159, 21953, 5356, -8716, 12087, 1884, -3867, 10605, 1779, 23458, 7846, 2036, -6009, 2654, 4956, 1255, -13501, 10782, -10777, -11552, 2694, -8956, -7793, 15163, 11480, -13973, -4902, -11633, 3246, -11442, 13560, -10856, 6728, 5412, 7110, -5569, 9364, 5586, 5453, 9759, -10355, 8006, -12581, 4042, -5456, -4378, -4621, -9744, 836, -12827, -2459, -4682, -9695, -3025, -11965, -4336, -12314, -7059, -8061, -16511, -6928, -10045, -645, -5724, -12567, 12, -10742, 2269, -11631, 7433, -17066, -7343, -9851, -164, 6066, -15257, -9894, -1566, -5798, -627, 7548, -20030, 4990, -10485, 7969, 12470, -1690, -589, -9764, -106, 18305, -12524, -594, 7462, 12825, -74, 4420, 8925, -3829, 12625, 7752, -8890}; -static INT_T B3[CTEMP] = {2321, -118, -14335, 8047, 12329, -5667, 7503, -22247, -13240, 3162, -16110, -436, -3507, 116, 21198, -631, 18399, 1528, 1610, 9694, -14263, 8361, 4347, -7968, 15000, 7659, 7985, 18137, 5171, 4313, 5091, 78, 183, -2147, -2284, -6013, -5593, 17838, -3277, 15919, 3949, -7977, 5904, 3574, 13814, 2350, 18493, 13371, -4793, 7617, -626, 5870, 2164, 10701, 9230, -15901, 4720, 6070, -9001, -24647, 12541, 2367, -859, -5111, 6005, 10910, 484, 1498, -4915, 3416, -11711, -13648, -5874, 1230, 4291, -4163, 1937, 8692, 2231, 7402, -16034, -3707, 5349, -4771, -26271, -5493, -4282, 23752, -8801, -6893, 7420, 6986, -3064, -15139, -18608, -1281}; +static Q15_T F1[1 * 1 * 1 * CIN * CTEMP] = {5647, -1502, -7553, 9305, 4169, -3511, 5768, -1740, 2189, -10762, -2072, 2105, 8147, -2226, -3478, 6894, -4989, -1225, -1052, 3223, 2835, 187, -8015, -1954, 7735, -6578, 3594, -2792, -7423, 3046, -460, -2090, 9823, 1617, 7022, 3795, 4573, 6366, 4820, -8578, -1902, 3657, -5971, -6023, 4998, -11970, 1294, -3900, 8266, -1968, 3305, -8012, 10128, -1761, 2481, 3506, 1995, 1607, 3504, 2156, -4497, 1873, 5170, 1091, 1625, 4395, 528, -6206, -3641, 7600, -7175, -3123, -1529, 7513, 2189, 2205, 197, 824, -7992, -7497, 6485, -1067, 12214, -7476, -2371, 8122, -3530, -7981, 95, -5412, -7581, 329, -3165, 2783, 3227, 7431, 107, 7325, 11, -10290, 3017, -3696, -1911, 4747, 13048, 3998, 5457, 6305, 5505, 1070, 2236, -6220, 2900, -4816, 2226, -720, -2155, 9079, -2798, -5857, -1181, 4892, 3620, -3150, -9537, -5267, -1218, -66, -4405, 3934, -11278, 8412, -2100, -544, 3050, 787, -857, -5018, 504, 5199, 2862, 3108, 6487, -1019, 7989, -7066, -1135, -723, 442, 4407, -4157, 6203, 6847, 1563, -8250, 7772, -6175, 5326, 5524, -4206, 4579, -1926, 1369, -4916, -166, 2073, -1070, 1524, 7746, -6054, 1159, 1143, 544, -2335, -8732, 5922, -1917, -6708, 1927, -7531, 4538, 8959, 5073, -1378, -2915, -3756, 2680, 4794, 2917, 4262, -1785, -301, 8447, 5535, -5222, 2306, 6775, -1192, -4641, 7194, -881, 6141, -681, -6712, 8749, 3717, 2676, -1729, -3059, 8428, 6628, 4350, 2941, 11996, 9453, -792, -7168, -4372, 7724, -3749, 10496, 6122, 2245, 4841, 1398, 9183, 3365, 7504, -3962, -4160, 6347, 3671, -781, 1743, -3610, -7199, 1290, 462, -205, -1230, 31, -7259, 1188, 2634, 3023, -84, 4392, -7913, 6836, 12489, 4398, 4260, -4780, -2173, 4709, -2024, -5561, 1100, -5296, 1208, 7689, -2640, -410, 4195, 9372, 4189, 879, -1541, 5009, 9403, 3959, 4575, 3612, -356, 5412, -6370, 2349, 1137, 8175, 6530, -5105, -520, 9719, 3926, 2462, -941, -4688, 4880, 3179, -2203, 1182, -5729, 904, -2621, -2621, -4389, 4793, 8366, 2788, -3577, 2685, 8770, 6323, 1680, 9402, -4039, -2041, 6528, 9144, 4755, -913, 1049, 2715, 11985, -3276, 6198, 3623, -551, -4933, 1270, 4956, -6608, 3294, -2755, 10200, -8212, 1255, -1543, -1516, -604, -5208, 5610, 7358, 1666, 7865, 5376, 983, 4830, 17623, -6096, 13371, 2384, 4321, 2703, 5427, -4702, -862, 1866, -1953, -2645, 977, 5275, -88, 3359, 4728, 10823, 12210, 11048, -270, 2499, -3425, -2403, 5912, 9, -12209, -2114, 2467, -7428, 637, 3138, -354, 6650, -7600, -6354, -6179, -1072, 793, -1789, -6443, -2108, 9374, 1118, -8521, 1460, -1185, -1810, 1113, -1530, -1314, 962, 5213, 221, 69, 6403, 1725, -4855, 522, -1289, 4939, -2568, -1769, 4289, -6264, -5798, -4541, 490, 5470, 7726, 3147, -2186, -7494, 5025, -3262, 3144, 3306, 1112, -3543, -5099, 2393, 3953, -3382, -128, -3101, -4819, 4896, -5177, -3621, 1837, -4276, -174, 957, 12080, 3690, -1228, -597, -6413, -5576, -11349, -214, 2310, 4438, -2967, 1770, 7337, 5305, -2289, 7228, 5144, -4306, 7937, 2819, -214, 2107, 4691, -2540, -293, -282, -4000, -1935, 2758, 3950, 2405, -6978, 8680, 3902, 2468, 5203, -896, -3301, -1162, 888, 3361, 1283, 5571, 3951, -3928, 2475, -137, 2210, 2609, -3188, -4436, -1114, 215, -2381, 4729, 4188, -3974, -1547, 1646, 2820, 3480, 3487, -698, -587, 3782, -42, -3763, -1669, -1155, 2516, -3625, -252, -178, -4694, -3587, -5573, 3116, 3857, 3710, -956, -8638, 1767, -7624, -1871, -2481, 429, -5948, 5278, -8459, 5045, -2315, 6215, 1913, 4319, -686, 7174, -4847, 1062, 4779, -879, -990, -3208, 4286, -3201, 1707, -6203, -2347, 32, -6634, -72, -4678, 7856, 3154, 805, -3417, 5045, -3326, 2688, -2945, -1976, -2406, 3616, -2406, 1604, 975, -2068, 7626, 4682, 7346, -5623, 2841, -1699, 6255, -1909, 3627, 175, -5471, 2998, 3101, -3433, 4482, -2822, 5856, -27, 1612, -1999, -1031, 1026, 5508, -125, 5164, 4432, -5098, 11757, 4971, 19, -3547, 2728, 6500, 4712, 6296, -9141, 999, -1336, 1085, 640, -1007, -37, 3604, -3291, -533, -552, -1880, 11637, 2277, 5645, 828, 4758, 1948, -6581, 2126, 125, 1804, -7882, -4412, 1116, 10066, 2499, 6391, -1061, -5314, -5127, 3956, -1122, 5436, 1843, 540, 8954, -4060, 7632, -4397, -3231, 1781, -6399, 1266, -1678, -3800, 1449, -4788, 675, 1455, -5285, -2950, 7905, 4870, 2956, 75, 7440, 2015, 3924, 6023, 2018, 654, 4360, 1167, -2138, -4702, -3158, -9666, -1277, -1561, 964, 5367, -3178, 5186, 4966, 6648, 6756, 2311, -5807, 4905, -3072, -1318, -9288, 4338, 7301, -640, 1186, -276, -9606, 4807, 6278, -9188, -6387, -5902, -397, -4614, -3149, -321, 7225, -2958, 8934, 8169, 1042, 4501, -1256, 1010, -8546, -4900, -10039, 1128, -2137, -5275, -7872, 7548, 735, -722, 4003, 935, -514, 8273, 2945, 2596, 88, -2551, -2276, -4734, 3838, 1648, 6781, 9786, 4433, -331, 8371, 800, 619, -5702, -655, -7019, -5549, -6258, 5724, 962, -2421, -475, -168, -2952, 4680, 1910, -1628, -9278, 9653, -512, -60, 272, 8379, 8674, 3656, -9566, 9684, -2834, -2537, 2828, -3126, 4000, 2764, -1499, -6955, -7824, 284, -4516, 3267, 1241, 4617, -14, -4892, 1962, 1144, -37, 13467, -2203, -3585, 3505, 5146, -1252, -3156, 3466, -2958, -1453, 7570, -4038, 7792, 4391, -5711, 1978, 2684, 1200, -5394, -265, -1780, 222, -4314, 3738, 4060, -2165, 4297, -509, 7596, 1148, -2211, -1089, -2160, -2678, 2189, 4391, -1253, -4438, 4316, -5649, 241, 7023, 2091, -5876, -1314, 492, 2820, -3612, 465, -2694, 936, -506, -7855, 3807, 624, 3397, 7667, -5416, -5629, -1643, 2475, 2328, 4703, -1929, -1913, 8823, -1905, 900, 1248, 312, 1716, 614, 628, -2167, 7106, 35, -2054, -2882, -4322, 8530, 4919, 6134, -5951, 9097, -851, 6451, -1111, -2277, -2253, -2047, -6578, -5245, -718, -3368, 4402, 1998, 3812, -4521, -2441, -6902, 356, 3791, -14081, -4555, -4798, -4257, 5856, -5753, 1653, 2468, -2099, 5003, 2839, -1210, 2970, 3006, 3324, 5673, 6684, -1218, -4343, -624, 2302, 5780, 3684, -5854, -5215, 7455, 4126, 935, 2975, 3551, -3919, 2921, 359, -1612, 87, -4818, -2740, 2394, -6541, 4035, 4298, -3868, 6524, -41, 7827, -8084, 3060, -2297, -9473, -5175, 3038, 1535, 235, 659, -4727, -1158, -5783, -1187, -3661, -3866, -701, -1357, 2811, 2512, 3586, 4357, 3042, -770, 5714, 547, -856, -4045, 9289, 4443, -10254, -2220, 1109, 6477, -3332, -5234, 678, 12051, 1562, 4838, -1642, -1091, -4914, 6735, -4322, 1292, 9649, 4597, -1917, -5877, -6028, -716, -6943, -995, 4963, -534, -6509, -1536, -4375, -8056, 4777, 1109, -6212, -7238, 3227, -2994, 8737, -3120, -5105, 747, -3642, 3843, 3227, -738, 695, 1467, 296, 970, 6204, -3247, 3802, -1675, 866, -3687, -14441, -2552, -6902, -1881, -4991, 5842, -2013, -4095, 1562, -1868, 1628, 5017, -6258, 2605, -10390, -5330, -1922, -2132, 1719, -2901, 2958, 2414, -5385, 2536, -6006, 272, -2902, -3587, 2799, -3488, 2327, 4032, 1530, 3682, 4240, -1222, 2801, -4200, 1513, -1084, -867, 6022, 655, 7948, -4692, 5804, -1205, 219, 238, -3507, -2413, 301, -7158, -390, -2171, 1528, 2615, -447, -1105, -607, 253, 1572, -3231, 1489, -3095, 2676, -3071, -2035, -1281, 2062, 2543, 3932, -5773, -5138, 2467, 2208, -8241, 5189, -1114, 545, -2905, -2963, -292, -6519, -4234, 4215, 3741, 1406, 1535, -6910, -4696, -6332, -7213, 3371, -3472, -8629, 5069, 415, 6666, 9218, 47, 3194, -3917, 5275, -10448, 3619, 1008, 10708, -4033, 4254, 2459, 7458, 8628, 2886, 3681, -2971, -2150, 5017, -492, -2928, -10531, 4076, -6471, 5186, 2503, -128, -4909, 9382, -2063, -1510, -5544, -4282, 5469, 2043, -6271, -290, 8230, -7957, 669, -5458, 739, 2463, 5153, -3092, -304, 3161, -3372, 7698, 4090, 2160, 325, -3907, -1872, -2165, -743, 3412, 3741, -5584, -438, -9338, 2515, 1422, -6008, -6289, -4228, 1923, -1499, 4143, -3509, -1713, -206, 1897, 5140, -3164, -2030, -5772, -2455, -5541, -4290, 643, -5058, 36, -1846, 2587, -1506, 429, -1114, 3492, -1487, 842, -4001, 2080, -9719, -3330, 210, 712, -4454, 796, -669, -6765, 3535, -5977, 1192, -8716, 4714, 331, 4596, 5082, -4125, -8725, -5093, 2113, 0, -12833, 1490, -7501, 6515, -7667, -895, -4410, 5530, -1468, 1165, 2906, -2146, 1963, 6210, 2636, -6488, 5930, -7734, 6039, 1902, -3699, 2363, -5772, -3350, 2816, -504, 5346, -3857, -5281, -1696, 12163, -1288, -1866, 4412, -557, -3400, -2909, -4906, 2744, 4297, -7955, -9032, -217, -213, -2751, -160, 9526, -3831, 1500, 626, 5907, 1727, -543, -1938, 2573, -9890, 3560, -1114, -6042, -3130, 6516, 7898, -5467, 7168, -924, 5488, -1341, -2632, -4533, 1240, 2346, 6794, -5228, 7981, -6076, -103, -4026, 1489, -10164, 424, -3326, -4015, -6020, 2884, 1285, -7001, -2132, 2801, 3875, -3070, -1676, -5033, -5397, 3738, -4972, -2381, -4996, -938, 1956, 5520, 4523, -3725, 1766, 2677, 4110, 3321, -5491, 2735, 293, -5947, -3739, 1075, 2447, 5585, -1018, -1700, -1242, 6332, 2296, 607, 7309, -3608, 2658, -219, 1474, 6698, -1703, -6544, 4623, 3953, -1637, 2973, -951, -3144, 4602, 909, -2505, -2098, -1388, -11596, -2505, -6044, -44, 5366, 1033, 7385, 1603, -4747, 8333, 8224, -3543, -6406, -2739, -8539, 5700, -375, -2767, -465, 3871, 470, -1481, 8464, -1089, -6101, 4186, 1299, -569, 1894, 39, -9578, -1457, 8271, -1928, -1020, -10104, 1594, 14418, -1509, -3740, 2215, 1486, -807, -1147, -4834, -4675, -541, 5331, -1858, -790, -8705, 616, -2968, 4879, 848, -2254, -3664, -823, 10749, 7337, -2632, 960, -3235, -6361, 2837, 11319, -6879, 2210, 2389, 2449, 232, -1490, -2233, 1683, 1785, -4136, 2710, -1976, -5217, -2640, 4577, 2558, 9137, 8569, 4173, -3605, 3334, -1617, 4341, -6381, 1058, 6153, 5515, -6114, -3793, -6236, 1226, -6594, 1398, -2302, -368, -158, -3138, 1859, 513, -2340, 5561, -9077, 3093, 4084, 2280, 2914, 4390, -1977, -3339, -3108, -5267, -7735, 5394, -8353, 5413, 6875, 3978, -2344, 1139, -5144, -239, -1385, -2015, 749, 10129, -4502, 1384, -2936, 4209, 1569, 1221, 5187, 5322, -3982, -3146, 5523, -3620, 1925, 217, -8448, 5278, 4716, 1073, 88, 3580, 442, 4286, 2411, -8699, 8173, -2709, 15747, -2814, 3919, -3602, 2947, 3402, -8147, 787, 1378, 3435, -5134, -3312, 4376, -3301, -4305, 1390, -4878, -3324, -8812, -352, 1721, 2597, 3561, 2348, 537, -4281, -4351, 359, 2841, -4273, -3656, 61, -9043, 6520, -9700, -2357, -6275, -2199, 3007, 9091, 3336, 4802, -5862, 957, 7511, -3349, 3407, 909, -1322, -2817, 8871, 1395, -2875, 6765, 7110, 8335, 4226, 6333, 4068, 6885, 8151, -4749, 3206, -4826, -4526, -4836, -2756, 774, 4906, -7011, 6059, 9576, 6452, 1121, 6427, 3681, -7027, -1971, 3636, 5372, -542, -2103, 7351, 7797, -2494, -2223, -5478, -3336, 4449, 1742, 1793, -1211, -7018, 8723, -4872, 3171, 2040, -366, -5607, -5133, 696, -662, 4206, -2412, -3312, -4433, 5151, -609, -6771, 7946, 642, -2105, 5029, -3140, 8665, 4291, 5984, 5347, -7429, 1971, 13136, 3185, 5985, 1035, 4172, 1121, 2789, -2432, 4216, 710, -3267, 1335, -5185, -6489, -1220, 2297, 11131, 5529, 5948, -6547, -744, 6099, -5487, 1849, 3517, 3806, -3892, 658, -4946, -2412, 105, 2845, 11179, -3724, -2078, -9708, 3800, -2592, -3829, -9838, -5751, -3911, 4933, -4110, 2004, 6111, -6887, 8421, 4730, -136, -4195, 499, 5091, -5955, -12127, 785, -3013, 424, 533, -12097, -5298, -922, 3852, -7508, -4488, -2917, 1802, -4202, 5511, -176, -4961, -5692, 7949, -5787, 4512, -3100, -2167, -3083, 4932, -1667, 497, 2306, 952, -13249, 310, -8916, 289, -3943, 6805, -3561, -1931, -414, -3538, 2671, 2934, 409, 2672, -4732, -2762, 5280, 2208, -7041, 6055, -9497, -12393, -6878, -7755, -5662, -8010, 7317, 1874, -5620, -1674, -960, -227, 3776, -3658, -10434, -1682, 117, 1157, -4769, 1607, -6527, 8029, 394, -865, -828, -1006, 2357, 2550, 6976, -5735, -4907, 3937, 9029, -4298, -9315, -4801, -4552, -29, -4772, 8053, -3882, -5677, 481, 1184, 5405, -7422, 3084, 5170, -1565, -14999, 5406, 4027, 3918, 3657, -1518, -4444, 633, -326, 5272, -2166, -5338, 5000, 3501, 4350, -1489, -4925, 4976, -4210, -2911, -602, -8751, -3253, 3687, -3874, -3167, -1721, 9723, -4211, 3310, 5152, 6732, -3559, -5384, 1359, 2055, 1292, 4385, -6655, -1080, -1550, -5549, -274, -4742, 1261, -565, -1661, 3883, -428, 1907, -5591, 6262, -1418, 913, -2256, -5102, 2024, 3712, 9099, 1692, 5682, -3090, -520, 489, -6397, -2965, 5058, 2775, 276, -1029, -8370, -3781, -6361, 9300, 617, -6931, 1780, 4700, 6939, 989, 2694, -6564, 5441, 4450, 4146, 3812, 4185, -2249, -4457, -755, -4662, 3527, -1064, -6334, 5442, 2490, 5922, 465, -1920, 1954, -4107, -4118, -4076, 2361, 5674, -650, 4975, -4516, -8047, 1234, -367, -1732, -4585, -3463, 3702, 636, -6919, 173, 3791, 4692, -5332, 1752, -5736, 3347, 2112, -4898, 5228, 4393, -1996, 6004, -1908, 4694, -4091, -10340, -1964, 933, 5419, 6056, -1264, -6650, 84, -6439, 4243, -834, 1412, -6262, 8991, -3438, -4242, 8993, -6096, -6931, -1735, -5431, -2737, -12888, 899, 3548, -834, -4133, -3928, -1885, -365, -1806, -4936, -3675, 2474, 634, 6314, 7959, 2111, 1518, 2606, 3036, -7179, -2245, 177, -4670, 917, 4366, 3354, -3877, 4587, -6489, 9367, 846, 5266, 8925, 1810, -4454, 2901, -4005, 4511, -98, -843, 1478, 4465, -410, 6896, 1924, -3843, -3722, -299, -4901, -955, 1689, -3594, -5512, -874, 531, 2518, 1686, -1128, -4129, -804, 812, -2226, 10917, 324, 1884, -1738, -2262, -3440, 2647, 4885, 6276, -2400, 6730, 9059, 1489, -5259, 2642, -1688, -2495, 7755, 7955, -1060, 3935, 3831, 4673, 6807, 4248, 64, -3259, -1569, -4155, -8677, -4086, 411, 4654, -4131, -4066, -6834, 5474, 8081, -6936, -4597, -1553, 3425, 2122, -1487, 676, -5534, -3741, -3257, -7207, 5808, -494, 315, -4505, 3640, -1031, 6125, -2919, 3291, 5326, -1345, -1273, -4278, 986, -2627, 4029, -38, 11562, -308, -435, -6952, 4928, 1433, 3891, 1732, -4403, 2132, 2658, 7470, 2133, 3917, 857, -903, -9605, 1022, 6826, 4880, 2561, 4424, 3521, 5797, -1378, -3468, 118, 3769, 3010, -8156, -2295, -1888, 8306, 1004, 901, 2662, -7409, 4002, -8371, 144, -4875, 6831, 1128, -1522, -3100, -3688, -10842, -4144, -1460, -2519, 770, -2913, -8911, -1236, 8964, -7153, 3333, 2518, -3113, 6081, 1283, 2934, 7998, -3067, 11466, 988, -7128, -8289, 6721, -3421, 5059, 3593, -36, -864, -4956, 6131, 221, -2102, 5184, -2280, 1992, -6106, 6195, 7344, 1301, -2059, -5523, 1895, -13472, -405, 2038, 7437, -1137, 5154, -1971, -7134, 6040, 1638, -1806, 5852, -5522, 4474, -6259, 785, -3881, -2632, 3278, -5444, -323, -6519, 45, 7532, 94, -9200, -2834, 2533, 8512, 864, -10699, -5060, 6560, -1008, -2010, 605, 2092, -2724, 3130, 4107, 4223, 4092, -358, -5314, -5509, -4646, 4351, -9626, -6685, -4484, -2058, -5633, -4022, -9542, -3781, -5608, -3976, -6949, 3573, 7937, 1684, -4031, 6423, -1107, -2870, -3751, -711, -3219, 1720, -4229, -5544, -531, -6607, -10902, 5602, 4126, -4509, -8305, -3472, 5829, -9380, -5654, 1776, -1578, 3711, -5634, -1983, -3340, 6344, -5865, -5357, 6661, 3787, -2443, -7630, 2158, -3139, 152, 1835, -7223, -8407, 9585, 2759, 148, -6940, 5635, 8386, -2186, -2110, 4353, 4879, -2922, -9560, 8183, -4250, -4240, -5269, 172, -2753, -1338, 1289, -1733, 1687, -3591, -3520, 423, 4094, -5203, 2528, -9512, -2929, 2625, -4389, 2738, -5804, -4502, -4036, -5094, -3279, 4361, -3722, -2365, -959, -6234, -4393, 5992, -4758, 1722, 3204, 5944, -3509, -2572, 8072, -5131, 6382, 2891, 7457, -2548, 372, 2318, -5542, 2719, -533, -9872, 4763, 2597, 6386, -1761, 4730, 6814, 4563, 2281, -7858, 5920, -3881, 6909, 5244, -3360, -2724, 5743, -6890, -858, 2744, -2455, -179, -1375, -2070, -3425, -5403, -3542, -7857, 8171, 6081, -431, -3913, 6207, -2772, 2394, 3423, 1575, -2491, 5831, 819, -5074, 4551, 1696, 5254, 7582, -2497, 5844, -3639, 1174, 1324, -1500, 4856, 8368, -590, -9969, -3403, 2724, 2228, 987, 6913, -4463, 3675, -2892, -1551, 4239, 5466, 1836, -6505, 9830, -3307, -3251, 6785, 3307, -4350, 6560, -5758, 2888, -3966, 889, 3812, 5659, 5129, -3613, -1810, 4667, 11973, 8861, 4742, -223, -2527, -4652, -2331, 1459, 3409, 164, -2706, -944, 4252, 1648, -10078, 6349, 4378, -6000, 8488, 474, -802, 6580, 4164, -4134, -1233, 5852, 5308, -5593, 6340, 1276, 4516, -7433, 10169, 4811, 1652, -4831, 4314, -8271, -113, -3739, -4792, 4778, 2180, -3697, 200, -4308, -370, 732, -1237, -3056, 1404, 5602, 5240, -5453, -3152, 3402, 3029, -6228, -2223, -4361, -3661, 5635, 842, 1126, -5064, -8311, 19, 354, -92, -19, -346, -4004, 5662, 3057, -8404, 1562, -1955, 964, 3916, 6355, -6188, 3100, 2666, -2862, -1483, 1095, 1274, -2510, 3722, -2843, -5812, 449, 2864, -4693, -5237, 966, -4576, -4159, -2680, 6764, -5414, 3814, 6156, 2133, -2398, -6265, -11078, 47, 5405, 2132, -2036, -5653, 4110, 1219, -3891, -357, 1221, -541, -6031, -4757, 3741, -6820, -494, 1620, -5583, -416, 1215, -1522, 660, -7735, 7650, -5234, -4319, -6897, 10511, -2303, -2873, -28, 1185, 467, 7172, 11120, 5691, -5781, 1336, -1082, -7319, -468, -1858, 2542, 5369, -2908, -6372, -4712, -4367, 998, 860, 5538, -21, -3849, 7106, 3147, -665, -4726, 1774, -4545, 4243, 5274, -416, 4783, -5335, -2113, 2902, 8115, 4455, 364, 12269, -4193, -829, -5719, 7350, -4955, 13361, 4395, -487, -2694, -2965, 2638, 2452, -5859, 1709, 4659, 530, -9251, 6308, -7789, -8211, 117, -4796, -8926, 3659, 5035, 8870, 3537, 7052, 5547, 7919, -2944, -1171, -5269, -5838, 1233, 9775, 5597, 1937, -8255, -3681, 3722, -2149, 1570, -6027, -3663, -213, 4881, -4605, 4542, 4197, 987, 9535, -3463, 4994, -4658, 1593, 9914, 4132, -2220, 5688, -9202, 2149, -1036, 6732, 1477, 5295, -4328, 5249, 800, -2881, -6951, -7780, 5491, 4785, -4414, -3383, -3674, -5290, 10038, 5365, -2467, -159, 2500, 5833, 2067, 4887, -1878, 5335, 1141, -2667, 1223, -4247, 5187, 6446, -7613, -287, 8632, -5139, 3471, 4755, 4341, 8954, -1569, -1706, 6035, -4507, -1031, -1543, 2008, 547, -2045, 245, -3906, 1882, -2162, -8045, -7297, -1522, 4907, 3475, -1539, 2911, 7523, -4679, 5310, -4858, 7323, -2938, 717, -136, 916, -1724, -5325, -1513, -332, -966, -398, 232, -6041, 2708, -709, -4197, -3055, -5531, -2530, -3418, 2334, 2336, -1504, 4586, -4259, -2008, 3929, 4353, 4932, -4509, -4261, 1553, -10839, 1533, -9224, -5697, -381, 3811, 2073, 4108, -1879, -4603, 7545, -374, 4292, 2864, -2945, -4038, -3678, 1525, -4373, -2001, -713, -5577, -2103, -2804, -6291, -7015, -7964, 5524, -6372, -292, -4155, -2224, -47, 5000, -10278, -9740, -5363, 1251, 1461, -10593, 2295, -3915, 980, -4468, 2700, -2970, 5377, -8308, -2773, -113, -8731, -1721, -222, 5665, -10948, -4832, 1944, -2594, 3962, -6599, 5712, -1513, -1604, 734, -1913, 2078, -4680, -2065, -2845, -8832, 4410, 378, 2437, -3081, 10002, 6978, -4088, 4747, 3528, -4886, 5833, 7346, -2862, -6511, 585, 4439, 6133, -7885, -4325, 2182, -4957, 3974, -2410, -10047, 4747, 5678, -1507, -1898, -1408, 3047, -3406, 1938, 94, 3001, 2549, -1154, -3879, -2568, 117, -470, 3857, 2881, -8059, -5076, 1499, 194, -6224, 7357, -5986, 1830, -669, 2007, -524, 2148, 2094, 4393, -6409, -8211, 2445, 2817, -8283, -5688, -2195, -5598, -6015, 1799, -2312, -286, 1546, -6151, -2654, 7839, -372, 4646, -7378, 4624, 187, -2344, 1424, -4163, 1202, -1443, -1880, -5499, -5587, -3951, 499, 3479, 3577, -7278, 4050, 1637, -1766, -3561, -2097, 884, -2509, -3999, 1218, 4314, 4060, 5246, 2796, -2695, 496, -3032, 2269, 2240, 3162, 5992, -189, -2490, -597, -6245, 4318, 11008, 11173, -5597, -1688, -5940, 8608, -1366, 2581, -1488, -8134, 2284, 3058, 1668, 6651, 1613, 2757, -9920, 1891, -194, -1791, 1660, 6337, 3130, 3932, 6670, 4350, 3818, -3388, -5383, -1407, 6361, -404, -3263, 443, -1528, 753, 5718, -2699, -3684, 8569, 1421, 2774, -3243, 6896, 1271, 1440, 3413, 4698, -298, 8474, -2659, -1399, 3048, 195, 2726, 2550, -8355, 3575, 2369, -5484, 6041, -7932, 4980, 7213, -4253, 1810, 3836, -4930, 6700, -6735, -8000, 4080, -3637, 3729, -3878, 4144, -10729, 1740, -2794, 6364, 712, 4288, 3104, 2438, -4467, -5265, 387, 5193, 2472, -3068, 2487, -4917, 1748, 5300, 3694, -1537, 2448, -7062, -5024, -625, 2994, 6814, -7710, -7857, 5740, -977, 108, -6565, 4064, 3664, -6849, 1216, 5471, -3143, 2195, 5172, 4744, 6927, 6562, -539, 4906, -4740, 3971, 4453, -10302, 4889, 298, -2761, -2392, 688, -490, 5592, -2366, 8898, -6229, 3263, -829, -4253, -1852, 6324, 63, 7698, -5484, -4169, -8817, -2002, 5404, 1863, 3028, -1735, -7106, 2752, 4777, -3841, -5832, 8886, 7262, 4403, -5098, -4560, 2130, -5629, -1487, 360, 2410, 10385, 4748, 2223, -4041, 711, 11297, 5524, 680, -6886, 1119, 2495, -3621, -9757, 1113, -6253, 8713, -3314, 3763, -7863, 5365, -4580, 9930, 702, 5328, 1205, -1013, 852, -8262, 6151, 7404, -5634, -1933, -5116, 1663, 6300, -5503, -1076, 5468, -1748, 11444, 2950, 5321, 1819, -4327, 5505, -5948, -4616, -690, 2644, -799, 260, -4070, 354, 1793, -301, 1147, 5970, 1017, 1366, 2644, -2629, -5452, -5327, 8260, -3879, 2483, 6481, 9054, -6146, 3333, -7617, -5115, -4515, 2328, -7659, 5480, -1401, 855, -3469, -5360, 1551, 2456, 3564, -8074, 2590, 8411, -1020, 3412, -476, 849, 6025, -4370, 6391, -1668, 9595, 5227, 9486, -1441, 6831, -2765, 2886, -6341, 2564, 3976, 14410, 1226, -3615, 3337, 11938, 1665, 540, 564, 434, 3902, 2817, 557, 5091, -2381, -7499, -3936, -3140, 3646, -1165, -8321, 1127, -111, 2432, 239, 2605, 4608, -6400, 5629, -7594, 1084, 1744, -8190, 6048, -3068, 367, 1984, -4247, -366, -1251, -1484, -6973, -4530, 3732, -797, 1118, -9782, 842, -261, 5437, -3342, -2861, 4764, 2367, 2555, 4387, 690, 3510, -7740, -6552, -7077, 4609, -5854, 4857, 555, -6535, -287, -8693, -2133, -7540, 467, -1648, 5344, 2234, 4778, 4713, 5689, -565, 414, 703, -4601, -8250, -770, 4491, 760, 4565, -6008, 2813, 4517, -6065, 2128, -2152, -1124, 1831, -2903, -4917, 673, -10228, -6096, -3577, 2209, -565, -1785, -7293, -1420, 1382, -3950, -5023, -5664, -1993, -4404, 7978, -2578, -2895, -4284, 2967, 5087, -904, -1224, 163, 1421, -7280, -6047, -7069, 5009, -2155, 5125, -4456, 280, -7935, 4547, 6562, -2772, -11161, -6170, 4066, 6371, 1867, 282, -6215, -5071, -8407, -6350, 9113, 4460, 2373, -991, -5314, 5810, -6407, 4841, 6103, -1560, -86, -3588, 5275, -2727, 8064, -2114, -3659, 2376, 2281, 2103, 8195, -3741, -8565, -2509, 628, 2079, 2332, 10273, -2239, 10105, -6575, -3281, 4207, 7093, -9809, 2663, 6649, 7156, -3188, 3145, 6000, -1293, -4370, 1835, 6188, 1257, -4120, 8077, 404, 10192, -9801, -2735, 2764, -899, -7775, -2639, -3913, 231, -119, -3789, -6711, 7033, 552, 1883, 2602, -4934, 3663, -2806, -644, -7032, -3659, -1682, 5759, 6670, 8836, 3264, 13124, -369, -3196, 10013, -254, -2869, 3829, 11735, 527, 4889, 2727, 8009, 2107, -2820, -3152, -1673, 1666, -6791, 2656, -5430, 387, -1661, -5728, -2114, 436, 5708, -3496, -1490, -13181, 623, 990, -5552, 7144, -7607, 2025, 4658, -1789, 7143, 4627, -10208, -5489, -3216, 631, 2434, 417, 3356, 769, -4829, 9270, -1207, 2131, -3938, 712, -5185, 3875, -4389, 559, -1852, 4753, -6253, 3830, -9787, -2091, -1842, -6200, -1107, 2939, 4387, 732, -2304, -1658, -6695, 3275, -3647, -4502, -1244, 178, 399, 3749, 4549, 3394, -5137, -3609, 499, -4159, 811, 1494, 5019, 2353, 6859, -1935, 5826, 2658, -9830, -4781, -1540, 414, 3150, 187, -2029, -2102, -3113, 2603, -4344, -9996, -1222, 2740, -1020, -2455, 3324, -6432, -3520, -2403, -3406, 2456, 132, -310, 2785, -2112, -8842, -1955, 5233, 8861, -4728, -836, 6000, 248, 13478, 983, 7227, 1119, -373, 9682, 1747, 11675, -2400, -5697, 5371, -1030, 5216, 1383, 3517, -7418, 5067, 44, 2734, -5349, -6025, 2880, 4886, -2480, 2948, -3866, -1559, 2712, 1397, 3520, -4454, 339, 1105, -2449, -295, 2409, -2355, 183, -859, -3211, 360, 7258, -4609, -5139, -3810, -1561, -4652, 5457, -929, 634, 2305, 2403, -1636, -741, -6677, -2875, 2010, -3709, 6645, -5870, 1961, 476, -6242, -9476, -7473, -7610, -5150, 1705, 793, 4171, -995, 698, 2533, -8492, -3344, 4225, -2838, 2585, -5436, 3212, -2457, 1599, -3984, -7452, 2235, -6786, 2709, -4252, -2693, 7676, 5674, 354, -461, 7558, 4039, 1047, -720, 9387, 725, 1780, -3335, 4966, -7129, -5441, -2216, -1097, -5062, -4284, 5559, -2269, 1176, 6043, -1915, 1256, 7142, -4721, 3503, 5230, 5973, 766, -2469, -10615, 890, -2067, -1730, 3611, -1039, 258, 1104, 1128, -4843, -6396, -2773, -3697, -4978, 3987, 786, 438, 124, -616, 3512, -4733, 1374, -4428, -4059, 2330, -5380, -9077, -4455, 3956, -4765, -3153, 6980, -2528, 4598, -7421, -7120, -4700, -4233, 1564, 1335, -4042, 1116, -6293, -582, 2668, -7862, -8615, -1145, -1917, -3835, -3831, -3740, -5602, -2035, 2668, -9411, -3596, -6158, 5227, 4251, -2964, 566, -9162, -7214, 8205, -5131, 3764, 6224, -847, -13390, -6204, 3998, -4116, -1077, 4916, -1001, 4448, -9351, -3351, -137, 6141, -10625, 8066, -7572, 648, 6550, -69, -1461, 2330, -6909, 9953, -6937, -11269, -4524, -8867, 615, 3420, 4220, 3575, 9729, 6763, 1154, 4919, -5771, 8157, -7729, 1529, -2567, -2438, -7471, 5837, -10084, 2642, -8164, -11228, 0, -701, 6437, 1821, -6341, -2836, -405, -6440, -820, -159, 2527, -5968, -4474, -6663, 1639, 1641, -9108, 6396, -1952, 6230, 1034, -5284, -11099, -111, -1739, -2899, 5100, 1727, 7809, 469, 10773, 1720, 7358, -10853, 12927, -6482, 3407, -1433, 7495, -11078, -10009, -4354, 336, 1002, -3401, 3922, -4733, 175, -9170, 9050, -5406, -11480, -2529, 2920, -898, -3820, 3534, 608, 2687, -10517, 3235, 3231, 672, 2213, 10997, -4513, -1581, 10101, 1446, 2803, -2999, 3216, 3843, 1262, 3284, 1992, 2283, -983, 8560, -4573, -8643, -9745, 4400, -10608, -7529, -4138, -154, -6740, -9864, -2824, -6044, 2982, 1003, -1060, -3664, 7, 1215, -633, 1417, -8806, -4829, -3791, -5649, -2253, -2937, -3697, -8597, 7637, 2033, 61, -4833, -1734, -100, 5017, 440, -1029, -2527, 9757, -363, 1506, -4040, -1442, 5405, -316, -3086, 480, -3638, -3571, -4905, -1606, 224, 4379, -10188, -1904, 6619, -9629, 234, 6051, -1287, -6706, -2996, 2486, 1340, -6000, -4444, -1396, -2805, -5862, -8529, -7768, -5120, -15103, 13681, 3799, -5170, 2833, 2677, 234, -3175, -3420, -1891, -2905, 3682, -1650, 1663, 6270, -10469, -5373, -183, 6588, -1165, 0, 2025, -8606, -1852, -1653, -5120, -6089, -8491, -499, -5148, 4482, 2693, 2579, 649, -4780, -6457, -1239, 764, 8193, -1259, 5027, -1114, -10115, -8061, -686, 4360, -1392, -8171, 3524, 3895, -1828, 958, -11986, -3773, 354, -3852, 6941, -3657, 988, -1168, -7732, -7396, -9859, -5239, -5679, -1319, -2189, 957, 427, 2067, -6328, -3611, -562, -701, -5451, -3173, 3792, 2282, 7828, -4428, 2821, -5641, -6909, -3931, 7061, 3967, -4936, -2319, -6054, 2883, 5618, -7, 7959, 865, 2064, 3296, 1170, -353, -2436, -4571, -387, -7486, -8111, -305, 2880, 1788, -2839, -2111, 4551, -6166, 5438, -1917, 2586, -6763, 6212, -5449, -8759, -3659, -295, -13141, -8419, 1023, -7376, -9322, 751, -10459, -3718, 4194, -7360, -4016, -5463, -443, -1581, 10683, -3695, -833, 2861, -705, -5953, 4023, 155, -3551, 530, -4916, -7665, -4864, 4998, 1525, -4170, -11199, -8159, -15738, -10142, -5309, 2070, -3469, -10640, -5050, -2595, 13572, -6390, -57, 1470, -3037, -3889, 1736, -3197, 4599, -1815, 4401, -1042, -3758, -997, -4410, -949, 1601, -1770, 4200, 6029, 2285, -2500, 4020, 5493, -7602, -13945, 2594, -1551, 5794, -1459, 4948, -4681, -949, 1564, 2708, 7917, 1411, -9388, -4631, 7700, 2593, -8093, -5854, -4751, -2441, 5323, 4165, -7716, 7741, 4099, 9853, -6202, -4522, -3386, -2837, 1158, -5144, -1276, -5585, -2263, -2934, -7605, -34, -1975, 4399, -6219, 897, 3295, 2569, 1584, -2162, -4958, -8574, 8595, -8855, 6849, -4893, -4087, 2520, -2646, -1662, -5604, 2114, -5732, -4753, 2679, -3129, 7411, -1166, -11531, -9118, -1783, 8297, -2145, -6203, 3644, 3766, -5494, -3849, -5065, -2030, -1072, 10792, -5260, 5978, 3563, 2035, -604, 6633, 6776, -5453, 5014, -2349, 952, 2832, -5415, 10829, 6079, -3400, 5674, 1535, 5943, -3025, -4752, 2431, 9305, -6771, -4790, -5618, -71, 1993, -2658, -1243, 4040, -876, -1217, -5654, 5429, 2321, -9099, -3174, 6797, 4559, -2242, -6389, 5673, -5537, 7609, -986, -2734, 4208, 7598, 5225, 545, -26, -4618, 1997, 6279, -2494, -2360, -8836, -7490, 10232, -5679, 3509, 474, -5876, -4459, 7257, -4752, 5818, -2786, 5603, 5213, -1122, -7042, 5990, -3534, 4853, 5260, -704, -1330, -4319, -5160, 1126, 2795, -4369, 3675, -1500, -1194, 5429, 15236, 3332, -2917, -4803, 287, -792, 7154, -5998, 3396, 4829, 3018, 2211, 4898, -3626, 2883, 7054, 1034, -2611, 6480, 7441, -1229, 1585, -3649, -3679, -3411, -9416, -2620, 2779, -1662, -4809, -6792, -1238, -8178, -1825, -1509, 5498, -4203, -4935, 6320, 977, -764, -2371, -1103, 4877, -492, 2086, -4390, -173, -1294, 1525, 6201, -5863, -5923, 4079, 1540, 10645, 1992, 244, 2191, -5630, 9228, 586, -6180, 4883, -4172, 7535, 3580, -3353, -626, -9152, -2779, 9959, -2180, -6988, -995, -5376, -1614, -4431, 5725, 1471, -999, -4165, 2586, -4745, -3376, -6045, 9459, -7515, -3565, 3133, 5672, -1890, -669, -7777, 500, 6347, 5166, 828, 4935, 2389, -595, 3826, -1291, 384, 5825, -1143, 5826, -1708, -7388, -2064, 948, 1982, 8131, -1015, 1240, -8419, -3015, 2496, 4317, 6325, 7296, 2152, 1590, -1139, 996, -4083, 4294, -6273, -1628, 1525, -6907, -4287, -674, -8197, 351, -4223, -1905, 1306, -2274, 6457, 1978, 2198, -3507, -8452, 2190, -6956, -3048, 4237, 6562, -1229, 4813, 643, 763, 7260, 2783, 1186, -155, 380, 6659, 686, 8087, -1899, -4295, -15038, 732, 1671, 4361, 3689, 7678, -4859, -777, -2835, -2289, -229, -7739, 6859, -4907, 6645, 3726, -4843, 2973, -2740, 719, -2001, -4613, -5173, -5950, -2967, 3454, -4058, -10261, -3898, 7014, 5155, -6481, -7116, 2620, 2216, -1369, -406, 6977, -1192, -839, -4238, 5124, 7871, 4400, -5206, 8396, -4444, 3497, -3194, -2193, -986, -2287, 6674, 6598, 358, 2419, 5165, -5397, 361, 8803, 623, 6051, -7050, 1156, -869, -1897, 2499, 5418, -8109, -1522, -2292, -2676, 1684, 4776, -515, 2109, 2074, -6130, 5886, 5588, -1774, -6053, -7507, 1821, -1311, 1663, -7904, -1291, -11309, 413, -5629, 8357, 7475, 7734, -3225, 5109, 4113, -2626, 9150, 6820, -124, 3355, 1033, 298, 1047, 4286, -5130, 1647, 6866, 1543, 5974, 5460, 1502, 5301, 1290, 6917, 6866, -4572, -3429, -1356, 5822, -3464, 2232, 5680, 9411, 7495, -1636, -3826, 3267, 2312, -4725, 10343, 719, 506, -3612, 6915, -917, -4150, 6443, -2751, 307, 11527, 8334, 2529, -8786, 3129, 865, -3273, -5491, 2076, 4817, -2300, -3509, 5571, 438, 6205, -2665, 2282, -3359, -2879, 4922, 1121, 1688, 4957, -259, -2057, 1100, 2751, 4689, -1432, -2360, 6551, 4826, 381, -3202, -348, 2114, -2450, 6115, -6562, 3849, 209, 1009, -1329, -1597, 3557, 2179, 6665, -5333, -2207, 10307, -5754, 11670, 4372, 3966, -7956, 421, -4117, -28, 5413, 72, -2336, 5012, -745, 253, 8265, -802, 1873, 4575, -777, -1825, 784, 6582, 625, 8602, -2627, -5248, -2882, -2056, 1484, 5633, 2318, -468, 503, -3447, 5440, 1506, 1403, -2362, -5490, -9283, 7664, -7127, -4354, -6470, 1611, 4110, 5821, -2294, -3741, -463, -860, -7354, 1494, 6568, 6730, 1873, -8793, -7038, -6656, 4804, -7218, -7824, -3114, 5941, -4314, 20, 9570, 4858, -1254, 5030, 851, -331, -2590, 2350, -336, 2088, 3324, -880, -2405, 2971, 6456, 5773, 5756, 2492, 257, 3558, 1216, 11127, 8106, -7163, 6154, -749, 3357, 1763, -3104, 10924, 1137, 2550, -799, -3089, -3284, 1168, 8037, 5138, -258, -979, -2881, -5957, -4146, 2036, 3217, 5841, 2085, -771, 2404, 3835, -1358, 1143, -1206, -3443, -300, -6257, 5225, 2232, 5078, 4825, -2770, 3894, 147, -5674, -7105, -3181, -4048, 3010, -2913, -624, 4984, 3135, -5364, 1397, 3602, -6096, 784, 5214, 2148, 5521, -4819, -3235, 1996, -7096, -1311, 4192, 2825, 6109, -3078, 8494, -1664, 1036, -3280, 3454, -852, -3453, 5844, 3802, 799, 3187, -4469, 1708, 2854, -5795, 171, -351, -5553, 3946, 2320, -2711, 5967, 5324, 1098, -8960, 2859, 4969, 1203, 1336, 3789, -4366, 5161, 8654, -8465, -2628, -8500, -1893, 993, -4353, 8105, 2438, -4881, -4016, 2489, 3676, -2283, -816, -4744, 834, 7474, 1942, 7441, 4851, 831, -2132, 265, -997, 8198, -2272, 9982, -4715, -1203, 7569, 2523, 3667, 6040, 741, 2052, 4967, -6066, -2877, -4203, 12199, 5306, 5931, -5916, 1785, 4582, 3622, -1798, -4490, 3006, 5590, -7502, -268, 2664, 2041, 3672, 2482, 2977, 1125, -1177, 927, -8872, 751, 2438, -6005, 5395, 4581, 5867, -4958, -2030, -5900, -808, 5970, 106, -4437, 5910, 177, -7188, 199, -1090, -145, 7642, -1413, -7729, -2594, -200, 2107, 472, 4936, -1726, -790, -5137, -2276, 3585, 1908, 4384, 6487, 4340, 3584, -443, -2854, 166, 9445, -1841, -6576, 3701, 5289, 6576, 130, 4979, -7856, 3961, -4882, -1331, 8414, -4646, 4546, 5082, -6475, -5644, 646, 8563, 5368, 8306, -3442, -4114, 25, -4493, 4152, -2380, 1879, 2087, 886, -5302, 2336, -4533, 6214, 5925, -10826, 1310, -1967, -599, -3999, -2191, -8899, 3887, -1709, 8314, 2509, 576, 149, 5458, 4814, -6551, 5871, -5270, 10012, 5434, -3998, -7175, 4067, -1540, 3914, 323, -7738, 2669, -2123, 1779, -3548, 7701, -1123, -8434, 4816, 1612, -5780, -1883, 1368, -6987, 260, 3716, -227, 1995, -7109, 4182, 7030, 7763, -6820, 1825, 4389, 3903, 3561, -2364, -8724, -2231, -5189, -2834, 2930, -3246, 3927, 1492, -2177, -5450, -123, 716, 2450, -2010, -4332, 2116, 5996, -3527, 1432, -186, -2150, -4744, -308, -2135, -2793, -8072, -1337, -2184, 3135, 2164, -1603, -6, 3657, 4082, -5764, -6092, -2454, -4912, 499, -1840, -1344, -527, 4487, -6383, -2045, 51, 4376, -7393, 590, 772, -1118, -288, 2846, -4491, 2082, -879, -525, -5349, -3891, 2335, 1123, -1591, -6450, -1013, 9347, -23, -2380, -3803, 8867, 3276, 432, -1768, 5340, -901, -4978, -2144, 6168, 9070, 5817, -585, -487, 1376, -5143, -5122, 4045, 735, 7882, 2248, 2306, -4268, 2712, -2333, -2169, -3090, -2591, -1958, -4011, -5186, -4106, 1212, 7424, 6480, 6408, 1594, 1567, -6581, -3069, 5837, 4787, 1173, 5319, -2609, 3373, -377, 19, 282, -4142, -5793, -8325, -703, -15506, -2054, -3630, 5930, 4055, -5646, 4114, 7549, -9421, -895, -2560, -638, 2560, 5325, -10005, 3663, -2992, 607, -7215, 149, -3324, -407, -7391, -10926, -1581, 6033, 1998, -192, -10754, 6183, -6819, -7446, 3551, -4530, -5391, -2835, -1000, -4658, 631, 7740, 4756, 165, -4582, 2259, -6531, -4960, -5174, -4938, -9181, -1073, -11403, -16554, 3465, -5806, 2601, 9419, 2589, 313, -1371, -5702, 3430, -3183, -7371, 7354, -8105, 1425, -5746, -3300, -1545, -2414, -1093, 100, 1604, -1160, -6131, 3950, -8343, -5374, -14282, 2646, -9495, -75, -2490, 2000, 2134, -6865, 1445, -8411, 3915, -1986, 1758, 1478, 3369, -6128, -3736, 2187, -3874, -7374, 1921, 2554, -9664, -1950, -8201, -3161, -364, -9666, -9414, 5832, -534, -500, 1107, 752, -3797, 5549, -5852, 6763, -7644, 1300, 8148, -4585, 4590, -4065, -2738, -3045, -4228, 11829, -1943, -4185, -4822, -6951, 2112, 8725, -5612, -4185, 2841, 4905, 2783, -6085, -152, -2686, -9509, 3187, 5467, -1704, -703, 5680, -63, 4141, -2276, 6997, 705, 4817, 1533, 5823, 9002, 2686, -7874, 4274, -2157, 2438, 1537, -269, -8232, -5904, 332, 7020, 10272, -6106, 5788, 8262, 270, -1716, 3503, 7416, -1790, 5115, -8892, 3596, -11481, 3595, 1965, 4929, -2496, 7652, 8029, 4168, -1753, -2241, -6617, -6089, 5178, 296, -1095, -50, -86, -9462, 3431, -991, -4947, 351, 4880, -2937, 7180, -3423, -8081, 2266, -1995, 1587, 1407, -2499, 251, 4082, 8707, 4758, 5454, 4818, 13601, 5457, 11644, -2736, -5240, -7960, -4521, -5201, 5676, 11949, 10486, 3821, -11187, 9472, -455, -5474, -6608, 504, 1325, -4658, 1585, 6043, 6125, -5717, -9557, -6348, 2097, -3830, 4199, -1445, 3561, -6415, -3802, 2284, -3296, -4632, 677, 2781, -5026, 220, -5299, 8196, 6657, 1821, -4196, 552, -5427, -906, 2776, 7632, -1029, 4765, 575, -7674, 7638, -2590, -2645, -905, 4974, 60, 1569, 3982, -8619, 1847, 6946, -2030, 2833, 4146, -276, -4635, -3934, 3892, 953, 346, 1180, -6916, 2961, 1640, 2625, -8590, 4536, -3428, 2250, -3996, 8124, -3799, -1602, -2772, 3344, 8264, -557, -2656, 6141, 5747, 893, 1673, 4361, 11, -3508, 9144, 4691, -7370, 13313, 2339, 1130, -412, -5, 998, 5057, -1605, 3949, -3654, 3521, -4449, 18901, -4560, 9074, -2609, 66, -926, 4311, -9271, -1154, 3760, 6866, -132, 1984, -3686, -3745, 995, -545, 2029, 2274, -1905, 5534, 1128, 2485, -1943, -489, 4559, 12686, -3325, -1903, 9635, -834, 3668, -1383, -7303, 7433, 5922, -3672, 2310, -2257, 2549, 280, -4033, 5840, 4673, -5209, -3827, -3967, 2439, -419, -3083, 12226, -9909, 8784, 1327, -580, 900, -2639, -5142, 8340, -2800, -4386, 7485, -5553, -3251, 3177, 6315, -5337, 414, -7845, -8984, -4900, 5924, 10778, 826, 2072, 713, -1654, 2860, -214, -2860, 8224, -1127, -584, 5283, -2018, 1210, 3308, -3596, -401, -433, -2181, 7645, 8314, 6899, 6692, -3350, 3610, 1356, -2076, 4963, 8297, 6981, -4224, 3637, -5, -2428, 5071, 20, 6780, -3011, -3755, 2340, -575, -2907, 1625, 2339, -6521, 4976, 128, 2728, -1845, 67, -1343, -3251, -271, -1997, 3777, -1814, -4326, 9378, -5668, 6279, -5869, -254, 223, -5878, -2216, 4542, -5650, 1015, -1467, 4685, 4343, 2801, 2063, -2698, 6580, 3477, -3064, 5833, -7090, 5400, 1344, 2204, -4593, -539, -779, -3648, 7459, 3255, 4071, -4019, 229, -6298, -1172, 737, -2703, -868, 29, -4424, -990, 1055, -8444, 2188, -3852, 3906, -4873, 7098, -1852, 2732, 3410, -7183, -4309, -7676, 5573, 6524, 2064, 11619, 7120, 758, 767, -11634, -4284, -3049, -7905, 3987, -29, -7143, -911, -4922, -7342, -5326, -6006, 538, -7584, 5182, 3353, 5803, 7089, 2503, -6390, 5961, -5312, -1994, -3875, -1511, -10070, 1723, -4560, -1852, -608, 4929, 8033, 3075, 8903, -5806, 1060, 2351, 1607, -8657, 2488, 11111, -580, 2914, 3692, -613, 6516, 9048, 4670, -11630, -6361, 1409, 538, -6809, -3201, -395, 6898, -3573, 1985, -3815, 2562, -6393, 3336, 2616, -5126, -3422, 310, 610, 5773, -5164, -4331, -3299, 4125, 3524, 4714, 5643, 1869, -2644, 398, -6053, 13, 977, 7260, 3619, 7129, 1205, 1937, 4259, 6595, -1914, -2249, -5482, -11328, -4839, -2154, 2794, 1072, 5138, 5382, 1271, 695, -2212, -2580, 12329, -8285, -8764, 1992, 209, -1835, 4820, 3723, -7188, 5228, 6140, 263, -737, 3287, 2383, 1694, -407, -11795, -9422, -7217, 1733, -7601, -4016, 9393, 303, -13367, -6931, -3169, -3856, -6773, 5332, -691, 4080, -7270, -3999, 1647, 8171, -5663, -3725, -2960, 5236, 2199, 2899, 5921, 5578, -2240, 4534, -5767, -5208, -9638, -11127, 4497, -1264, -1025, 3963, -2955, 5482, 4507, -2362, 5188, -2839, 168, -3557, -2575, 11735, -648, 5853, -9876, -977, 10102, 8227, 4212, 951, 4951, 11547, -6383, 1554, -3448, -4482, 746, -5801, 1311, 254, 11223, -1360, -5886, -1124, -4299, 9952, -1669, -2833, 256, -3340, -1731, 2253, -4340, -6536, -1790, 7462, 948, 5492, 5626, 885, 3490, -5955, 8583, -10921, 7710, 226, 5262, -5429, -1290, 4499, -697, -5211, 9637, -914, -14678, 1478, -3861, -7539, -6103, -3733, -4408, 6787, -1675, -9309, 9981, 6101, 118, -5385, -6367, 1267, -8724, 5036, -2406, -3134, 3802, 3050, -8261, 3042, -4263, -652, -5787, -9610, -3981, -8848, -3346, -1182, 2325, 1060, 4953, -3623, -5831, -8976, -1151, -6110, -4125, 3446, -3403, 6597, -8838, -3383, 6076, -4772, -12103, 7215, -9957, -4118, 3348, -10108, -6703, 5009, -6792, 7956, -9348, -2659, -7954, -3109, -2469, 6807, 8698, 425, 6015, 5331, -5955, 5195, 3779, 6960, -72, 3262, -1776, 4813, -3930, 1970, -10035, 6675, 6288, 8447, 8980, 4678, -3530, 4888, -11185, 1260, 3604, -4546, -2776, 7174, -5183, -11313, 5797, -8139, -6642, -11451, -5690, 7519, 375, -2174, -9741, -28, -963, -14392, -2711, 2276, -5625, 5776, 474, 1375, 3632, 2264, -2262, -2092, 240, -7402, 6999, 5434, 4996, -11173, -1804, -5102, -1894, 3540, -529, 4221, -10311, -6461, -7317, 884, -8928, -1679, -4930, 3051, 1192, 307, 1613, 3565, -1268, -2308, -4478, -2149, 4326, -2658, 4156, 974, 4203, 9773, -2335, -9455, 3310, -6, -1329, -4965, -1111, 3315, -5468, -3873, -8758, -3128, -4343, 4991, -2023, -1618, 245, -4308, -4540, 2252, 4414, 1983, -6962, 4766, 2757, -9750, 1517, -5163, 307, 1727, -5334, -7142, -2690, 2921, -5544, 8852, -3034, 2406, 9168, 6933, -4759, -2109, 4227, -2551, -4752, -563, -2358, -257, -1809, -281, 4581, 4753, 890, 4351, 2580, 4090, -1484, 3680, 741, -4722, 1136, 553, 5975, 2929, -3622, 844, 9712, 99, -746, -285, -3020, -2880, -2674, -360, -76, -8316, -2460, 7240, -2654, 4008, -569, -2449, 230, -3349, -3314, -907, -2630, -46, 2613, 4590, -5658, -684, -6344, -3565, -2192, -7558, -4810, -6078, -183, 5766, 6742, 519, -10252, 9552, -6955, -8182, -8564, 298, 5382, 3154, 4202, -7144, -6208, 5315, -6991, -5698, -1058, -4501, 3623, 6391, -6720, -6202, -1178, -5597, -2241, 6835, -2371, 5453, -5892, -2880, 6353, -1982, -3819, -7661, 1568, 1319, 2683, -1741, -2621, 4730, 866, -5337, 246, -4412, 715, 6071, 3104, -3093, 4929, 9728, -6006, -3321, -9169, 3685, 8853, 8062, 3078, 5505, 4143, -4024, -1002, 4133, -3801, 1623, -10969, -582, 271, -1499, 7474, 3432, 484, 2038, -2537, 6313, -332, -6868, -6954, 3198, -909, -1769, 3690, 589, -238, -4132, 5895, 1823, -6223, -2836, 6888, -8028, 1478, 7461, 1496, -1043, 5663, -2272, 2543, -933, 3420, -990, 4407, 8137, -3580, -2732, -1118, -2105, -3935, 4519, -4722, -6070, 112, -116, 227, -2594, 5116, 7685, 2562, -2937, -10932, 3383, -1117, 4279, 7141, -3691, 1896, 4134, -5583, 4007, 5613, 4813, -6109, -6337, 3813, -6675, 3975, 2548, -5304, 3638, 4788, -194, 4098, -1386, 4346, 1336, -2272, -2890, 8268, 5172, -5553, -2172, -1096, -5659, -1180, 7599, -353, -2192, -5537, -3984, -4071, 3672, 994, -2352, -7261, 2758, -354, 162, 4515, -557, -3610, -88, 6531, -5675, 4094, -288, -3722, -901, -6185, -3734, -4619, 3277, -4679, -1656, -4418, 4434, -5036, -1935, -6128, -4028, -1765, 975, -1333, 2464, 2478, 3120, -6918, -4898, 2391, 1090, 3874, -3782, 3151, -3509, 1782, -1465, -2122, 2448, -1969, 9470, 1814, -7698, -4560, -4332, 1175, -6452, -7116, -6357, -3869, 5166, -898, -5642, 1446, -2750, -4742, -288, -1041, 4845, -4261, 41, -3264, -1580, 5446, 742, -670, -7909, 577, 2308, -4572, 4970, 1119, -5855, -4428, 8176, -416, 1671, 5221, -6899, 693, -1842, 4722, -3174, 1724, 3250, -8468, 5406, -341, 1532, 297, 4137, -4007, 4569, -4377, 6854, 1851, -2949, 2575, 8288, 899, 4397, -3527, -7085, -896, 1830, -2806, 3846, 3403, -2501, 7521, -1094, 4015, -6702, -2496, -3025, -2244, 5332, -878, -3468, 3815, -2363, -4394, -4289, 3731, 4046, -2044, -10692, 1213, -1777, 2908, -9573, 6741, 2856, 462, -5522, 2871, -1189, -2735, 6548, -2037, -3534, -6272, -1967, -5223, 5234, 5239, 6882, 1640, 4843, -1435, -4962, -1844, -3211, 565, -5064, -3158, 7680, 8878, -919, -2926, 3612, -6324, 2129, -6648, -3264, 2992, -7465, -1990, -6019, 1996, 4213, 4943, -1159, 4659, 12900, -7078, 8663, 1168, -2302, -2120, -1794, 4840, -4956, 3294, -1589, 1650, 1428, 5700, 3785, -2772, 7421, -3881, 3465, 2661, -1793, -816, -2716, -3092, -4643, 5906, -582, 9191, 63, -4444, -5036, 6661, -1314, -7, -3310, -4602, 7140, -6287, 5009, 2306, -2386, -3953, -2691, -6436, -6897, 969, -3074, 5116, -2509, 6711, -4127, 3272, -1953, 5818, -3960, 1144, -4714, 1228, -95, -70, 3529, 2199, 3032, 5395, 88, -7284, 6344, 2538, 1565, -6838, -1271, -5349, 1740, 945, -2828, -1840, -2751, 5127, 6557, 334, 4994, 8343, -240, 2490, -1068, -1157, 3030, -1586, 522, 9748, -2823, 4806, 5588, 5893, -1904, 2638, 5233, -3447, 8121, -6182, -2084, 925, 4976, 1555, 6121, -4142, -476, -2298, -50, 1590, -6045, 11732, -2156, -4148, 2660, 7345, -5743, -642, 1734, -1510, 217, 5759, -4029, 3088, -2043, 3569, -4903, 3327, -12137, 6533, -5655, 9766, -3226, -3845, 2647, 2765, 1925, -10917, -2793, 3242, -107, 7374, 5, 4789, 14765, 993, 8507, -693, -985, 11195, -3404, 4935, 526, 389, 11322, 6181, 3416, 411, 4682, 9909, 2634, 2072, 6659, 3491, -4744, -4170, 2083, 3603, -4405, 2794, 6641, 2822, 7644, 591, -2376, -4932, 10689, 13971, 6355, 5587, -5934, 2275, -1995, 7550, -2529, 468, 4021, -3410, -2518, -2054, 737, 3963, 2888, 5854, 260, -7428, 6138, -1842, 3881, 2517, 4222, 5638, -5155, -3735, -1930, -3160, -1752, -5250, 3649, -7193, -972, 4208, -1859, -4342, -3297, 11431, 9579, 3259, 3265, 6231, -5886, -3162, -3682, -293, 5574, -903, -3028, -4700, 2279, 4876, 1121, 6575, 1895, 1801, -2022, -3052, 3123, -606, 2821, 4911, 8730, -3774, 6801, -5769, -2326, -4558, 5807, 416, 5502, 5189, -4999, 7111, -2064, -355, 905, 7154, -13705, 738, 2558, -4522, -3657, 1156, -3749, -160, -4064, 596, -5322, 5657, -4929, -3012, -2482, -1598, 3399, -1707, -242, -1358, -3480, 7254, 6779, 1800, 8981, -3548, -5876, -4902, 3015, 4374, 14436, 307, 4643, 5510, 2732, 7652, 3762, -1410, 2874, 4609, -419, 9481, 3771, -2287, -789, 265, -5511, -908, 4874, 6881, 8582, 17, 3552, -1047, 4853, -3431, -4304, -2972, -402, 5219, 7006, -977, 1737, -235, -4628, -871, 4646, 3180, -3922, 11435, 2522, 2381, 7226, -1678, -529, 4845, -917, 5455, -1351, 2166, -646, -3553, -322, -7314, -4687, 2734, -2004, 850, 6755, -14104, 314, 4322, -10097, 45, 5730, -4365, -646, 6772, -7269, 8506, -2473, -10312, 5171, 5013, -7389, 13939, 9154, 9672, 6509, -574, 10658, -9086, -7630, -1086, -7388, -429, -194, -7072, -1787, 6531, -6078, -5380, -2390, 8801, 144, 7165, 2413, -385, 8571, -4253, 3168, -3758, -7383, 744, -7731, 2268, -3002, -2487, -6925, -11816, -6650, 4096, 693, -1635, -6704, 4171, -489, 4686, 1865, 2293, 4590, -4606, 6638, -3242, -2360, 5427, -1762, 1722, -7531, -2829, 810, -5361, -7992, -12483, 9118, 852, 3510, -912, 4181, 5281, 10232, 2041, -4666, 4362, 2084, -2194, 1033, -360, -7990, 1223, 218, 731, -381, -3631, -3754, -3689, -4951, -5657, -1566, 4958, -1198, -1458, -2676, 1791, 7659, 6234, -4458, 4351, -1994, 9789, -646, 1582, 2721, -916, 464, 5815, 1067, -397, -9799, -2909, 2402, 2841, 3105, -301, 9237, 7153, 9560, 6090, -783, 2948, 1907, 7299, -3209, 5315, -5167, -772, 2933, 4137, -1119, -2387, -6687, 3600, -4860, 5195, -2849, 1091, 7031, -5670, -6916, 8531, -3666, 900, -186, 1115, -3080, -7265, -2442, -2826, -4602, -2442, 7979, 3576, 2102, 11646, -300, 6190, 1673, 1866, 301, 1256, -3706, 1088, 4524, 1461, 1288, 4899, -438, -3559, 3417, -1005, 4333, 1048, 6409, -4851, -2585, 2148, -7795, 2006, 3731, 7715, -1320, 11923, 629, -1761, 1922, 2493, -6187, 6320, -4998, -2348, -822, -4287, -974, -3517, 4963, 794, 269, 6881, 3889, 7393, -672, -9481, -5400, 1228, -236, 16521, 738, -4560, -6605, -605, -2579, 2031, 670, -6864, 5450, -3832, -5112, 10804, 2876, -7451, -1150, -717, -4324, -5404, 2249, 5037, -8305, -648, 9064, -70, -3593, 8796, -1777, 1015, 6568, -7620, -3595, -1405, -2344, -1115, -3893, -3153, -2913, 1212, -5861, -1337, 1997, -3529, -1952, 551, 795, 65, -7266, 3649, -8500, -4508, -4929, 4490, -7561, 2223, -1578, 2415, -1715, -8239, -1631, 540, -2679, -4074, 893, 6747, 6661, -6196, 7542, -8465, -4347, -763, 4042, -3746, -223, 4726, -5106, -1578, 4424, -4100, -2702, -2484, 1730, 4055, -3540, 2257, -1472, -3793, 1191, -2258, -3245, 7632, -99, -11523, 7770, 1026, -1437, -7411, -4755, -2111, -2643, 2211, 5366, -4163, -112, -12226, -8889, -1754, -5412, 488, 3614, -1409, 4836, 4766, 7475, -8458, 8413, -1652, 3418, 2473, -5213, 4856, 562, -2479, 1538, -2731, 525, -2044, -2841, -5285, -1379, -2528, -12088, -2366, 4487, -2203, 4950, -3368, -2404, -3146, -3848, -1676, 3294, -1350, -2005, -129, -3214, -2579, 2389, -3171, 5213, -8261, -2649, 3031, -1248, 6922, -2246, -6337, -3346, -6636, -4882, 19, 262, 3295, -4807, 3563, -7984, -5065, -823, -8749, 4259, 3439, 519, -7275, 3619, -7475, 3745, -4860, 8800, -7925, -9261, 4419, 7406, -2991, 6287, -1693, -1782, -666, -3321, -1422, -2373, -2876, 8541, 4670, 4070, 2742, -4184, 2569, 1599, 5444, 4912, 5174, -4679, 4208, -5577, -5577, -1760, -8374, 645, 10983, 1521, -3195, 4245, 2647, 896, 4968, 2027, 521, 3748, 4668, -3079, -4777, 1276, 10576, -11536, -3075, -2211, -6330, 3135, -5205, 1314, 79, -8132, -14788, -8103, -6487, 5496, 595, 2681, 4068, 8958, -2375, -7457, -1093, -3666, 3898, -2545, 1435, -6237, -2141, -8102, -5486, 7599, -8036, 1917, -4783, 3517, -968, 3741, 123, -7016, -4480, -2976, -3469, -1615, -7674, 6044, 2740, 7524, -6470, -6408, -1991, 966, -2369, -6330, 1694, -117, 8566, 933, -771, -4269, -3145, 5338, -9208, -4278, -14687, -6636, -4637, -3104, 1553, -9007, -589, -1150, -11720, 486, -692, -8925, 5699, -1661, 3165, -64, 1090, -4557, -662, 1054, -1647, -2725, -4329, -10202, -8511, 4480, -1568, -691, -10805, 6524, 707, -7274, 2326, -1258, 4489, -2982, -2371, 1715, 1456, 5476, 5926, -7643, 822, 1849, -8192, 7720, 931, -8084, -4399, 2198, -5768, -13747, -3187, 15, -2035, 5019, -1238, -559, -4639, 7473, -1876, -2839, -2229, -792, 250, -4141, -348, -2090, -4939, 2229, -5827, -1966, 1757, 6869, -2551, -2542, -713, -5768, -15386, -2102, 5225, -3238, 9216, -4334, 1678, -1248, -1922, -6487, 8147, -4953, -5156, 3836, 837, -9288, -5261, -1709, 70, 6733, -4981, -5133, -3854, -2267, -3468, 12902, -3107, 2076, -6133, 3600, -1693, -6610, -6036, 4909, 2925, 3109, -918, -1900, -863, 5214, 68, 3553, 6342, -2096, 7536, -9232, -2918, -2402, -6759, 4735, 5537, -2562, 5014, 2876, 4004, 919, -3627, 913, 6200, 2089, -4434, 4250, 5535, -6558, 7866, 2967, -762, 6270, 6586, -911, 4229, -4108, -195, 72, 2361, 2242, -6447, 2212, 10541, 974, -3228, 2856, -3910, 1348, 1994, -742, -5702, 65, -2780, -2580, -2281, 1702, 783, -5234, 184, -4495, 2797, -5891, -2294, 1776, 7047, 3563, 2325, 3229, -4892, -4322, 8010, -3376, 3291, 3470, -5643, 4291, -8181, 3355, -2470, 3931, -7408, 993, -7420, -8991, -4540, -6057, 752, 1838, -3727, -2322, 4869, -233, 3473, -5585, -3745, -4650, -6195, -2981, -2366, -2280, 2871, 82, 2935, 10336, -4231, -966, -8489, -2382, 397, -7652, 2244, -735, -2308, -1211, 13442, 1888, 1324, 9544, 5120, 11922, 3543, 2084, 9091, -3378, -12935, 2249, -854, 1128, 4431, -289, 3646, 5339, -2339, 4466, 622, -1769, 1221, 3969, 6651, -3523, -1264, -3543, 277, -1486, -5826, -3406, -163, -2534, 8479, -3292, 375, -6489, -6351, 1099, -1640, -4232, -7808, 4163, -1969, -1794, -4993, 1555, -5329, 1125, -4850, -2157, 2754, 5521, -4937, -405, -2650, 11722, -3420, -4481, -6301, -271, -2024, 192, 679, 5654, 1759, 1675, 2706, 4599, -4077, 4300, 646, 3453, -3355, 9997, -3217, 801, 628, 2994, -278, 10571, 3514, -877, 4621, 6071, -1448, -3631, 7920, -1955, 5267, -1584, -4480, -6367, 7835, 7543, 2724, 3714, -9008, 7182, -2056, -3726, -4416, -4409, -1140, 70, -2143, 4273, 5040, 5576, -4080, 10266, 618, 7501, -3962, 2074, -1302, -5088, 4021, 1973, 4442, -4138, -6640, 6614, -7598, 5562, -1499, -4805, -6229, 3182, 2551, -4565, -971, 7395, 399, 1896, -2308, 1640, 5810, -1447, 693, 3911, -5062, 3406, -1760, -989, 7668, -1492, 5942, -272, -4760, -6919, -4729, 1688, -268, -1840, -8556, -208, 4812, 365, 746, 1977, -3519, -3082, -2739, 5820, -3052, -103, -2055, -1798, 4789, 1372, 1519, 2686, -8560, -5334, 667, 148, -6864, -10023, -6310, 7481, 1097, 476, -603, -2958, 3647, -3510, 76, -3492, -666, -2719, -4717, -6575, 204, -2860, -9321, -385, -2962, -2, -1154, -2483, 1487, -4558, -9781, 3285, 1750, 7414, -3681, 2595, -5915, 2703, 2829, -8707, 6466, -3757, -1199, -5752, -9877, 5995, -4745, 7597, -67, -1499, 321, -8206, 6968, -7125, 1171, 7413, 1731, 8320, 747, -1017, -6406, 5383, -270, 2269, -2858, 2698, -3510, -2255, -1420, 439, -4822, 2020, -7441, 4563, -4043, -1124, -9195, -2308, 4517, 3320, -93, 4610, -1989, -476, 1329, 6779, -141, -8206, -4782, -2052, 4421, -3795, -8469, -3594, -2318, -4457, 8081, 1074, 4419, 5327, -4868, -3795, -7855, -4516, 729, 7016, -4091, -6330, 6363, -868, 8947, -1340, -4796, -4702, 4141, 2608, -416, -5615, 1872, -1308, -3969, 908, 2329, -7304, -12146, -6904, 3351, 9033, 5814, -11530, 6075, -3058, 6231, 555, -1342, -10800, -6447, -5951, -263, -3620, -9397, 523, 3780, 5490, 4919, -6435, -369, 2416, 634, -7051, -3634, -3640, 2952, -213, -6045, 3373, -3143, -2691, 103, -7103, 7935, 7706, -1480, -674, 1704, -2930, 421, -4132, 2256, 8865, 6683, 5645, 18, 641, 9786, 2019, -281, 7856, -1176, -1410, 8593, -920, -1435, -3385, 7194, -10030, 3845, 4019, 6543, -487, -5618, -237, -10013, -4602, -2983, -2132, -2275, 3170, -2773, -2400, -2230, -4510, -1118, 5122, 6847, -761, -3137, 1657, -7912, -7614, 7222, -938, 6461, 2317, 4540, 2050, -7839, 4228, -5335, -1864, -1968, -6082, 2876, -2767, -4090, -4530, 5449, 473, -4236, 9537, -1039, -7588, 6160, 1719, -1349, 1057, -3813, -8330, -6225, 4201, -5848, 3129, -6496, -3582, -2450, 176, -3280, 4843, -2930, -6169, -13722, 685, 7308, -3169, -6054, 5089, -11079, -4911, 967, 1422, -166, -1549, -11562, 5136, 6372, -4839, -76, 2832, 1554, 6365, 267, -2187, -10246, 3957, 563, -4041, -5950, -795, 1781, -4238, -5573, -3887, -13, -5634, -1228, 4095, 940, 4638, -5145, -218, 7712, -2351, 2686, -5387, 3433, -1391, 962, -6057, -3198, 1806, -4760, 3983, -5733, 7041, 5007, -8152, -917, -5486, -228, 2809, -7448, 6375, 1429, 9414, -9165, 3914, 1273, -4703, 323, -3225, 2369, -4382, 5260, 232, -1843, 4236, 5971, 2710, 1352, -2837, 5333, 6339, 2180, 3313, -1307, -2002, 3292, -3714, -7102, -8850, -7388, -5549, 1734, -5569, 763, 9566, -7610, 1123, 0, 578, -5701, 7994, 2921, -8606, 127, 5410, 6983, 4774, -3662, 3669, 641, -6629, -397, -318, -2484, 4250, 6026, 6676, -7979, 2991, 5437, 4582, 1342, 6817, 3718, 3680, 5707, 3092, 6106, 178, 5925, -3374, 5045, 5832, -2477, -834, -3426, 10593, 654, 3822, 6693, -439, 2344, 4965, -4721, 691, 3597, -2069, 2667, -1167, 1044, 662, 673, 7557, 2730, -2259, 1400, -4678, 2605, 10, 1242, -2692, -4355, -4425, 5827, 498, 2435, 462, -1787, 4255, -5535, 154, -5092, 5754, -416, -6012, 855, 2756, -304, -6970, 9269, -5275, 7717, 5712, -2705, 8320, 1121, 3445, -2409, 4078, 8744, -2328, 6783, 2508, 13065, -1297, 5491, -827, -3332, -4532, 2549, 2916, 3836, -862, -3770, -2215, 5035, -5203, -2468, -3326, 6878, 571, -2055, 198, 731, 1237, 6448, 2101, -2276, 8030, -5943, 1433, 1905, -6470, 8562, 11610, -4929, 9300, 5601, 944, -5671, 6719, -492, -5061, 2229, -3469, 877, 1683, -3419, 12693}; +static Q15_T F2[CTEMP * HF * WF * 1 * 1] = {-13686, -11907, 1690, -4110, -10896, -16408, -12538, -6822, -8858, 15593, -10774, -12616, 6591, -15833, -13939, -16762, -1157, -4805, 14127, 18904, 13782, 16347, 1743, 10741, 12188, -10891, 3695, -8892, -16096, -7888, -17113, -2913, -11536, 5866, -7654, 3351, 4227, 26881, 16417, 4883, 7007, 21680, -12947, 885, 488, -4846, 17856, 5196, -2329, 13490, 12529, -2337, 2770, 9702, -3414, -9567, -13573, -3305, -19031, -517, 3591, 18888, 11512, 7629, 4165, -11283, -3558, 22083, -10204, 9427, 20617, 11503, 6366, 806, 12631, -12659, -8756, -11999, 2758, -14468, -17588, 7123, 1906, -6249, 11243, 17817, 9540, 19127, 18557, -4060, -9372, 14596, -17105, -12157, 19249, 3482, 13525, -14177, -21639, -5742, -14180, 4676, -7537, -21198, -9157, 12612, 4350, 201, -10075, -4258, -2640, 854, 5429, 11574, 9635, 22284, 7079, 4816, 17448, 13478, 5482, 15645, 4620, 6492, -14044, -12524, 7541, 6353, 4340, 13165, -5482, 3560, -15070, -5729, -7322, 13394, 27478, -10868, 15824, -10195, 3129, -3825, 14600, 5569, 3248, -16156, 7345, -1471, 1262, 9664, 12510, 17273, 19997, 1629, 7747, 9979, 7738, -11764, -2404, -7506, -18584, -7685, -13125, 10803, -11147, -2697, 20209, 13975, 15626, 10705, 19439, 885, 1794, 16824, -8233, -4899, -163, -2701, -4950, -14489, -20205, 15584, -4396, -13937, -7264, 12346, 8514, -15313, -4089, -17566, 9278, -19468, 2334, -17478, -10425, -3923, -14283, 11102, 9380, 13712, 15223, -12157, 16454, 20985, 4367, 5047, 15021, -2680, 5814, 2918, -5502, 18695, 11528, -8357, 16846, -1408, 19901, 8965, -16184, -10845, -5854, -7368, -11823, -15614, -10117, 5145, 13823, 3673, 6145, 4315, 13052, -13913, -9270, 10364, 13829, 18310, 9910, -12649, -6409, 1585, -5830, -12252, -11102, -8785, -16210, -6687, -17849, -18969, -4120, -10193, -13551, -14529, -15350, 8631, -2138, -12656, 19704, 9206, -16140, -11762, -17038, 11707, -12180, 11685, 9493, 4078, 21416, -15840, -6350, 22478, -3879, -2769, -2613, -11395, -8273, -10507, -8471, -2867, -7900, -11972, -22212, 6917, 239, 17878, 1994, 4892, -9427, -3907, 14825, 12624, -7808, 20421, 11103, -12195, 7492, 3380, -11180, -554, -4669, -6263, -7436, -3535, -10588, -6372, -3446, -5412, -491, -5061, 23940, -2595, -15429, 4433, 1523, -13682, -8007, -15188, -6173, -17525, -15839, -7617, -15240, -7097, -9444, -10315, 1885, -18448, -22192, 7376, -11147, 7179, -14581, -16040, 20002, 3459, 1451, -22790, 10759, -9994, -7374, 1877, -2152, 13903, -3072, -5026, 11429, -5769, -1238, 19774, 8813, 18015, -6008, -7669, 10705, 8074, -3501, 14684, -21850, 432, -4725, -10267, 2258, 9581, 746, 9950, -10587, -13061, 3043, -8424, -17414, 15210, 2180, -9090, -12671, 18915, -16798, -8357, 15942, -14597, 20061, -626, 17001, 11017, 13698, 13206, 1531, 2194, 3176, -6006, -10811, 1573, -5844, -15802, -6638, 13144, -9667, -14214, -9175, 3623, -2596, 9323, 5455, 13395, 1928, 19271, 19266, 4245, -2754, 9956, 6913, 11780, 1911, -3801, 20556, 12057, -6487, -11259, 17121, -20234, 15871, 19994, -22280, -7535, -10567, 61, 6265, -7481, 3423, 2062, 4315, 5418, 16693, 19949, 5255, -12657, 22150, -1343, 8569, 2219, 6522, -8080, 21133, -6586, 988, 1369, -8422, -13532, -7828, -17404, -13656, -18526, -7698, -14734, 416, -8501, -7597, -18330, 13005, -4042, -8609, 16352, 17981, 6368, -4926, 16176, 8072, -2223, 8093, 15082, 14947, 9384, -3433, 22849, 5248, -15862, 8917, 9488, -10686, 21145, 14344, -10901, 10463, 19246, -13406, 17371, 17027, 3770, -10416, -9138, 1119, -20282, -6613, 24665, -13329, -1032, 21575, 9534, 17322, 15055, 7495, 14141, 8503, 393, 1204, 93, -11153, -2248, -9222, -20911, -1171, -15926, -14078, -5591, 15197, -10676, 19360, 14759, -6104, 23345, 9719, -8532, 7766, 12725, 7723, -18954, -13031, -4080, -7973, -13927, -8145, 5211, 17871, -5626, -17107, -8863, -14366, 13863, -10473, 499, 5306, 4778, 1649, -17616, -18930, 13976, 3196, -16614, 5607, -16318, 10237, -8743, 2852, 13096, -7033, -515, 3261, -4277, 14188, 21139, 14691, -3381, -6184, 11860, -10740, -15025, -16698, -10181, -2751, -9262, 3783, 489, -14730, -17930, -17860, 15208, 20593, -9228, 9123, -7963, -14010, -10076, -5735, -4301, 11721, -2724, -8054, -5611, -9298, -14466, 4361, 13461, -3305, -11578, -20597, -3160, 9700, -10269, -4717, 16197, 14864, 17694, 578, 9298, 19019, 2031, -22103, 10807, 4218, -143, -8096, -6843, -11781, -12372, -6106, 13025, -6007, 12680, 16318, 57, 16249, 17149, 15262, -4952, 22506, 10909, -6092, -14645, -1410, -11901, -8521, -7991, -3340, 9474, 12008, -4657, 17187, -8782, -6396, 16510, -5238, -12112, -15550, -6515, 10059, 16087, -9876, 12516, 24824, 2952, 16937, 16074, -1249, 12406, 1150, -10376, 17192, -9583, -12910, 1751, 8739, 11825, 16365, 16180, 7601, -3946, 12659, 3274, 17382, -8569, -1101, 11238, 4535, -23554, 11176, -3210, -14218, 12363, -1079, 20082, 14098, 14178, -4924, 14662, -15287, 16534, -3104, -907, 11574, -9029, -3606, 20698, -1957, -10547, 10501, -2646, 21948, 12742, -9558, -4572, 1363, 14925, 7841, -15277, 3439, 3675, 6865, 7351, 10815, 9265, 9733, 13092, 6192, 3641, 14684, 7630, 4842, 14704, 13649, -7904, -12672, -11079, 17957, 15825, -1361, 22192, 99, 3238, 3946, 27103, -10249, -1722, 1368, 13959, -9697, -8391, 19956, -5208, -2366, 18745, 4964, 7073, 2833, 16354, 27200, 13968, 9221, 14486, 7334, -12789, 7506, 21620, -10422, 18108, 3631, 3681, 8873, 132, 265, -5399, 12081, -1129, -1610, 18407, 5674, 17518, 274, 15420, 20900, 15853, 20452, 7001, -1994, 7989, 7039, -10, -570, -10300, 4472, -6633, 14785, 16928, -5333, 23664, 3080, -2115, 2391, 21659, 2480, -11061, 19895, -4564, 5690, 19019, 22758, 6526, -9508, 14354, 551, -12517, -5328, 8494, -16228, 14929, -15130, -15206, -2955, 3322, 18135, 6540, 11751, 11919, 8793, -13991, -11655, 16879, 22657, 17776, 14834, -1844, 16517, 16087, 12110, 25127, -14517, -3339, 4779, -13045, -11675, -13718, 1967, -10056, -569, 10111, 5601, 6359, 18405, 14563, 9955, 476, -8813, -4641, -17333, -3068, 1256, -6256, 17101, 12436, -11420, 17865, 4589, 18764, -8467, 2764, 7596, 19061, 16180, -377, -7253, -3964, 208, -5683, -2903, -3667, -7179, -8981, -2033, 16330, 10924, 6852, 17227, 11561, 16499, 13859, 8680, -1029, 12964, -5888, 2659, 24814, 5233, -4714, 8374, 7983, 14809, 7150, -4582, 4853, 23803, -2177, 2075, 23854, -13831, 7869, -3323, -10089, 9703, -6495, -7702, -19065, 13344, 15055, 8806, -15534, -1332, 5195, -24811, -2042, 4134, 3773, -3167, 7947, 12525, 6783, 16111, 10829, 4158, 12262, 7929, 12252, -10599, 4896, 22442, 16427, -4313, 6060, 18326, 20511, -11488, -11479, -15622, -15999, -4640, 18702, -5736, -3022, 26581, 19990, 5729, 18841, 5236, 23439, 17584, 15303, 2459, 18939, -893, 12247, 29557, -647, -12910, 5673, -17252, -1913, 6379, -14453, -11895, -13257, -6501, -14904, 3947, 8259, -7483, 9564, -8775, 14953, 16651, 14258, 19292, 12543, 10636, -1367, 14539, 16437, -4352, -300, 10331, -18485, -15215, 24582, -6, -14349, -7377, 5030, 10387, 11349, 9911, 14740, 15101, 3279, 10527, 9237, 8602, -21907, 5634, -10823, 4113, -15238, -4758, -20282, 12903, -17248, 7978, -18374, 2184, -12718, -9655, -1993, 4740, -15524, -1821, 137, 774, 11768, -23213, -8594, 7017, 21276, 5241, -14886, -21324, -18798, 8513, 8387, 14158, 7395, 4294, 11099, 10747, 11855, 2184, 9114, 11411, -5746, -792, 12892, -278, -2169, -12343, -2695, 19697, -17789, -7694, 14937, 7088, 2209, -6893, -11214, -14677, -11742, -3275, -19763, 2807, -12133, -10023, -4540, 22156, 638, -1537, 24975, 14985, -7435, 1270, 9783, 18782, -9682, -16039, 8285, 15282, -3770, 3313, 2639, -15372, -6353, -14054, -1729, -185, -1860, -3288, -19827, 931, -173, -7272, -5246, -8176, -6302, -13740, -13345, -7742, -2567, -2004, 8423, 16502, -12777, 11459, 1572, -9520, 9019, -9085, -17316, 4326, 8204, -19602, 11615, 1296, -19163, 12340, -929, -16396, -15395, -14310, 23383, 4741, -13117, -8283, 9371, -12716, -17210, 22138, 4874, 21788, -7988, 4308, -14550, -9007, 2934, -3158, -11232, -14060, 2510, -6387, 1764, -2121, -11540, -15852, -5502, -21030, -1739, -17876, 12245, -11474, 18665, -18647, 3512, -9629, 20851, 12099, 25803, -5222, 14211, -6396, 1827, 8702, -13120}; +static Q15_T F3[1 * 1 * 1 * CTEMP * COUT] = {3957, 4199, 625, 7618, -3520, 7920, 3161, 3635, 2887, -169, -2482, 6425, -563, 2016, 1627, 6164, -6454, 2937, 2121, -7586, -4161, -2282, 3581, 9194, -451, -623, -3180, -1949, -4834, -2057, 4398, 1441, 1012, 4465, 4369, -7093, -1168, 7260, 3439, 361, 3799, -1960, 43, 167, 1227, -1388, -1999, -966, 2888, 689, -3129, 6645, 5765, 579, -2978, 970, 1072, -2858, -190, 1676, 3787, 5392, -4595, 2339, -5836, -7433, 4685, -3809, 11598, -5560, -1548, 2799, -11185, 6858, -5431, -628, -6141, 703, 2781, -1203, 6562, -2913, 1564, 3037, -5333, -5476, -3981, 722, -1102, -4060, 1480, 1493, -1742, -2660, 6836, 955, 2793, 952, -1297, -1334, 462, 3169, 4349, 1454, -1458, -1541, -701, -819, 4243, -1750, -5832, 2502, 2375, 2270, -1053, 3953, 2160, -5029, 3968, 928, -335, 1468, 5074, -3308, -4236, 5022, 1637, 6135, 2077, 1149, 2009, -3804, -2177, -3834, 3005, -1475, -3197, 627, -372, -3212, -1321, -2090, -2959, -6183, 923, -3207, 2748, -1771, 1293, 440, 313, 4396, -3434, -2867, -858, -4282, 1919, -4570, -4486, -6718, 575, -1915, 3353, 1481, 521, -1846, -1555, 3627, -1757, -6434, -1046, 1369, -1834, 4217, -2499, -3934, -3361, 542, -2438, -6603, 3503, 1287, 5390, -2527, -1687, -1631, 1458, 286, 1114, 1695, -1378, 1150, 843, 7770, 925, 1231, -1054, 8939, -2499, -3718, 6254, -2052, 3705, -5189, -172, 1455, -2919, -710, 2020, -456, -439, -752, -562, 1228, 4009, 7975, 3801, -2420, -1224, -3641, 4122, -2477, 2580, -1088, 2316, -5642, -2147, -1616, 6248, 805, 2953, -73, 7437, 2149, 4019, 567, 4277, 6290, -2941, -6127, -3491, -852, -731, -2740, 759, 7343, -3531, 4987, 4661, -691, -2772, -11575, -1625, 3650, 2809, -5021, 304, -3136, 552, -2418, -4312, 4779, 1122, 3461, -5531, -3227, -181, -2287, -9379, -1285, 4555, -90, -6062, 4229, 1850, -3159, 1433, 1067, -448, 4486, 4606, -681, 1304, -3292, 492, 2676, -2260, -2065, 1011, -2457, 4886, -4214, 2183, -4054, -640, -1407, 2863, -891, 4953, 3425, 6656, 3408, 4174, -1945, -4384, -3992, -5147, 450, 5381, -3409, 3401, 5141, -6307, 4011, -9937, -4381, 1933, -3984, 317, -5047, 206, 1840, -2055, -3336, -3250, 2609, 5921, 167, -23, 4116, 5460, 102, -2886, -1874, -4344, 2742, -4321, -420, -5193, -3492, 4598, -671, -6371, 6218, 2811, -1951, -3421, 788, -2973, -227, 959, 7410, 2559, -4696, 8624, 2634, -4282, -3651, 4416, 5070, -1702, 1911, -1293, -2873, 1903, -3569, 3702, 2808, 5801, 4724, 3575, 5165, 3046, -2888, -1872, -852, -4935, -3034, 1082, 2601, -520, -710, 7794, -3223, 4542, -1355, 5047, 1, -11833, 564, -7035, 2271, -4127, -816, 7049, -4060, -2665, 1952, -8589, -7128, 1993, 2982, 292, 5446, 8458, -5796, -5692, 4700, 9107, -2030, 5807, -12175, -2757, -3816, -12650, -2320, -8900, -4019, 8753, 9492, -1886, -11662, 2823, -7632, -6805, -4164, -6665, -5087, -8368, -5075, 4500, -1708, 8576, 2678, -9238, -8252, 2215, -8004, 8881, -1186, 8840, -4176, -7131, 5504, 3863, -2052, 112, -1500, 8337, -1610, -9541, -5864, 11309, -5171, -10839, 3600, 8944, -6889, 13377, 2565, -7394, -5707, 1572, -747, -128, 2018, 6332, 7332, -2762, -560, 1657, -10561, 1281, -5922, 977, -9218, 11510, 3903, 9212, -756, 896, 1264, 6129, -498, -7168, -6081, -1498, -772, -3842, -2287, 3947, 3172, -2605, -761, -1459, -763, 200, 393, 3925, -4472, 1332, -5976, 3904, -5339, 1885, -4260, 2138, -4700, 1780, -2874, -4465, -2810, -4701, 221, 3608, 1404, 5442, -3223, 3988, -2309, -6270, -3337, 847, 4611, 5662, -4326, 3530, -540, 4344, 1844, -2527, -2903, 2873, -87, -24, -1251, 4667, -1737, 6061, 4365, -2042, -1185, 4699, 3738, 2931, 9499, 2149, -681, -2899, -2091, 368, 1793, 5375, -1115, -665, -4444, -5969, -88, 2169, -4623, -4578, -9373, 1052, -3891, -459, 1951, 1158, 679, 3347, -1717, 2250, -7099, -5161, 4845, 4589, 2530, 1529, -772, -6, -2097, 682, -892, 3239, 3513, -1031, 1093, 1610, 2188, -363, -3196, 1443, 1296, -675, -4591, 2548, -4581, 2807, -2968, 257, 1304, -365, 286, -7316, -4563, 3555, -3299, -2718, -3357, 1321, 4876, -5775, 2650, -7127, 1259, 5754, -5966, -1050, 894, -3357, -6216, -1221, 4296, 1346, 5856, -3680, -2542, 4164, 4365, 7489, -1795, -1637, -1002, 693, -2910, -1788, -2087, -3390, 4937, 696, 6752, 3577, -2623, 5905, -7995, 2110, -1598, 2837, 4788, 3, -18, 1134, -2531, 6432, -1253, 1118, -316, 7223, 837, -714, 2698, -2379, -2559, 3282, -2781, 627, -1347, 772, -4446, -2082, 2115, 8562, -1420, 363, 672, 6, -2708, 3267, -1565, -2414, 4768, -128, -3146, -556, 5134, -6414, -6207, 572, -1627, 0, -1345, 481, -5530, -4146, 566, 942, 7466, 717, 6556, -3171, 1142, -2640, -122, -3758, -1945, -1712, 4302, 189, 2731, -4787, 6436, -3808, -4491, -2660, -242, -3242, 4872, 570, 1279, 2220, -1257, 5766, 845, 2020, 6267, -3159, 5204, -3222, -2261, 1868, 2028, 1229, -3601, -4396, 2962, -4096, 3002, -2181, 81, 2473, -1004, 2875, -3828, -1114, -1212, -2109, 3998, 2570, 4324, -1701, 3038, -2825, 2691, 693, 370, -6392, 1519, 2625, -2998, -4470, -2377, -984, 1992, 5710, 3618, 1317, -899, 10419, -3432, -2987, 4699, -4124, -1335, -980, 341, -106, 4306, -4088, -1348, 2490, 3870, -5577, 912, 4774, -5535, 1557, 1028, 284, -2756, 535, 5956, 874, -4132, 3248, 1514, -3157, -1555, 146, 2527, 3336, -3809, 3125, -1613, 1081, 2662, 2136, -2426, -2138, -926, 4636, -1623, -3542, 2913, 532, 1797, 3469, -4374, -3857, 1909, 649, -3996, 2587, 6696, -1044, -879, -491, -4090, -5857, 3059, -528, -320, -713, 1101, 4347, -1220, -2087, -6840, 220, 5240, 2570, 2569, 2805, -3368, -561, -2977, -4248, 4410, -682, -2036, 30, 4654, 4383, -2992, 803, -2366, -1346, 407, -825, -4866, -392, -500, -2890, 2747, 3670, 3987, 2239, 662, 1837, -3987, 459, 1559, -4341, 1682, 326, 4294, 313, -1074, 3703, -439, 2560, -334, -3660, -4612, -4983, -7007, 1109, 3148, 1268, 1392, 3280, -618, -4451, -316, -2433, -8701, -523, -612, 875, 3338, 3296, 2189, -523, 2500, 2846, 5759, -445, -1017, -3224, 2650, -8467, -2420, -6571, 742, 8859, 924, -6162, 3611, -856, 2609, -2128, 7, 3514, 153, 1961, 1096, 1314, -673, 1082, 7752, -3926, 2510, 4054, 1605, 5548, -648, 5600, -4254, 2200, 3751, -4120, 1650, 1824, 2387, -3526, 671, 1884, 5573, -681, 5752, -75, -8244, -6603, -824, 4595, -1298, 1505, 5169, -2733, 2344, 1030, 1241, 1506, 1365, -2225, -2144, 2101, -835, -3406, 561, 2374, -2694, -428, -4964, 411, 285, -4281, 1977, -2337, 2090, -2009, -2431, -1594, 3432, 376, -2770, 3238, -2282, -3240, -6035, -1390, 1124, 2301, 1208, 3293, -1865, -4269, -3048, -2137, -4862, -267, -4205, -3947, 3362, 1536, -958, 3595, -2249, 597, -1169, 1845, 757, -2238, 1982, 38, 870, 411, 5765, -1424, -6091, -1032, 909, 3842, -1239, 179, 2848, -292, 2671, -1065, -2144, -2958, -4116, 1128, -700, 3904, -5758, -3863, -950, -5178, -3232, 6707, -4460, -1959, 1114, -5820, 4817, -168, -1323, 1091, 3590, 2353, -1336, 4164, 327, -774, 2135, -3874, 1535, 3372, 5106, 1516, 4613, 3932, 1601, 3061, 5848, -2126, -184, 6624, 1763, 4015, -713, 550, -5870, 208, 1231, 3507, -5636, -1667, -5015, 3549, -1714, -3179, -1666, -4275, -1823, -1543, -487, -1758, -2544, -946, -4528, 1953, 3199, -6087, -2139, -21, -2001, -3699, 2434, -570, -1032, -1486, 2109, -3042, 1742, -1544, -271, 1415, 3123, -4183, -2650, -1448, 1450, -350, 2220, -2708, 1374, 1636, 395, -2728, 2239, 1117, 4829, 470, -1537, -1243, -3900, 1899, -555, -2274, -133, -3752, 2836, 644, 924, -1003, 3150, 242, 2345, -72, 2201, 5662, 2500, 3762, 2587, 532, 3620, -2365, -3071, 5492, 1374, -488, -5972, -3324, 3464, -6381, 963, 2323, -2535, 1182, 3591, -2557, -607, 6896, -3433, -6708, 602, 3642, -7616, -265, -3342, -2016, 378, 1344, -8248, 771, 85, 1589, -1969, -2022, -2283, -1858, -5916, -1095, -4753, 1538, -2025, -1721, -4488, -5072, 270, 665, -1277, -4533, 1453, -2774, -3645, -3023, 6357, -1098, 2699, -2318, -790, -926, -510, 1412, -3940, -3473, 4174, -5220, -1044, 2094, 4928, -3111, 2527, -2940, 1312, 1374, -4048, -992, -7871, 1777, -6397, 2306, 5941, 1648, 2980, 3247, -4813, 4612, -1416, -3626, -928, -4983, 6048, -359, -5346, 292, 1268, 1815, -781, -1922, 2572, -472, -788, 5150, -5507, 5109, -1352, 2292, -3611, 3324, -3594, -9002, 5249, -5254, 4948, 2429, -4638, 7689, 6904, 2655, 10212, 1958, -9329, -11686, -6674, 690, -783, 1138, 5977, -522, -410, -7147, -2004, -884, -4073, 1060, -2122, -1855, -5403, 1256, 1237, -1880, 4939, -6537, -779, -7320, -7289, -2882, 9156, 262, -3898, -21, -4407, -2937, 999, 195, -7838, -6859, 5948, -3925, -87, 1927, 5108, 3567, 8541, 8864, 4842, 7057, -1260, 1117, -5294, -7357, 5140, 1535, -929, 3795, -378, 2401, -2775, 5420, -7398, 4984, -5131, 599, -2210, -9400, -76, -5620, -4484, 1906, -7879, 2931, -2612, 6737, -5078, -588, -1470, -3516, 2472, -2896, 1577, -249, 3853, 1234, -4810, -1598, -6222, 2462, -1148, 4595, 2107, 1830, 3366, 43, 211, -599, 578, 1148, -4355, -2417, -3788, -498, -600, -5, 172, 4835, 1153, 1013, -2749, -2345, 388, -4312, 1719, -2531, -3435, 71, 2228, -614, -3132, 1936, -1856, -5563, 553, 3000, 1790, -1339, -2567, -1032, 784, 325, -988, 445, 60, -1509, -1298, -3787, -220, -684, -2921, 985, 1671, 4120, 1074, -652, 1330, 4385, -2254, 2071, 7097, 781, 7365, 2271, 3554, -3058, -3435, -953, -201, -2189, 4334, 409, -1141, -2657, 4085, -3197, 1171, -2280, 1127, -1408, 670, -851, -690, -2239, -2621, -1842, -4198, 8544, 2447, -1043, 4439, 3399, 325, -1507, 1447, -822, 3582, 3251, -1716, -2027, -1039, 5263, -859, 191, 4161, -4822, -3582, -6914, 3875, 1591, 4678, 652, 1177, -3453, 258, -867, -372, -2568, -91, -5762, 2300, 1230, 6263, -4877, 5143, 5533, -3142, 3073, 3567, 4608, 3041, 952, 3910, -1057, -4584, 4138, 2531, -5041, -3273, 2086, -2976, -2782, -3253, 4453, -835, 773, 4358, 3075, -2550, 1530, 6671, 4738, -2870, 1006, -4100, 3430, 765, -5191, 4561, 1346, 1452, -1761, 1652, -2391, -4798, -1392, -1797, -174, -2371, -3606, 6135, 9728, -662, -621, 1874, 3779, -6009, -2890, -4322, -3561, 4869, -5841, 3201, 610, 786, 1154, 2804, -5761, -9479, 3982, 4128, 5612, -7781, 4593, 4152, -10499, 607, -11425, 587, 8367, -9163, -6945, 11110, 88, 2110, -10251, 7398, -2811, -524, 6366, -4677, 5675, -719, 4298, 2986, 4351, 8741, 2207, -6589, 5387, 577, -1594, 1175, -4437, -1035, 1906, 158, -4835, 7139, 10551, -3449, 3753, 2923, 368, -2390, -1958, -7025, 1980, 2009, -4862, 11613, -6950, 4096, -5069, -7698, -2523, 3290, -517, 13553, -3669, -2737, 4500, 3030, 9571, -392, -5050, 6102, 890, -4607, -1130, 7407, 4319, 2452, 5739, 760, 7917, 1147, 7492, -3788, -7319, 138, -2879, 1049, -6413, -6962, 3767, 5651, 9768, 11428, -10704, 126, -172, 7075, -8955, -694, -6606, -2172, 6672, -3108, 5572, -4011, -2390, -1759, 2523, 1771, 4358, -5305, 2796, 5021, -3854, -7478, 1793, 1405, -2372, -4704, -5355, 5773, 2555, -588, -160, 3013, -1623, -3217, -1121, 1678, 3217, -3527, -1155, 6010, -922, -248, 1929, -6320, 354, 1155, -6095, 2179, 5828, 5847, 2274, 2837, 3987, -4486, -3967, 9744, -35, -421, -2225, 5150, -1918, 3554, 2174, 1960, -3551, 4279, 1075, 3873, 5860, -2055, 1296, -1522, -1790, -3978, 2335, -894, 72, 2462, 3251, -2485, -2628, -2244, 4242, -1612, 1699, -1657, -2349, 4982, 1391, -1846, 2515, 5146, 1828, 6121, -5929, 4116, 3712, -4224, 6126, -4058, -1252, 1048, -5551, -3887, 2527, -1582, 5552, 4590, 3360, 6782, -174, 2008, 4228, 3751, 7375, -1069, -7580, 1632, -4578, 5145, 1864, 5555, -723, -1465, -3081, 29, -12, -5720, -2591, 2878, 4047, -1233, -1228, -4476, 4111, -671, -627, 3258, -2381, 6925, 2017, 2552, -4029, 753, -6183, 3727, -1309, 5467, -4642, 10949, 4957, -163, 1226, -4983, 3576, 3547, -726, 6224, 7474, 2933, -9609, -11795, -908, -788, 6214, 4147, -921, 3718, 2742, -2434, 7684, -3103, 3095, -3427, -3725, 939, 1549, -620, -1646, -4133, 5327, 5528, -4830, 5442, 3161, 232, -2177, 583, -2458, -3835, -5710, 3338, 3500, 1986, 2102, -1138, -2948, 5141, 5399, 3885, 1622, -234, -1633, -1166, 259, -4890, 1466, 731, -472, 829, -3943, 1197, 141, -4449, -3033, -3793, -956, 3000, 2063, 1541, -1704, -4543, 1600, 2010, -1928, 1411, -7629, 2834, -1661, -891, 2843, -447, -3462, -2453, 3885, -2888, 4113, 6903, 534, -2085, 4535, 2647, 2775, -2461, 4710, 5627, -2882, -544, -1138, -2500, -2457, 298, 236, 1674, -2644, -2185, -2808, -879, 101, 1099, 11, -2052, 4479, 5218, 585, 1281, 800, -5765, -1427, 6619, 391, 1481, 363, -1830, -1680, 4831, 1880, 1830, -36, -3328, 2252, 1702, -3204, -2744, -2076, 612, 2078, 115, -2906, 1099, -1429, 1719, -118, -4799, -1882, -620, -6084, -2276, -3431, 2007, 6097, -5819, 1953, 1559, 196, 2698, -3413, 876, 3321, -2315, -3383, -262, 1511, -1965, 1443, -493, -2535, -680, 1430, -4630, 1650, -1268, -494, 5952, -2308, 441, 1385, -136, 5012, -332, 2336, 4769, -4044, 1794, 2794, 6058, 3240, 1146, 5507, -3294, 2142, -2829, -2642, 2290, 691, 2910, 1023, 1225, 1350, 1188, 1056, -1416, 3027, -3962, 1020, 2621, 901, -330, -3648, 1330, -548, 4224, -3175, -3388, 5142, -597, -873, 293, 1249, -709, -4275, 2713, 141, -5570, -3444, -1712, 4698, -1053, 2005, 3335, 159, -2539, -1031, 2483, -1361, 6584, 2283, 5044, 4563, 711, -1008, -3275, 3906, -2349, -2267, 2911, 5201, -1328, 1752, -3309, -3881, 2462, -7435, 3181, 4296, 4252, 5006, 2482, 2084, -4705, 2219, 4702, -3632, 2944, 5054, -852, 3168, 6524, -1287, -2292, -685, -5611, -4271, 2734, 6097, -6457, -2176, -5007, 1206, 4752, -2485, 2694, -1477, 2454, 3775, -1867, -953, -4569, 6269, 903, -3686, 2249, -7178, 1218, -883, 6598, -1524, 4552, -3397, 5994, 456, -2755, 6520, 1302, -682, 3043, -1649, 3944, -1339, -1284, -2676, 1590, 3441, 2507, 2574, -3658, 2473, -4469, 4952, 4044, -1989, 2196, 100, 2805, 215, -3136, 908, 940, -2432, 417, 2049, 1222, 2996, 949, 858, -324, 6409, 1159, 1236, 886, -2579, -3290, 5703, 5557, 4432, 3800, 3628, -1138, 1060, 1590, -4809, 3420, 5002, -33, 642, 4342, -2133, 4618, 2585, -4863, -4393, 7364, -1406, 1138, -5673, -6916, 6991, -2689, -4785, -2508, 4971, -2686, 4297, -1642, -1015, 5531, -1838, -3698, 3410, -6486, 3698, 2980, 3974, -2702, 5796, -2608, 668, -3535, 3269, 6970, -5757, -3719, 6218, 673, -1029, -2120, 5498, -5656, 1099, -979, -3711, 3593, -4391, 5427, 1750, -1310, -2384, 2004, 650, 6842, 745, 3483, -2061, -2214, 5480, -1269, -7654, -3458, -3887, -458, -652, -916, 6074, 3352, 2454, 2119, 898, -1249, -1959, 3920, -2246, 4063, 1970, -11256, 2821, 6555, -4283, 6028, 6088, 2568, 1965, -2436, 4497, -5793, 4535, -4147, -380, 926, 421, 1817, 6276, 1481, -105, 904, -65, 2294, -4511, 999, -5894, -2672, -4495, 740, -1750, 3106, 2125, -121, -62, -2772, 2021, -2999, 5955, 4790, -1789, -4005, -334, -4332, -2360, 3161, -331, -4808, 689, 2746, -2952, 1408, -1281, -5326, -1573, -1846, 2938, 2054, 904, -1204, -1469, -1995, -359, 4501, -6891, 6846, 736, 3966, 330, -8177, 877, -5539, 5, 6952, -5053, 357, 2429, 6305, -1368, 3360, -3724, -5474, -1799, -1749, 3535, 186, -1838, -1975, -3273, 4483, 6120, 3608, 42, -1318, 10181, 7099, 6220, 3571, -4785, -1599, 2181, -5928, -1118, 862, -4437, 3306, -8365, 5366, -4100, -2442, -839, 7931, -3420, 4630, -3088, -2022, 3743, -4494, 3332, -2175, 7683, -4943, -1910, 4894, 876, -3133, -7795, 2860, 3816, 2173, -695, -1091, -4914, 2052, 3094, -1576, 2989, 4862, -4907, -2378, 5316, -7622, 3213, 1555, 1523, -6871, -9564, -2320, 3034, 644, -1386, 3277, 788, 2761, -4749, -312, -3132, -5184, -4555, 6190, -142, -2483, 1595, 7112, 1621, 186, -2794, 4533, -1848, 2945, 448, -3163, -5864, -765, -108, 4332, -3676, -2629, 6399, 4369, 2474, -1528, 507, -3595, -4729, 4651, -2508, 3227, 7247, 6305, -2056, 2103, 2300, 4020, -2293, 3905, 1503, 4245, 269, 1075, -5386, -5322, 2756, -946, -4627, -1464, 3563, 3094, -2354, 5489, 3584, 2512, -6357, -40, 883, 3079, 7666, 919, -159, -277, 2352, 1153, -4738, -3205, -1725, -4253, -2798, -3172, 1080, -4632, 1705, -2648, 483, -1237, -698, 2602, 2044, 1187, -2372, -1181, 139, -3012, -400, 1328, -52, -954, 423, 2288, -406, 3651, -3102, 149, -1856, -3517, 120, -1478, -3551, -4955, 3276, -2115, 485, -74, -1543, 4464, -3826, -2354, 5750, -3410, -1390, -919, -1752, 830, 3887, -687, 4886, -4912, -1080, 1208, 4602, 524, -525, -865, -742, 2054, -3843, -1195, 5064, 8211, 6385, 4580, 6219, 6067, -1804, -4999, -5413, -3264, 311, 1752, -1457, 6898, -2563, -4452, 2381, -3498, 1155, -1503, -500, 3357, 4003, -101, 5182, -5625, 995, -3104, 1049, -357, 10725, 192, -1371, 6217, 3569, -395, -4397, -1505, -6965, 934, -7100, -3037, 1287, -118, -5285, -1244, -2171, -7210, -480, -5564, 2192, -3937, -10, 1457, -1746, 134, -3055, 3987, -2684, 1070, -2761, 1679, -4815, -2566, -5499, 6601, 2254, -2783, 3660, 301, -3373, -299, 2668, -2143, -1175, -4229, 1846, -2372, -5061, -2111, -2180, -3798, 2255, 2379, -2522, -2914, 4910, -3062, 2196, -142, 369, -264, -2033, 2176, 178, 4796, -7458, -551, -6436, -9419, -2570, 460, 4116, 1030, 2546, 7939, -7366, 4116, 4790, 3231, -4043, 159, 2000, -2109, 474, 4702, -286, -864, 3763, 1250, -5378, 5608, 4401, 73, -5267, 8330, -5424, 1406, -2694, -3123, -1428, 931, 3561, -4757, -2600, -3215, -2275, -260, 2718, -2081, 1345, 4502, -5002, 7277, -6166, 115, -3650, 3782, -1309, 5577, 5193, -9151, 1491, -1491, 3724, -920, -841, -519, 4670, -3798, 4067, 2480, -5026, -3170, -9622, 6861, 8531, -652, 10821, -3979, -735, 1001, 4256, -6798, -710, -2572, -3253, -2523, -3893, -671, 1443, 1001, -3210, -1794, -4642, 1493, 6438, -6247, 1419, 6857, -6224, 710, -3635, -3183, -6749, -4376, -2508, 1319, 2551, 2449, 3934, 2906, 10, 2717, -600, 126, 473, 3776, 4010, -7246, -1850, -345, -1073, 3414, 4139, -27, 150, 1575, 2786, 4113, -1622, -518, 979, 2913, 2705, -91, -3806, 2127, 5141, 2552, -1830, -1208, 1740, -269, 5071, 4329, 1256, 2769, -2140, 4029, 64, -5261, -112, -436, 2375, 4575, -847, -230, 5174, -413, -7025, 1553, 407, 3690, 557, -2336, 1101, -3970, 6267, 2125, 4776, 692, 6013, -4785, 3415, -504, -4503, -1565, 4433, 1043, 4635, 4425, 206, 1770, -943, -13, -1994, -1105, -4208, 6179, 5434, 1919, 2338, -2787, 2631, 3722, -680, -1054, -3557, -318, -5996, -1314, -616, 596, -375, -335, -3318, -887, 718, 2388, 3187, 2911, -875, -2198, -4427, -974, 4840, -783, 854, 2449, 4080, 7305, -3176, 4708, -1747, 4882, 1783, 1913, -1285, -1077, 3254, -2797, 3307, 2918, -1823, -4405, 6324, 4363, -2751, 2757, 2786, 621, 968, 4050, 2063, -2291, -900, -3248, 2041, -3697, -2277, 1153, 1193, -104, 1943, 2345, 338, -4902, 1241, 1974, -3209, -189, -1177, -146, 649, 5288, -4089, 6208, 1178, -4423, 5187, 1091, -3310, -2223, 1552, -12, 3899, -5260, -1002, -11, 546, 4526, -3521, 3758, 2731, -2840, -921, 294, -2977, -1578, -154, -3304, -3921, 2616, -650, -394, 2147, 181, -19, -5070, -994, -757, -9674, 2225, 4240, -1199, 2989, 3460, 1461, -2153, -29, 2038, 8822, -292, -3288, -1194, -4071, 2657, 4072, 1013, -1694, 111, -7747, -8236, 4839, -878, 840, -5617, -7147, -138, -1464, -3119, 5319, -8053, 1884, -1450, 2182, -9290, -5716, 5753, 925, 4461, -3158, 1694, 4095, 5989, 6219, -1472, -2839, -1067, -5862, -2107, 3967, 7370, -1189, 3669, -839, -491, 5091, -8870, -544, -1826, 2848, -5272, 2609, 2602, -4707, -2667, 2902, -4183, 4853, -1768, 4659, -6769, 2450, 749, 63, 1870, -3519, 2215, -3301, 889, 1823, 6051, 4756, 2035, -5146, -7099, 1669, 1557, -3039, -872, -1190, -6008, -643, -1452, 3898, 2814, -1687, -3356, 2895, -811, 820, -3649, 3549, -1941, -4518, -7958, -977, -4710, -2329, -2117, 73, -1053, -4097, 2110, -3500, -2437, -4808, 88, -2416, -2950, 4236, 1375, -4234, 2460, -532, -1580, 6008, -5417, -1032, 2558, -686, -1526, 811, 1594, 1158, 1436, -3844, -3206, -4868, 1740, 5122, -15, -731, 3298, 575, 1373, -5613, 68, -2389, -2619, 290, 2402, 736, -5007, 4235, -3518, -4160, -4023, -3409, 1681, -479, 863, -1223, -2999, 3873, -589, -388, 3960, 1851, 3681, -651, 2829, -2242, 2190, 452, 4, 4784, 1185, 822, -228, -1326, -639, 2845, -401, -923, -1971, -5594, -4248, 4455, -661, 1214, 1390, -9669, -1704, -4555, 5261, -2873, -543, 6131, -4685, 1937, 8922, -391, 2215, -802, 3742, -3774, 813, 1391, 2339, 8437, 4292, -791, -6365, -2657, 321, -2586, 4912, -230, -1733, -4699, 3820, -6680, -5134, -3402, 0, 3674, 4000, -3276, -4011, 5673, 2537, -704, -2908, 2653, 4023, 883, -4917, 1268, -8360, -6614, 1723, -3861, -4300, -1886, -1436, -1824, -1242, 4745, 2277, -651, 5692, 4353, 2434, -2434, 3393, 4945, 1610, 1409, 2065, -2321, 1875, -46, -3802, -4407, 3749, 4650, -861, 4217, 137, 2963, -2010, 308, -3284, -7923, 2714, 1195, -2906, -555, 964, 6629, 2689, 2658, -2712, -1299, -1821, 2007, -7536, 1617, 1954, 799, -2587, 3290, -2382, 300, 1265, 59, -612, 1289, 5319, -1251, -5709, 1436, 5014, 907, 1097, 2124, 512, -3595, 2216, 3894, 1776, 3117, -6699, -3210, -112, 4716, 878, 392, 1583, 4458, 7053, 4612, -7757, 7211, -3649, 1644, -839, 2016, -5013, 6833, -4890, 3297, -1156, -2656, 9829, -1860, -1344, 8567, -6594, -4261, -1102, 4724, -1605, -2450, 5661, -2931, 7502, -1501, -762, -2538, 8642, -9342, 4314, -4272, -3685, -2594, 4739, -6817, -426, 4086, -2734, -3798, 1239, -7566, -3970, -4655, 2019, 3696, 5044, 4278, 6242, 1834, 1128, -4095, -2183, 3155, -590, -5266, 251, -2825, -3572, -1563, -1710, 984, -2872, 844, 2303, -2914, 2538, -1902, -3384, 146, 977, 140, 2965, 2178, -607, -2081, -2074, -2369, -6427, 748, 1632, 1135, 4284, 629, 4822, -1115, 3429, 2873, -2290, -1353, 2471, -5185, 123, 3139, -5476, 2010, 1475, -5788, -1103, -3109, 48, 1937, 2393, -355, -2191, 1247, -5079, 8556, -2267, -4118, -523, 2860, 3045, 1861, -2232, 232, -4903, -3921, 2425, -6048, -216, 4638, 3795, -2295, -2373, 2971, -5171, -708, 2309, -2367, 3942, -721, -571, 1188, -4749, 569, -2212, -2589, 1583, -3246, 2050, -4801, -5846, -498, -5063, 1700, 4387, -3687, 667, -10387, 1970, 840, -11178, 6284, 6296, -3835, 7596, 12317, 1266, -864, 1577, 30, -2745, -8258, 6448, 542, -315, -2245, -6075, 5976, -3148, -110, 2492, -11884, 2315, -3304, 4610, -8524, 5487, -9425, 4098, -6671, -5179, 6957, -2303, 5198, -3124, 2833, 4198, 5553, 14056, -2758, -1284, 5551, 337, -9063, 5996, -4332, 1623, -1568, -3262, -4879, 414, 5301, 326, 4368, -270, -6168, -4965, 2746, -2530, -2167, 5190, -3603, 1446, 5583, 7379, -3314, -2559, 10931, -5842, 6998, 2693, -5608, 6608, -9206, -7757, 2604, 5114, 1300, 4937, -2509, -4146, 5117, 5902, -5080, -7863, -3678, 843, -515, 1915, 4326, 11123, -4476, 1409, -1330, -190, -4152, -836, 885, 2254, 4659, 5653, -1349, -2958, 996, 2503, -1451, 390, -1440, -1009, -1485, -3834, -3305, -3936, -96, 3636, 3956, -10, -5467, -4036, -3600, -1011, -477, 4230, -3494, 1281, 2217, -2238, 218, 1701, -1450, 2608, 6902, -4898, 4757, 6034, 2559, 2357, 1192, 3793, 804, -6457, -2795, -3072, -7776, -243, 2241, 301, -2075, 3366, -920, 211, 4930, 2488, 654, -2681, -983, 80, -2616, -3039, -3521, -3557, 499, -525, 3362, -624, 2980, -4019, 1417, -900, -3926, -809, 1091, 5232, 4070, 2202, 2018, 5058, -1563, -4398, 1664, 513, 1102, 2540, -4172, -4209, -1917, 5341, -3709, -881, -1175, 77, -1270, 1940, 1159, -1492, -1991, -1323, -1216, -1436, 1948, 2851, -337, -2751, -4636, -957, 3497, -1254, 2223, -1696, -3526, 2248, -3145, -2118, 3165, -5696, -1000, -505, 4531, -521, 1246, -1663, -3651, -1229, -2546, 4409, 700, 3304, 519, -4413, 1849, -497, -2750, 4062, 2613, -351, 868, -4347, -1676, 6471, -2560, -1249, 2322, -2200, -2929, -1538, 369, 3405, -1825, 2885, 1737, 1767, 362, 740, 911, -574, 122, -1841, 1813, -2335, 2388, -257, 189, 1228, -1862, 357, 2127, 2445, -1990, -778, -161, -2793, 1465, 1067, 3452, -90, 970, -464, -1144, -538, 1866, 2662, 205, -1209, -1082, 444, 133, -1598, 114, 1089, 5783, -2485, -4390, -4985, -1075, -3843, -2532, 1332, 2557, -10734, -6605, 4889, 8141, -3181, 1062, -923, 1209, -206, -365, -262, 5526, 2560, -885, -5207, 2338, 6682, -119, -337, 563, 3523, -1208, 994, 2429, -4327, 2575, -1362, 2672, 4323, 7742, -2483, -1160, 1325, 3238, -435, 4098, 8139, 1473, 992, 151, -1116, -3155, -757, 4760, 110, 4346, -4244, -4868, 10728, 3535, -1667, 6085, -4949, 1985, -3163, -1625, 642, 4523, 2276, -3406, 638, 2082, -1575, -1982, 5301, -2144, -4070, -2553, -1002, -5216, -199, 481, 4239, -1722, -2549, 5152, 3508, 8940, 10298, -5997, -4781, -3428, 2468, -1971, -1131, -4993, -2242, 3805, -4505, -3572, 196, 1128, -722, 3538, 402, 4056, -2667, 3097, -475, -4176, -3568, -594, -1580, -507, -2849, 274, -3315, -1256, -6011, -4192, -2992, 620, 53, 994, -2009, -197, -2103, -2223, 2303, -2767, -3437, 2967, -489, 1424, -3608, 720, 91, -493, 5896, -1279, 3888, -1923, -7255, -3364, -2337, 4010, 1002, 3964, 3127, -3205, -1832, 2330, 1088, 3002, 4977, 2921, 5650, 1197, -5116, 4800, 1901, -2009, -4392, -2090, 2036, 1369, -18, -752, 5022, 3442, 4755, 3276, -6166, 5652, 1742, 4628, -5273, -305, -344, 4079, -5166, -2859, -236, 5060, -3372, 505, 391, -1804, -1620, -919, 570, -3378, 1163, 2151, -5589, 2214, -2881, -976, 8334, -2192, 3959, 347, 759, -1467, -6360, -1033, 867, -1301, 2117, 3312, -2944, -4369, 2691, -6928, 1008, 4005, -1974, -956, 4658, 3322, 1739, 1910, -3299, 4134, 6293, -2730, -1455, -2392, -703, -3310, -4711, 1804, 2771, -1638, 810, 5905, 59, -120, -2813, 2795, -1552, -2029, -266, -5765, -2101, 2746, -2114, -224, -4867, -1803, 3008, -995, -4784, -2731, 868, -2021, 3821, -5319, 1643, 1601, 2258, 356, -4113, 2829, -673, 356, 435, -2786, -692, -2088, 779, 2105, -1522, 2495, 3066, 5756, -558, -1321, 639, 2388, -7159, 2147, 2424, 1738, 584, -368, -1233, 1186, -1256, -3715, 2077, -3697, -81, -250, 433, -3065, -6203, 6053, -4586, -403, -2064, 4, -7873, -1982, 788, 960, 4475, -3117, -4197, 5680, 2443, -2, 1281, 1892, -3270, -2924, 3203, 782, -2857, 801, -793, 4444, -4452, 581, 3604, -622, 1677, 1698, -3590, -1427, 917, 740, 3014, -3424, 1218, -132, -1337, 4009, 5383, 197, 3967, -6287, 3864, 1698, -2645, 3794, 5480, -2695, 1315, 1405, -131, 3168, 2153, -1190, -204, 4281, 2624, -1714, 5298, -4937, 3416, -1723, 2616, -23, -1563, -2075, -924, -1144, -2842, 3323, 3786, -1843, 2362, -1325, 550, -3232, -545, 4383, 5191, -4556, -503, -2470, -4912, -2156, -314, 2364, 132, 4787, -822, -2696, -1807, 2848, 2346, -1774, 1170, -316, 2553, -79, 709, 2825, -1476, 1871, 2462, 2065, -2475, 2176, -2961, -297, 1149, -919, 1264, 321, -5197, -2515, -1489, 179, -897, -953, -630, 2910, -2061, 1202, -825, -2058, -6318, 614, 338, -2815, 1559, -2012, -1996, 4506, -834, 168, -166, -2883, 6011, -2104, -2143, 1804, 1431, 1173, 2271, 1904, -4542, 643, -3943, -3395, -2646, 1515, -551, -6650, 300, 379, 857, 1112, -1443, 745, -237, 512, -2709, 2314, 1065, -3524, 2444, -2673, 1020, -2055, -2440, 6779, -364, 1097, 172, -3256, -1914, 272, 5668, -1244, -989, 4164, -3884, 1079, 4305, 4947, -4025, -598, 4407, 1912, 2038, -3522, -3095, -2469, -3335, -3738, 552, -1623, 1810, -4941, -1452, -2099, 625, 212, -9, 2808, 5219, -1979, -2264, 178, -6575, 792, 338, 5190, 5001, 5841, -698, 2623, -553, -2012, 2356, -3955, 1973, 1605, 2566, -3097, 793, 5589, 1772, -651, 479, 2417, -1681, 4926, -1325, 1051, 2277, 6249, 3787, -2562, 4632, 7591, -1318, 22, -3311, -1669, 6462, -6602, 3400, 665, 3540, -509, 1653, 3065, -4020, -389, -1152, 5565, -5022, 2040, 5961, -5818, -2552, -2617, 3729, -6010, -4926, 4624, 2614, -2845, 310, 3757, -1084, -3781, 4517, 1231, -4503, 3044, 933, 1019, 8158, 3158, 5442, 970, -5270, 3417, -4766, 1868, -1506, -599, -2719, 1907, 3611, 4345, -2338, -14, 3186, 1042, -4576, -59, 4986, 2748, -2873, 330, -1336, -476, -828, -4550, 3876, 3346, -4736, -868, 1651, 273, 2176, 1318, 2484, -6034, -4859, 3830, 2513, 349, 5523, -4944, -3569, 109, -2411, 1654, 938, 1314, 1196, 1685, 2110, 2699, 5321, 429, 791, 189, -3207, -3094, -7491, 3557, -2032, -1387, 2271, 712, -300, -729, 5040, -1753, 605, 1036, 1638, 2109, 1453, 4368, 2083, 752, -4798, 2385, 1505, -3022, -45, -821, 441, -698, -6427, -6007, -3353, -1464, -2394, -3416, 3367, 4274, 1328, -4804, 4861, 1389, -2161, -2771, 4079, 4549, 1457, -4099, -6302, 2231, 3530, -6630, 2402, 2137, -3921, 2194, -5721, -2490, 7068, 4088, 2224, 5863, 4327, -4624, -4652, -655, 3619, -2911, 6617, -2635, -2113, -1982, -2133, 4239, -2884, 2261, -4217, 67, 1209, 9582, -4654, 2599, -5532, 976, 5139, -1107, 3324, -2628, 638, 1226, 3731, -7175, -5679, 6381, 4890, -5469, 1055, -4059, -401, -930, -1091, -1484, -1703, 6041, -5828, -1695, 1984, -1990, 8806, -1905, -3089, -6730, -5873, 1801, -2678, -228, 4580, -101, -1124, 5823, -4142, -903, -2613, 5679, 2979, -297, 5568, -2294, 183, -1122, -1324, 3627, 1366, -326, 442, 3100, -5702, 1269, -1163, -132, 5897, -196, 729, -2703, -1837, 595, 371, 2120, -468, -6509, 3134, -1502, -1961, 1027, -2878, -7263, -57, -1388, 1807, 7562, 3072, 25, 4140, -2552, 1715, -1566, 1872, 542, -5160, -330, -2130, 1298, -224, 5882, -651, 1916, 1051, 8084, -549, -2421, -2190, -1325, 1780, -556, 1779, -297, -3917, -22, 5505, 1403, 2460, -3243, 4118, -5708, 3096, -7323, -3107, -1010, -832, 1250, -3949, -2417, 502, 1855, 3922, -3373, -1751, 860, 3715, 745, 1658, 487, -2259, 4056, -726, 2850, -88, 2151, 173, -4119, 135, -3478, 2871, -162, -3484, -317, 1378, -4420, 1583, 3456, -7059, 813, 5203, 3536, -745, 7572, -362, 3040, -6260, 2651, -3980, -4426, 4001, -864, -7538, -2878, 2884, 4422, -2515, 3124, 2378, -1340, 276, 205, -779, -8481, -7436, -8072, -1280, 5846, -3197, -3040, 1630, -1749, 3795, -2026, 6492, 2212, 6690, 656, 597, 2503, -2909, -9083, 2707, 700, -401, 3736, 2599, -2552, -3055, -1840, -7778, -8466, -3620, -5367, -515, 4267, -10498, -3682, -120, -6018, -4045, 3245, 4728, -11077, 6477, 3973, -6785, -139, -2813, -4708, 5260, -3028, -3797, -1262, 5705, -4414, 46, -242, 3247, -4545, -1306, -232, -3106, 922, 13861, 591, 4765, -2005, 2163, -8544, -2467, 5491, 1329, 2222, -255, 3284, -2154, 3326, 3360, 3273, -1875, 1457, -3151, -2394, -4446, -4686, -3903, 6461, 1467, -3862, -1249, 864, 3477, 2725, 1666, -2857, 78, 1560, 6363, -3814, 3616, -598, -5661, 673, -527, 1783, 2556, -2559, 6538, -2416, 4813, 1906, 5203, -2528, 838, 298, 549, 2344, -1468, -2630, 6200, 1065, 7620, 3424, 1970, -1972, 3298, 2638, 6223, -5459, -5293, -3301, 3122, -2259, -4893, 550, -4336, -7255, 2025, 6842, 2097, 1571, 7444, -6403, -183, 1677, 4862, 24, -5247, -10370, 3781, 776, 8426, -530, 3317, 4020, -3988, -2648, 195, 5605, 4420, 755, 7400, -2668, -1485, -2493, -977, 1308, 2173, -3880, -3284, 4922, -1735, 7109, 3753, -3248, 527, 779, -2062, 4045, -1153, -501, -5672, 4376, 2359, -1857, 1223, -65, -2897, -5513, 1749, 3359, -4392, -2053, 4447, 4468, 3213, -2944, 2377, -808, -3919, -10, -1809, 1887, -700, 5088, -1374, 2929, 3451, -5774, 2237, 4663, -1282, 4445, -5174, 2095, 2075, -1724, 2175, -843, -5343, -2848, 893, 1776, 3797, 4771, -4392, 1410, -2062, -2660, -5274, -107, -4169, 845, 5513, -3796, 2260, -543, 7116, -4468, 2159, -2324, 416, 1196, 6319, -1379, 886, 3115, 162, -2234, 6814, -776, 3285, 7086, -986, 7697, 819, 4312, 2389, -1407, -7458, -1889, 2745, -2982, -722, 2106, -3167, 3049, 2749, -597, 7617, 1739, 5990, -606, 5762, -7552, -6815, -1798, -1606, -8543, 1796, -3935, -11114, -3499, 2186, -6799, 7167, -1383, 2051, -7989, 8820, 1805, -5388, -10713, -2871, -3021, 7552, -5171, -3421, -7774, -4446, -1641, 1790, 213, 4164, -7287, 2903, 4947, 3772, -2244, 5697, 2568, -2718, -3785, 6220, -1802, -4604, 512, -5943, 4563, -2120, -1625, 5442, -7461, -4196, 3250, 5670, 5365, -288, 6661, -1582, -2968, -9339, 4047, 1726, -1785, 4111, 7355, -3577, -6964, -1108, -2003, -338, 417, 4180, 2726, 1148, 2859, -4873, -666, -3669, 4195, -2098, -1739, -1305, -1891, -774, 10464, -1856, 649, 1482, 2102, 770, -1670, -4040, -5240, 6266, 1530, -1546, 8692, -2324, -4654, 2603, -5988, -2382, 2492, -83, -4291, 2474, -3179, 3846, 798, 1740, 1141, -4305, -1227, 108, 2017, -5874, 5914, 5482, -5046, 667, 432, 1524, -381, -1225, 6253, -1935, 536, -2918, -609, 2359, -1001, -1986, -2934, -8287, -3846, -5525, 4591, -1109, 3479, 6889, 1979, 250, -11453, -648, 3671, 1413, -7748, 3182, -4263, 1946, 508, -6746, 6322, -791, -6035, 2402, 3063, 2845, -3836, 2349, 3002, -3015, -1723, -1514, -580, -1834, 3391, 6871, 3076, -7945, 177, 812, 2077, -2411, 3452, 1958, -1869, -6172, 2290, -525, 5734, -7451, 1435, -6722, -842, -462, -3182, -607, -2038, 6211, -704, 5671, 4087, -2149, -2338, 5875, -4477, 4654, -6167, 8361, -2870, 1040, 5207, 3473, -336, 479, -6898, -5069, -4013, -1891, -5194, -6282, -2753, 0, -4383, -2113, -1576, 7361, -9847, 3482, -9608, -5979, -4666, 1624, -6189, -357, -15464, 4598, 771, -3331, 4528, 4959, -2772, 3447, -1573, -1604, 2351, 4843, -754, 5171, 2889, 4878, -2082, -2438, 1361, -3121, -9400, -2010, -6974, -3238, -1434, -4461, -1584, 1235, -3604, -688, 3153, 6901, 3436, 4825, -5772, -2325, -2485, -240, -5724, -3941, 8239, -2571, 8784, 1926, -7777, -731, 211, -8334, -855, 2200, 9012, 3575, 740, -331, -3815, -310, -453, 3349, 168, 4830, 1051, 5416, 1494, -1603, -886, -3746, -2302, -1272, -519, 6859, 409, -501, -1641, -6630, 3304, 797, 371, 128, -1092, 2134, 5337, -4655, -1032, -1814, -3473, 1885, 3551, -1034, 4443, 4025, -3181, -1021, -5526, 3660, -4449, 833, -33, -298, 4853, -3623, -3885, -262, 2300, 1329, 483, 16, -4810, 2535, 1518, 2759, -992, -3006, 1750, 2356, 3209, 376, 3096, 5496, 1764, -5680, 2886, 541, -1133, 3641, -2728, 2500, 284, 5476, -4644, -3924, -7884, -4724, 1560, 5993, -2256, 4318, 3066, -1539, 1322, 1507, -922, 326, -5638, 3021, -820, 2575, 8258, 1556, 1642, -3501, -957, 5047, -11107, -6229, -5789, 5352, 495, -5963, 1875, -8458, -4886, -110, 6000, -3488, -2051, -7212, -4561, -853, 3964, 194, -1856, -364, -4592, -6068, 1806, 8, -2389, 7147, -3826, 84, 1558, 2833, 3653, -1058, 2159, -1188, -767, -3239, -2940, -3371, -5004, -2425, -3910, -60, -7589, 357, 2826, -1575, -164, -3203, 5572, -8038, 1329, -233, 284, -7813, -2357, 7053, -2992, -4109, -7326, 6254, -2556, -3175, 5165, -714, 1791, 1780, -4968, -2813, 4252, 3476, -748, -5327, 4590, -3874, 8798, -3978, 3604, -608, 4620, -2704, -886, 2373, 6753, -1048, -5752, -4836, -9180, -758, 4190, -1781, 1256, -2960, -692, -2326, 258, 5507, -2821, -2119, -232, -2251, 7363, -2057, 1388, -4209, 4131, -477, -3525, 7016, 4172, 4255, -7353, -755, 2054, 1154, 587, 6379, 6282, -4776, 2702, -7693, 7855, -813, 3744, -2545, -2100, 3107, 1377, -6837, 775, 1518, -1257, 4155, -1300, 88, 1664, 852, -9024, -4540, 2726, -5739, 1044, 5200, 3051, -4922, -3790, 6312, 3532, 1291, 7356, -1619, -1605, 6259, -2168, 69, 4898, 1309, -1829, -4581, -6316, 4440, 4483, 274, -7467, 5983, 994, 4537, 1895, -2092, -618, 1018, 4214, -3682, 444, 4034, 3877, 2973, 1289, 945, -1201, 4088, -3440, 5398, -2917, 2241, -2403, 3528, 6552, 699, -3748, -6110, 2371, 3650, -229, 846, -5441, 4477, -4847, -3689, 3033, 1223, 2741, 4631, 2322, 2629, 1945, -7165, -759, 5118, -3520, -5564, -6500, 2161, -6344, -3212, 4033, -1588, -7670, -1445, 2173, 374, 4848, -2836, 3957, -3416, -3460, 2817, -3902, -2185, 1347, 53, 4110, -184, -2531, 3496, 2761, -463, 1306, 6907, 5633, -2052, 3723, 827, -5790, -5934, 5178, 2851, -3577, 6515, -4287, 3484, -2192, 337, 3334, -3093, -3728, -135, -20, -1087, 6286, -2195, -1714, -6029, 4060, -849, 2005, -2009, -1452, 915, 3839, 994, -3323, -109, 2597, 203, 5668, -4832, -1408, 2671, 2306, 616, 1122, -3504, 2888, 964, -3323, -513, -2228, 807, 604, -1036, 2073, 1117, 236, -4257, 2456, 2432, -2328, -1805, 4586, 262, 326, 4473, -235, 5076, 1973, -1305, -768, -5320, -2889, -4578, 3545, 7384, 2381, 1980, 1047, 5447, -4891, 79, -907, 5151, -518, -864, 3358, -3475, -3399, -3525, -4179, 3210, -631, -2566, 3090, -5999, 170, 7186, 2213, 5439, 312, -1832, 3187, -5196, -3602, 6728, -1469, 2731, 3025, 1532, -4706, -1742, 3883, -5820, -4207, 4689, 6495, -2810, -4296, 934, -1083, 1938, 506, 2888, 382, 3192, 834, -3435, 4093, 2211, 2149, 6086, 38, -3222, 2708, 3009, 7981, -7532, 1388, -1150, 691, -8103, 2212, -990, 525, -3160, -1679, -4836, 2611, -893, -2372, -119, -1395, 1983, 932, -947, 1960, -431, 5165, -1717, -1989, -2700, 2540, 3545, -3877, -4040, 118, -3345, 533, -2151, 3227, 4676, 5705, -3091, -644, 826, -2166, 3027, -3086, 1731, -4326, 2260, -1049, -2420, 1111, 330, 742, -4647, -3825, -2061, -2297, 2347, 966, 392, -1002, -3442, -97, -3679, -5398, -1106, 2603, -3571, -1491, 511, -1054, -3152, 2567, -5727, -2948, -481, -586, 2207, -2781, 4902, -4269, -5439, 5827, -230, -378, 2638, 4911, 1911, 1865, -3715, -4480, -3406, 3511, 2448, -5862, -2205, 482, 2273, 3634, -4474, -3132, -151, 2522, 2551, -2727, -3894, 3193, -1231, 112, -3340, -1413, 2089, 1844, -1606, -1521, 3124, -3046, 3205, -14, 1956, -5020, -2359, 1214, -3288, -4506, -1159, -4317, -1331, 5111, 4893, -2289, -1249, -2526, -4113, -4613, -1305, 515, -4844, -1156, 4862, 2953, -816, -454, -1589, 33, -929, -2825, 4009, -5973, -1168, 2295, 212, -5098, 2972, 3035, -1408, -1393, 334, -595, -1320, -4639, 210, 5348, -186, 2170, -245, -2754, 2192, 5466, 2795, 3695, -3425, 220, -4682, -3248, -1465, 417, -4025, -6190, 4511, 1588, 2674, 2859, 1296, -1058, 441, 2081, -3513, 102, -4075, 4205, 70, -2380, -1396, 2168, 3709, 1804, 2526, -670, -4591, 1482, 2179, -2803, -2084, -993, -2297, -1816, 616, 3599, 2756, -3027, -3044, -5015, -2860, -3035, 363, 304, -967, -3290, -1423, 1949, -3049, 1746, -1176, -155, 21, -220, 2190, -1663, -1276, 920, 351, 421, -354, 1651, -2082, 1063, 4418, 4237, 6405, -2834, -4874, 1802, -832, 400, -579, -3368, 3359, -3594, -4876, 4126, 3668, 3603, -1225, 1661, 1633, 1450, 2442, 2074, 5144, 1278, 423, 2848, -2604, -2899, -2463, -4486, 2239, -2322, 1668, 3352, 2172, 674, 4408, -4928, 2410, -4516, 3082, 3815, 4210, -620, 362, 343, 1960, 3660, 1904, 1503, 2298, 1564, 33, 2814, 4354, -371, 3652, -3636, 912, 1843, -616, -357, 941, 5007, -2825, -1617, 6357, 2811, 3112, 44, 4476, 954, 1021, -604, -3274, -1815, 2265, 3564, -6107, 2498, -916, -3072, -2954, -1029, -1935, 6759, 5394, 1652, 5596, -1022, -7241, -2786, 1760, 5416, 2702, 6723, -191, 7809, 877, -4422, 4154, -400, 5553, 426, -544, 5396, -2309, 2716, -1266, -1564, 3930, -8084, 688, -6769, 5924, 3774, 3586, -4366, 5319, -5951, -92, -2618, -1414, -1977, -5820, -1992, -5276, -3607, -2976, 2963, 5258, -5875, -1848, 954, 7984, 3379, -1503, -5781, 1664, -4413, 340, 7666, -342, -3031, 446, 353, 900, -5448, -3674, -2913, -2721, -3514, 4031, -4299, -1340, -6913, -4613, 3484, 5319, 7897, 5018, 1800, 5529, -1443, 7809, 1135, -1291, -5558, 1606, -2697, 2765, -2913, -2231, 184, 6765, 770, -4381, -2959, 2882, -316, 1318, 2497, 806, 5555, 2449, 972, -3791, 1836, -1809, -4863, 5716, 5000, -965, -2985, -1457, -10322, -232, -1368, -2499, -5023, 2179, 2987, -2517, 119, -3309, 2102, 3711, 2779, 3050, -4358, -697, 1002, -3706, 400, -546, -5693, 1607, -4141, -2209, -1265, -3571, -4666, 9090, -2736, 2523, 4079, 3885, -5627, -3356, -6596, -1818, 5712, 3626, 922, -6475, -3951, -1374, -3418, 4291, -3899, -5900, 9452, 988, -4816, -2894, 1013, -5570, -4863, 838, -2373, 3379, 2940, 3250, 2550, -2824, 2410, -3226, -5944, 5091, 3233, -5209, 3588, -2180, 4029, -4568, -2709, 4108, -5391, 2192, 2876, 1162, -1857, 3466, 1414, 208, 4051, -387, -1276, 63, -646, 500, 1115, 862, 2053, 3421, -2357, -1539, 2800, -4118, 2612, -785, -2748, -3170, 2340, -433, 3457, 606, 702, -2554, -1764, 2188, 6934, 3561, -33, -490, -3969, 2975, -2980, -1665, 4784, -1831, 3096, 449, -3706, 1058, 3282, -1333, -984, 926, -6331, 3789, 615, 5958, 492, -1627, -1597, -2416, 5, 408, 553, -1017, 1878, 3204, -754, 3240, -5124, 5623, -2212, -202, 2460, -4463, -124, 4801, 228, 798, -1033, 3599, -3691, -1485, 443, -335, 1350, -2031, 1472, -1690, 3979, 4375, -4779, 5233, -3423, -376, 734, 2018, 2278, -1631, -6161, 2325, -2492, -2481, 168, -5178, -6723, 7786, -177, 2187, 1085, -4563, 4539, 685, -37, -589, 476, -1861, 3703, 1759, -2758, 650, 4141, -4295, -4908, -95, 5670, 3902, 94, -20, -3060, -541, -1406, -1236, 4050, 2487, 1505, -4516, 1281, 3862, 2154, -3018, 1217, -3182, 1407, 1826, -814, -6079, 2209, 1416, -1204, 1351, -2872, 492, -2120, 3553, 3028, -696, -4677, -4511, 3209, -518, 20, -437, 2066, 395, 2883, -3280, -1766, -2330, 1338, 1255, -3177, -6061, 1600, 765, 1109, -911, 2342, -1998, 3959, -3281, -4487, -2127, -1490, 2232, -1168, 3995, 5240, 3331, -2034, -2667, 75, -1743, 3040, -1647, -1595, -744, -4843, -2259, 1582, -2391, 1381, -1775, -125, 2703, 5010, 3532, 5000, 7205, -2799, 1899, 986, 1072, -2304, 919, 7427, -1377, -8, -103, 4437, 4625, 2103, 2620, -260, -3546, 636, -6886, 1732, 1719, 208, 368, -4840, -1396, -5446, -3733, 2303, 1072, 1316, 1185, -850, 2154, 2306, 4379, 2739, -99, -4886, -672, -2693, 2128, 5049, -3284, 4309, -1579, 150, 1582, 3820, -2176, -1383, -1730, 537, 3241, 2197, 2792, 3391, 7035, -284, -3491, -3320, -6049, 887, -3687, -141, 3456, 517, -1495, -6817, 679, 620, -8367, 1792, 3119, 5375, 4871, 8295, 1200, 1484, -4804, -4497, -7298, -3306, -4523, -1556, -5757, -8466, -5306, -2531, -5932, -5322, -3250, -3069, 4819, -6872, 5993, -3133, 5811, -5584, 2084, 3372, -4398, -7075, 1412, 3946, -4282, -2382, 4427, 5167, 2829, -4684, -4420, 2136, 1096, -5986, 4994, 3808, -2432, -3986, -2174, 1782, 4204, 951, 6071, 1143, 5663, -5204, -1997, -3693, 4588, -2181, -3853, 1277, -4378, -1253, 2097, -3309, -7236, 5489, 1085, -5000, 289, 3795, -1610, 124, 1830, -4379, 1365, 6369, 632, -2562, 4150, 514, -5203, -1909, -1294, 6283, 1385, 1349, -2581, 878, -4672, 2155, 2355, 2714, -296, 1742, -6217, 1419, -2667, 4830, 958, -773, -1906, 1618, -437, -22, -1200, -1774, 3421, 385, -2834, -1877, -3572, 3719, -3844, 4955, -3210, 4572, -1872, 1364, -4251, 1539, -4980, -3722, 2276, 4294, -3053, -3458, 2442, 2609, -2808, -3659, 1758, 3662, 1379, 2656, -4316, 604, 2911, -1126, -756, 2879, 46, 915, 2519, 822, -3109, -1483, 3515, -640, -4536, 4143, -3976, 3234, 1685, -2519, -1734, 2492, -283, 1074, -3359, -137, -4860, 313, -2290, -4263, -1438, -2750, 3467, 3326, 1332, -158, 3176, -1563, -3236, 2389, -1283, 286, 3818, 2376, -2362, 5410, 7499, -2217, -1674, -3451, -1106, 5419, -3736, 1267, 4654, 1449, 906, 3553, 2783, 4093, 3911, 8135, -7835, -2405, -843, 3068, 3543, 4707, 5853, -1712, 774, 6705, -8776, 2242, -7979, -3181, 2392, 4652, 610, -6828, 998, 2990, -10962, 7183, -7259, 13494, -6783, 1421, 4845, -6026, 9429, 9516, -3796, 2412, -2617, -6446, 2820, -2277, -10338, -2238, -5428, 568, -3524, 7298, 2445, -1554, -3166, -8867, -4841, -7583, -4647, 6071, 4850, -3450, -89, -4687, 8459, 1350, -2054, -6809, -2899, -3875, 4212, -3062, 11173, -7690, 6910, -5971, -1724, 7645, 8927, 3302, -5137, 1393, 5120, -6009, 9096, -7837, 9281, -7001, -368, -1930, 8019, 1607, -3150, 1402, -5321, -2436, 1009, 2970, -2451, 7788, -190, -5923, 2010, -2733, -3386, 3308, -8582, -431, -909, 3306, 7817, -3044, 1066, 3748, 5186, 3131, 1853, 6100, 5720, -1007, -5406, 5375, -624, 3184, -2037, -264, 7476, 3475, 206, -3597, 2485, 3941, -816, 4272, -1414, -2828, -621, 5375, -6669, 8428, 5707, 808, -2449, -2523, -6700, 1949, 158, 3238, -8424, -7782, -1743, 4451, 4161, 3229, -1988, 1750, 2438, 2890, -1886, 4773, -4099, 600, 2487, -6752, 4760, 1690, 5712, -836, 1690, -449, -511, 2877, -2761, -6413, 1109, -2292, -5302, 3448, -1546, -1020, 1758, 3618, 1989, -2261, -1492, -4541, -2879, -2518, 5572, -5521, -583, -3464, 3967, -1209, -2046, 396, -3133, -4577, -1454, -4840, -1656, 5368, 661, 5874, -3630, 4338, -3426, -545, 3326, -1125, -2099, -1534, 6123, -227, -3228, 4406, -321, -1092, 2388, -778, -3962, 2579, -2687, 2598, 639, -963, -711, 5234, -2803, 5131, -3571, 3533, 887, -690, -3337, 4360, 406, -2857, 1510, -1824, -1651, -2845, 3490, -2674, -4645, 1348, 644, 440, 6325, -3899, 6375, -1190, -1136, -2801, 2254, 3303, -4388, 778, 3833, 3539, -1823, 3702, -1303, 48, 4601, -1498, -2757, -1170, -3528, 5218, 3731, -1246, -260, 4301, 1209, 778, 5789, -4523, -2225, 4042, -2735, -2243, 3774, 3141, -5299, 317, -1669, 563, -4301, -8475, 12350, -7469, 8659, -1214, 6037, 6747, -6922, 6044, -7172, -947, -7173, -3352, 9009, 4820, -1634, -10712, -3415, 5045, -5131, -363, -3736, 546, -1093, -3564, -2641, 3591, -4495, 49, -7116, -578, 409, 5429, 6733, -3168, -6136, -7437, 2537, 5812, -231, -8554, -7639, -7005, 4722, 3321, -8585, -5599, -36, -3494, -9050, 17704, 229, -7310, -10251, 9839, -4871, -2858, -8246, 272, 10430, -4518, -11463, 3056, 4083, -770, 1819, -3679, 4474, -4187, -7257, -720, 512, 1946, -241, 606, 7924, 3290, 2050, 607, 6044, 12307, -4452, -7609, 2012, 5605, 4159, -2550, -5473, 1301, 6754, -6209, -2992, 7006, 1444, 1646, 9130, -3546, -1712, -3803, 3977, -3768, -3936, -2193, 3564, -2690, 1190, -2408, -411, -563, 2274, -2377, -6566, -2204, -2311, 1298, 3559, -4183, 1043, -6102, 2741, -4813, 37, 2268, -6124, 4658, 347, 987, -1052, -3496, -2215, -5129, -1521, 1854, 1381, -2220, -508, 1503, -793, 2931, 5032, -3702, 182, 2459, 1809, 3902, -2616, 3781, -1966, 5253, -1993, -5356, -2142, 3253, 327, -854, 2863, -2383, -1532, -1290, 480, 806, 710, -3815, 3256, -8291, -2986, 4886, -2895, -1234, -618, -270, 763, -2632, -1166, -567, -2738, -1028, -3003, -869, 927, -1125, 543, -1996, -2582, -3483, -4082, -2969, -6897, 691, -3051, 1688, 3555, 381, -7009, -2653, 383, -3596, 1178, -905, 9410, 124, -812, -245, 6587, 3691, 4882, -2076, -3825, 1272, -5005, 2718, -6897, -6240, -4539, -5326, -1568, -2925, -2011, 1481, -4846, -1281, -1058, 2333, -613, 5518, 2480, -8628, -821, -1845, 2800, -4766, -7009, 4956, -5859, -4123, -2395, -7164, -4793, 3085, -7782, 4555, -8209, 1227, -5547, -3783, -6132, -10804, -6836, -258, -4034, 5941, 5859, -3004, 2346, -2225, 8423, 768, 3677, 6152, -7369, 2065, 522, 4707, 245, 4856, -5728, -1219, 2577, 8820, 1273, 1721, -4853, 7044, -8254, -897, 3456, 235, 6407, 6850, -7835, -492, -1285, -3, -8778, 770, -3775, -1238, 1958, 1507, 1262, 1764, 6487, -1136, 1908, -481, -447, -789, -432, 1048, 4220, -1119, 2439, -7819, -2199, -2082, -855, 1688, 2634, 1738, -1657, 2955, 1522, 1465, -2379, -2051, 418, 5628, -1785, 1315, -3428, 790, 4723, -2112, -1763, -620, 1358, -1692, -4306, 639, -1345, -2557, 492, -999, 806, 7389, -1018, 1021, 2180, -3646, 1834, 4255, 3205, -5118, 3346, 5205, -575, 1228, 1272, -1684, -224, 281, 811, 203, -1345, -885, -2628, 5315, -4219, -6582, 1070, -6066, -69, 2071, -6146, 2860, 3491, 224, -4657, 6287, 1230, 3733, 3104, 2106, -573, -618, 157, -1143, 1818, 651, 3752, -4154, -6398, 9908, 4412, -2486, 5941, 4606, 3788, -2659, 4634, 1444, 1454, -3116, -1417, 225, 762, -4291, -1680, 2503, -5082, 3780, -1638, -490, 2013, 5759, -3066, 3221, -26, -1721, 3144, -706, -1391, -911, -739, 3504, 912, -6631, 1100, 4677, 3534, -3780, 769, 811, 2391, 2452, -882, 293, -2343, 4786, -1178, -2449, -245, -3194, 2817, 3131, -1703, -4784, 1923, 1593, 1091, 3080, 2059, 3766, -5108, -4809, -5987, 3205, -1038, -6685, 1744, -2265, 662, -3270, 3704, -613, 4490, -4259, -118, -5348, -5225, 1739, -5012, -1421, 2650, -354, -3050, 763, -1647, 2457, -3526, 952, -1181, -1454, -3252, 5714, -4801, -2042, 4825, 1978, -5704, -6606, -3929, -389, -7989, -2077, -1126, -6769, 4615, 2544, 2106, -200, 3175, 1351, 892, -1872, -1613, -4671, -2560, -1978, 5025, 2502, -2651, -8109, -4300, -5027, -1168, 4455, 3039, -4230, 957, -1775, 5078, 2166, -2099, 7075, 3652, 2759, -5082, 3115, -943, 8301, 240, -5763, 3490, 1185, -1235, -9752, 4497, -1969, -2317, 2255, -7558, 774, -864, 3267, -904, -502, 2463, 4928, -4758, -46, -4590, -3445, 2413, -2994, 6088, 3172, 6984, -6021, -5864, 743, 3898, 4795, -8284, 901, 3301, -1973, 4741, 4826, -1530, -1715, -4128, -4027, -4331, -3569, 1783, 8273, 5192, -1873, -4368, 572, -3262, 10711, 4742, -7520, -4160, -1964, -2820, 612, 4615, -176, 5279, -2703, -49, -102, -2487, 2754, -2723, -972, 353, 188, 1095, -1599, -2070, -1731, -2334, -2889, -4909, 2353, -2196, -1492, 1712, -1575, -1367, -1685, 2529, 3007, 1939, -1038, 676, -2264, 4646, 4644, 1994, 2534, -1697, -831, 3149, 2555, -5425, 212, 3789, -991, 3344, 439, -2325, -3988, 8257, -1568, 357, -3575, -816, 14, 2625, -5267, 1720, 1696, 1639, 1900, -1253, 617, -2938, 4741, -1490, 172, -3746, 4508, -573, -3687, 969, -4768, -1011, -1609, -3538, 3741, -2457, -940, -3391, 336, -1477, 5903, -2004, -4349, 3836, 1227, -943, 1772, -44, -3644, 2278, 1041, 2523, 9155, -452, 2882, 4678, -344, 2896, -9, 4157, -483, -490, 6155, 5525, 5519, 463, -7864, 2192, 9205, -1350, -2604, -8892, -5567, 1662, -1891, 1125, 3127, 3158, 2078, -8152, 1924, -2758, 3937, 4343, 2174, 7110, -367, -990, -5339, -10700, 1230, -1280, -5251, -2701, -193, -51, -1545, -7307, 2363, -11978, 1415, -3095, -1358, -3853, -5727, 4783, -7640, -8882, 1570, 774, 454, 133, 338, 6387, -1204, 2706, -9182, 1694, 2327, 192, 7014, -3922, -4899, 4693, 6605, 2549, -2155, -4731, -2659, 5816, -5031, -3395, -2602, -4453, 6136, 10477, -1431, 4222, -816, -5138, 7961, -543, -3836, -3324, -1070, -3443, 5547, -1261, 3888, 461, 6257, 760, -4332, -360, -249, 1540, 2755, -4929, -5416, -8091, 3357, 6983, -1704, 1729, -6289, 6396, 690, 578, 5751, 5667, 1177, 8698, -4409, 6003, 6139, 2452, 4083, 3002, 2168, 1728, 3445, 7687, 5475, -2398, 1857, -1773, -3523, -510, -1133, -678, 2467, 7103, -4044, -11441, 3158, -3944, 2587, -1376, 813, -6204, -4, 7708, -3668, -2436, 5487, 38, 3044, 3335, -1083, -2483, 89, -4183, -7574, 7565, 14, 3074, 4092, 9002, -5230, 1949, 4412, -6950, 34, -204, -8439, -4148, -5417, 1819, -5788, -2541, -473, 7462, -1365, 5174, 2299, 3984, -6312, -2748, -41, -3736, -2455, 3399, 1386, -1799, 3923, -2471, 8480, -5088, 5451, -8002, -2175, -6720, 7508, 9482, -3671, 7661, 4764, -15827, 5903, 6433, 17362, -1277, 735, 3445, -2316, -2910, 958, 5376, -1868, 531, 283, 10694, -3248, 1146, 12, 585, 8522, -6671, -2491, 612, 6867, -2188, 7397, 2354, 152, 6579, 13488, -3107, 3709, -3383, 6878, -4591, -1492, -2443, -11506, -2797, 5049, 1975, -1332, 854, -9188, 3316, 8626, -13430, -988, 14938, 8354, -6845, 6495, 1051, -398, -3295, -1026, 5495, -5807, 6542, -5131, 7961, 1654, 1595, 2735, -1718, 3509, 821, -134, 1937, 674, 2711, -15443, 9529, -149, 4832, 11975, -1056, 10150, 5926, -13251, -8691, -2032, 942, 2216, -6183, 1977, 8746, -6036, 912, 2435, -843, 960, -4279, 4689, -1967, 3203, 1988, 2961, 2452, -4442, -5182, 3578, -547, -677, 2266, 422, -1518, 4997, -8111, -2425, -11659, 2826, -3137, 4817, -4057, 4796, 242, -3145, -2846, -1187, -3340, 7096, -4058, -5276, -3991, 1540, -5802, -4240, -1307, -3442, -3332, 9113, 213, -2939, -3007, 5160, -2196, 1468, 4512, 1588, -4887, -1582, 5400, 3698, -3134, 4032, 1253, -1653, 46, 3777, -6052, -1315, -3681, -5067, 2636, 5554, -2589, 3541, 326, -1017, 5545, 3808, -6843, 2512, -3307, 3649, 753, -5376, 2523, 4462, -2022, -2181, 5258, 1174, -3437, 962, -297, 5317, 3562, -3127, -7353, 718, 3267, 5916, 2638, -3616, 997, -727, -5490, -7180, 7385, -3520, -749, -9196, 13563, 5194, 2513, 1428, 533, -2412, -11760, -10861, -3624, -772, 787, -5846, -7345, -3156, -1216, 5277, -6079, -1378, -7462, -7659, 9358, 2035, -8734, 2406, -9964, 38, -8007, -1236, -5847, -5009, 1139, 4078, -1210, -4789, -517, -4481, 3887, 534, 2700, -5407, -5044, 2398, -1046, -4590, 5517, 1786, 6033, 6564, 7084, -7149, -12631, -6954, -3482, 1241, -4812, -7259, 5697, 7945, 9909, -2199, -2627, 11250, -1972, 5265, -9006, -12756, -646, 5872, -3853, 4779, 6461, -6118, -11133, 2721, -6464, -818, -4266, -2904, -5298, 11610, -726, -4839, -4460, -3328, -4086, -5644, -1898, -267, 2422, -1324, 5652, -1111, -920, -2100, -2072, 3021, -5176, -6077, 1246, -825, 3293, -1515, 2626, -7659, -2118, -3547, 1172, 86, -2768, -63, -1491, 1171, -1652, -2853, 2631, 75, -636, 720, -3054, 1708, 561, 6539, -9012, -1173, -1216, -856, -6740, -3829, -1014, -806, 4093, 3791, 2152, 4628, 177, 2256, -4838, -38, -139, 5083, 2297, 3637, -2181, -2042, 6325, -2450, -1552, 4146, 7166, -3255, -816, -296, -2451, 2832, 293, -3554, -2754, -460, -930, 5079, -923, -1400, -711, 3979, -3722, -510, -2096, 4676, 2872, -1826, 1802, -5038, 1275, 1979, 293, 607, -2705, 230, -2044, 4437, -702, 5639, -4571, 6805, 2835, 2619, -3475, -5218, -2894, 3336, -905, -2890, -2178, -5530, 7633, 5262, 744, -2982, 2956, -1553, 4490, -1285, -2815, 6977, -889, -1743, 2481, -4986, -7252, 5951, -3856, -1464, 4197, -3883, -720, -4655, -1780, -6168, -635, -1314, -2415, -4242, -8650, -514, 684, 4123, -3497, -2205, 1795, 3061, -1908, -1490, 36, -958, 6054, -1632, -80, -4450, 2894, 627, -2583, 5076, -4424, -1178, 1668, 2241, 960, 643, -2606, -4846, -5074, 1813, 6759, -500, 4043, 463, -2039, 5567, -798, -2265, 7511, -1982, -796, -3558, 416, 4421, -1039, 4444, -4393, -601, -4545, -3593, 924, -2856, 2213, -1466, -6092, 712, 6318, -6646, 568, 3328, -1874, -3386, 946, 4885, -6643, 1216, 731, -254, 1993, 1827, 5088, 8067, 2546, 2787, 4761, 258, 3332, -5161, -2560, 3934, -1946, -4079, 6586, -1434, 1025, 1902, 260, -3471, 756, 692, 5811, 3248, 5094, 2784, -2278, 5352, 4230, -4723, 2823, 813, -2086, -4289, 1784, 3842, -3771, -3376, 3086, -1599, -2530, -3204, -3417, 6296, -2699, 75, 5354, -3236, -3701, 1377, 4055, -2041, 2903, 4318, -2254, 1136, 1991, 786, 678, -6062, 4342, 863, 1653, -2646, -151, 1103, 5301, 1819, 3886, -476, 1209, 1929, 1941, -4001, 11047, 1642, 4211, 526, -2697, -513, -1865, 646, -946, -1789, 8620, -750, 6099, 4369, 1563, -7590, 2056, 1478, 1463, 960, -2228, 2242, 8059, -3253, -2469, 3777, -2613, -1493, 1690, -2698, 5337, 1402, 3024, 1133, 1566, -5477, -3059, -3575, 1297, 6819, -995, 970, 462, -4796, 6185, 519, 6539, -228, 5595, 2634, -2515, 3239, 1406, -563, -366, 4330, -456, -3130, -953, -848, -4911, 1027, 3637, -1877, 964, -518, -448, -3034, -7752, 479, 9316, -1082, 7090, 2864, 127, 1558, -6183, -4361, 2934, 4193, 5510, -416, -6548, -953, -4575, -3013, 1331, -2103, -666, 6328, -4209, -1571, -2403, -2103, -1614, 1049, -3237, 1813, 3441, -3456, 5308, 2542, 4106, -1897, 7528, -4255, -1564, 3152, -3436, 2379, -543, 1464, 1111, 951, 2072, 2769, 2895, -2371, -1443, -1349, 2123, -2635, -6520, 652, 3369, -387, 5052, 2980, -7386, 1869, -5152, 2231, -257, -2015, -1294, 3639, -2062, 2636, 3169, 1366, 2964, 4880, -5676, -5744, -489, 8673, -4102, 5478, -1415, -2783, -1225, 4840, -3175, 1373, -9072, 4327, 2829, -4862, -6008, -1313, -5340, -2852, -1247, -6503, -2438, 4623, 1804, 410, 1196, 5655, 2209, -316, 4603, 1200, 154, -5331, -1649, -5242, -2499, -1031, 969, 2787, 3812, 11394, 5800, 5953, -3281, 4432, 4755, 2751, 3528, -191, 6582, 1867, -4669, 2881, 21, 2595, 608, -3778, 1470, -1292, -4401, 2168, -1410, -391, -3835, 2710, 2609, 1787, -3751, -2027, 4299, 2804, -2212, 79, -3299, 1731, -899, 3341, 1774, -545, -29, -1838, -1804, 1869, -1170, 3815, 69, 2023, -3199, 622, 2294, 566, 487, -5725, 5419, -4827, -8758, 3567, 451, 2570, -2721, 1686, 320, -292, 2454, 2393, -1310, -2180, 1832, -2103, 873, -4936, -550, 4387, 1673, 893, -3829, -2146, -2297, 3055, -2042, 1085, -3297, 388, -1946, -2425, 765, -2687, 1107, -3166, -4492, 2782, 520, -2016, -102, 1853, -1361, -957, -2737, 270, -3320, -1258, -3258, 3079, -174, 1252, -1576, 1293, -686, 7175, -3719, 3207, 2821, 2635, 2112, 3228, -3945, 3824, 414, -4161, -301, 4331, 3383, -3348, -5935, 189, 2234, 6020, 2968, 2357, -1596, 1126, 4455, -783, -1815, -1304, -1332, 3896, 3290, 5008, -3883, -1537, 1323, 2602, 5632, 1080, -768, 3233, 2182, -4074, 1518, 2676, 1817, 1699, 5130, 2244, -3119, 578, -1673, 5246, 2693, -1840, -2721, -3391, -3418, 540, 4911, -9561, 1361, -2319, -295, 2251, 6244, -2854, 451, -2240, -6979, -2621, -1934, 718, 868, -3332, 1564, -1270, 3738, -9, 2931, 797, 6488, 978, 3223, 1494, -1149, 6758, -322, 2187, -1525, -350, 2913, 3926, 5275, 2511, 1141, -3329, -1419, -1200, -396, -1230, -1874, 1494, 1687, -4078, -3285, -3425, -2889, 7047, 7601, -593, 1534, 2989, -2186, -5413, 5815, -8478, 1167, -2465, 7, 4073, -2790, 498, 4667, 885, -6767, -5083, 3067, -9846, -4648, -3852, -2641, 2643, 4368, -956, -4028, 4505, -1794, 693, 3829, 1491, -346, -1103, -1343, 1499, -2963, -4958, 1666, 2349, -3876, -2535, 2936, -2153, 4877, -1610, 4237, -1946, -1668, 4597, -1196, -300, -2317, 5487, -1624, -1763, -3540, -3722, -86, 2756, -8955, 2819, 2844, 799, 3373, -5669, 3971, -4878, 833, 5442, 2425, 1728, 2880, -2879, 764, -844, -713, -3540, -1267, 1822, -2801, -2366, 1934, -780, 2402, -4393, -2176, 3411, 4443, 5790, 1094, 4158, -2123, -2255, -5868, -1251, -3656, 2656, -3490, -6607, 3161, -1567, 3539, -1638, 5437, 7583, 6330, 209, 1519, 5090, -3346, 4033, -7124, -738, -2693, 5109, -3169, 1078, 4901, 2566, 425, 6811, -1001, 1584, -2029, 2168, -2292, -8068, -3405, 4737, 8187, -1963, -5278, 2722, -3626, 2454, -225, -2184, -2037, -4975, -1141, 4576, -1478, -2232, -2777, -670, 3314, -5766, 1754, -2878, -1241, -421, 899, 5185, -5289, 3117, 3714, -2135, 1615, -3886, -940, 8220, -2216, 5072, 1284, -8133, -2590, -3043, -3044, 5145, 2264, 5582, 5819, -2479, 3149, -1656, 1907, 1694, 1355, -5054, 5510, -1154, -1322, -8085, 835, 161, -1049, 1616, 1072, -2413, 4844, 783, -586, -2217, -697, 5844, 5330, -596, 2375, 1023, 1984, -3379, 5696, 6546, 1790, 122, 4712, -9806, -4501, 3131, -1909, 2648, -2058, -1820, 999, 1662, 2724, -231, -1876, 6308, -5330, -152, 2100, 9088, -2197, -302, 1797, -5186, 3326, -4234, -6313, 2339, 1668, -2441, 4624, 1466, 3699, -4381, -280, 31, 3603, 2091, -1900, 6816, 9552, 4258, 3025, -777, -2362, 4913, -3894, 1445, -7209, -1924, -5812, -772, -7030, -4214, 5457, -1278, 182, 4943, 5627, -5464, 1548, 2426, 1878, 1153, -444, -8000, 3748, 1208, -997, -3855, -7662, -2197, -111, 3950, -2384, -6222, 3578, 75, -537, 3640, 1112, -1936, 1235, -1289, 7757, 5700, -565, -2130, -3843, -57, -2615, -4324, -5724, 3779, -1425, 2019, 211, -3169, 1646, -2706, -549, -2301, 1041, -3892, 1591, -3244, 2006, -149, -4681, -3753, 1268, -7173, 5964, 3936, -1169, 696, 460, 273, -1979, 3429, 6085, -420, 4903, 38, 1543, 3037, 4461, 4967, 3434, -937, 3500, -3623, 3731, 300, 2287, 4606, -718, 459, 6394, 1105, -1403, -874, -2342, -1019, 1036, 6558, 1806, 3290, 4047, 4187, -1719, 3179, 2909, -28, 4901, -2737, -990, -2655, -3422, -968, -6951, 5148, 3347, 4325, -2470, -5858, -5580, 2188, -192, -837, -5297, 5133, -1878, 579, 4899, -2351, -2597, -5533, -12752, -5428, 145, 141, -3362, -3445, -741, -1083, 3429, -3720, 1213, 2029, 3720, -428, -3917, 1389, 1417, -903, -2749, 4131, 512, 5075, 2079, 1969, 2145, -906, 1481, 4609, -6753, 2329, 2155, -123, 2121, 2588, -3711, 1975, -3315, -4744, -5234, 804, -5774, -1120, -1859, 1203, -542, -830, 3363, -3042, 3706, -1270, -1461, 5445, -3065, -6499, -2188, -2409, 4476, -522, 2990, -4650, -273, -2224, 5397, -4183, -1602, -4615, -1379, -2887, 4400, 871, -509, -2717, 6142, 1255, -7442, 2488, 1421, 4846, 646, 1552, -2211, -251, -6955, -2685, -3462, -954, 5958, -6211, -3967, 5313, -1976, 5687, 8070, -8721, -4444, 1349, -712, -3337, 27, 2269, -4284, -2349, 4258, 4537, 9454, 1842, 1698, 3107, -1241, 987, 584, 330, -700, -754, -5907, -1145, -1971, 5408, 2174, 3702, -3442, 1743, 5613, 5243, 4202, 4040, -6758, 7013, 181, 2615, -5, 8279, -5448, -4496, 1985, -2022, -2097, 3751, -1599, 1575, -7329, 8461, -4234, 3992, 8865, -4649, -8828, -3877, 5276, -749, -5296, 5346, 2187, -1731, -961, 5684, 1269, 4262, 2022, -2680, 2308, -1859, -1271, 732, 994, 481, 4965, 1686, -4852, 5444, -6140, 22, -264, -4278, 4956, 1747, -606, 5619, 2021, -3194, -1596, 596, -2493, 5862, -2101, -2633, -406, 6012, 678, -4651, -5, -9903, -3483, 877, 2320, -3391, -3274, -712, 1811, -2117, -2633, -1445, 5277, 6649, 2604, 5629, 9933, 5986, 1475, -4758, 958, -4278, 2831, 3084, -4396, 4475, 3410, -4531, 6383, -8396, 2799, 1456, -879, 2275, -53, -4741, 203, -203, 4691, 4301, 1871, 5710, -1121, -4396, -6562, -5876, -2055, -6655, 3415, -5604, -2699, -1558, 1040, 2214, -4137, -3957, 5583, 6172, 908, -775, 1645, 7927, -1996, -1132, 4647, 2981, 9473, -4012, -5381, 1038, 2812, -192, -6065, -7932, -3519, -2558, 400, -3866, 570, -324, 8, 2621, -1474, 3634, 3076, 3373, -8033, 4131, -3236, -2827, 1732, -203, -1393, -4946, 1509, 8141, -1791, -6238, -5197, -6225, 5913, -9423, 1223, 590, -4258, 4088, 215, 2953, -4889, -128, 1401, 863, 5057, -7372, -3989, 68, 2477, -916, -4458, 6950, 3822, -238, -1618, 3708, -1259, -213, 804, -586, -2540, -2569, -1726, -3510, -4665, 8802, 1156, -3505, -595, -48, 389, -1747, -641, 6612, 3553, -4366, 2474, -5000, -4437, 3820, 4927, 1410, -956, -1448, 10, -9670, 386, -4144, 4250, 3554, -1248, -1161, -5179, 1300, -2265, 1485, -2297, -9987, -11562, 1986, -1458, 3267, 1040, -6644, -1657, 8891, -139, 2602, -1508, 4489, -4111, -5758, -302, 4090, 3316, 3288, 5602, -3797, 2345, 1575, 5945, 3220, -3628, 8530, 9868, -1321, -4334, -2883, -11447, 262, 936, -531, -3714, -7029, -3232, -2354, -64, 233, 773, 891, -14815, 1978, -2157, 9833, -2636, 9093, -3708, 1132, 1140, -374, 3765, 2569, -1032, 4916, 5465, 5687, -5515, 14690, 29, -3521, -1374, -6473, 269, 5380, -3969, 6053, 2750, 5369, -13326, 4545, -6904, 1865, -4273, -794, -4964, 9173, -4707, 3137, 6859, 8846, -10567, 3478, 7698, 7216, -3802, -6202, 2564, 2889, -1858, -2369, 7503, -4317, -2353, -2258, 7782, 1575, -3339, -1077, 2489, 10493, 1795, 4802, 10607, -7414, -5941, -12113, -5475, 5025, 7292, -2813, -1877, 7671, -1396, 3838, -2088, -2470, 2329, -1585, -2809, -94, 28, -2017, -1268, -1370, 1961, 1692, 319, 3427, -3120, 778, 4373, -3077, 3050, -757, -2485, -2288, -4520, -1410, -321, 275, -1893, 560, -415, -110, 3544, 1330, 4331, -3224, 376, -2323, -2964, -132, 1186, 181, 1579, 3026, 2295, 2840, -818, 2575, 4251, 3301, -504, -1450, -662, -642, 4478, 2743, -7769, -1621, -1569, -5129, -1930, -2297, -1843, -3430, -3265, 500, -1690, 100, 2146, 239, -199, 2601, 193, 491, 1461, 682, -140, 374, -2814, 6015, -3757, -334, 3712, -23, -80, 2514, 2315, -1874, -804, 397, 2893, -1320, -3420, 2502, -3429, -1318, 1885, -3271, 4140, 1757, 1928, -7650, -2217, -4589, -4058, -5726, -6019, -1067, -1928, 3846, -5458, 6241, 3271, -1030, 2453, -445, -2522, -3089, 2908, 438, 4655, 625, -11206, -3056, -5605, -5401, -8138, 264, 7779, 7290, 11924, 1125, -3936, -7136, 1238, 2394, -10704, 5768, -4077, 1992, 787, 1167, 333, -7954, -898, -10347, 110, 692, -5456, -2902, -8195, 1482, 2401, 7763, 9524, -7513, -4969, -4382, 899, 6445, 56, 7290, -899, -4255, -9782, 4552, 291, -4587, 1506, 4013, 1343, 14254, -8561, -7156, -2754, -3265, 3513, 7589, 3013, 2860, 1597, 3522, -219, -7227, 6185, 3569, 2333, 2274, 6170, 5020, -6124, -111, -4100, -9445, -8177, -1550, -1868, 2869, -417, 1544, 1491, -2461, 413, 4361, -327, 6902, -6286, -5795, -2311, -2195, -1812, -4312, -1600, 7374, -2066, 4830, 1121, 44, 5949, 4267, 3040, -3265, -4448, 5098, -4610, 4923, -5508, -2776, 1875, 2869, -3392, 3246, -2606, 4325, 4856, 370, 234, -918, -3819, -757, -2049, -4049, 3720, -3921, -6990, -5417, 278, 1675, -556, -3976, 4616, 457, -4647, 3972, -306, 742, 5132, 10312, -570, 1699, 3299, 3125, -3770, 2571, 133, 912, 4425, -4833, 4473, -2734, -1380, -2852, -225, 9528, 3945, -832, 1924, 1098, -3389, -1868, -3732, 3245, 6171, 3598, 2614, -64, -1820, -4172, -4956, 1565, -7660, -561, -3787, -922, -3041, -3452, -2422, 7539, 9, 2173, 2441, -2872, 1905, -712, -4410, -3076, -2387, -5137, 4714, 3429, -2938, -1497, 4396, -3230, 1798, 3081, -3971, 169, 2322, -1598, 3552, 598, -82, 5326, -3825, -3639, 4927, -4477, 1661, 4088, 3951, -3365, 9056, -1620, -4888, 177, -4244, 3672, -4347, 4032, 4117, -1688, -2376, -1154, -184, -2377, 2082, -3982, 2783, 6682, 2724, -6436, -3995, -1606, -327, -2234, -841, -2777, 5637, 2128, -1314, 418, 3956, 1275, -381, -2497, 837, -3769, 3705, -3034, -241, 3348, 1401, 2544, -2351, -3905, 2014, 5890, -3068, -540, 235, -1463, 7705, -281, -4134, -1480, -5868, -373, 1772, -2782, -3415, 419, -2236, -1650, 3706, 405, 3492, -3465, 4168, 1998, -4783, 2409, -3129, -3894, 4787, 104, -5936, 1907, 2294, -2720, -309, -5799, 2801, -4096, 2323, -6577, -1240, -3775, -2437, -1290, -51, 3432, 1510, -6830, -673, 4914, -3099, 2295, 1554, 642, 2683, 4278, 2429, 1984, 4513, 809, -4376, 705, -732, 1695, -6824, -2616, -4133, -1337, 2845, 3191, -3167, 2278, -6194, 4205, 340, -203, 576, 2700, 798, -7994, 366, 3294, -2799, 720, -2796, 3180, -2221, 1373, -975, 6505, 4250, -2788, -5421, -6611, -1436, 948, 300, -2038, -2075, -1498, -280, 695, -1193, 7681, -2589, -5498, 5221, 1341, 3761, -763, 6248, -2567, 13874, -2035, 67, 14877, -2583, 16304, -3556, 1938, 14346, 1621, -2398, -18681, 4445, 8558, -9559, -2072, -3795, 2727, 5198, -2256, -3637, -5259, -3430, -3607, -16699, -6915, 428, -1573, -7616, -1188, 3705, -3420, -780, -577, 5490, -2369, 339, -16983, 2400, -5976, -6624, -7442, -5646, -3143, -3391, 2333, -2548, -3187, -9250, 13459, 8097, 8029, -4379, 1572, 1300, 2976, -17279, -4801, 5087, -6665, 8134, -7146, -3697, 904, 3045, -4522, -3153, -4450, -5609, 2575, 3904, -3246, 698, -1760, 998, 473, -8355, 5646, -1525, 7769, -5622, 6026, -1970, -10616, -1667, -14527, -4992, 13432, 138, -433, -3863, 4222, 2326, 3674, -3871, -3987, 3966, 5095, 2675, 6104, 2747, 3673, 5878, -3128, 1061, -1527, 2146, 2677, 3084, 5711, 4464, 1933, -124, -3612, 125, -1416, -6151, 2382, 790, 2076, 546, -2524, -1137, 4872, 1277, 1905, 1532, 625, -1672, -1732, 1064, 309, -1714, -1752, -160, -1186, -292, -8124, 2400, -2387, -2625, 1255, -642, -5283, -2227, 3830, -2530, 1731, -1823, -345, -4230, 4888, -2044, -789, -3638, 1255, -797, -32, 8351, -4938, -409, -453, -1676, 7484, -823, 2642, 2443, -1498, -1207, 2430, 1573, -2087, -5683, 4601, -4805, 769, -1497, -3407, -1434, -1500, -3758, 3553, 3290, 264, 686, -7230, -1775, -6324, -3332, 3343, 1693, -6811, -1529, 2090, 2967, 2294, -1914, 3263, 259, -2888, 49, -2836, 1096, -6604, -5200, -8203, -5735, -197, 5249, -2709, -2665, -6797, 4977, -3996, -1077, 2226, 6720, 2032, 4187, 1920, -717, -4760, -5550, 2852, 2143, 654, 3271, -1552, -4412, -6323, -1483, 4711, -1302, -3976, 3236, -2096, -2825, -2409, 2444, -3174, 714, 3349, 1037, -2299, 4881, 1320, 1057, -745, -4885, 3296, 2412, -5034, 2376, -1239, 4370, 554, 866, 5869, 463, 2726, -4156, -4666, -1390, 212, 535, 850, 3900, 152, 1885, 768, -2537, 4057, -4757, 4882, 2542, -859, -3894, -1922, -2333, 657, 6918, 4420, -3976, 2557, -277, 4870, -2016, 1140, -2126, -817, 885, -3141, 1506, -3222, 2939, 541, -321, -3470, 4297, 960, 7036, -655, -2471, -2472, 6865, 3943, -3313, -3900, -1455, -6822, -5092, -3438, -3009, 1940, -3675, -2220, 4781, -2312, 3782, 884, 1184, -8536, 39, 3822, 422, 459, -3634, -9436, 4441, -3279, -659, -7382, 5784, 6521, -1250, -23, -784, 5837, 613, -1332, 949, 148, 3591, -3676, -153, 840, 4519, 2, -2603, 1259, -3071, -6004, 1324, 8160, -6903, -960, 668, 1502, 4575, 3304, 21, 896, -4011, -3624, -3997, -6211, -901, 4983, 2489, 4532, -6554, -11604, -4294, -3273, -3497, -1172, 5254, -2488, 2453, 729, 17, 3313, -281, -7995, 599, 1201, -5748, -1187, -4741, -198, -2671, 1433, 10689, 5626, 678, 4019, 267, -1662, 6963, 7068, 3848, -1083, -4604, 3176, -4612, 3467, 1049, 287, 6547, 4768, 1278, 5142, -522, 3583, 4297, 866, -1860, 978, 3775, 1706, -6762, 8703, -1034, -5832, -1648, -8889, 536, -1362, -5217, 2640, -5163, -19, -2040, 6869, 6670, -6781, -6693, -1652, 243, 989, -3332, 1832, 4682, -4442, -6408, -418, 432, -464, 4986, 1993, 3767, 8784, -3163, 2394, -5857, 24, 4453, -644, 767, 3666, -6951, 4554, -1067, -5007, 6873, 4862, -381, 495, -3495, 6548, -6747, 3549, 2852, -4681, -608, 646, -3554, -1095, 535, 5966, -6654, 1520, -3160, 1757, -3584, 1661, -1360, -2996, 1257, -1393, 5609, -188, -184, 290, 6758, 6328, -6265, -2588, -2937, 396, 1873, -3440, 1096, 1813, -782, 1273, 3365, -903, -6267, 4615, 9048, 3161, -3021, 4005, -1482, -7931, 9936, -4037, 1425, -7996, 10519, 5170, -868, -10376, 6639, -308, 4283, -2073, -5881, 5768, 5158, 1392, -3433, -1135, 3563, 4113, 2421, -1586, -4351, 6477, -2956, -5567, -3137, -1063, -1668, -4809, 5806, 3839, 276, -1598, 11362, 4576, -10586, 846, 1373, -3881, 7246, -7783, -3630, 1353, 6090, -3339, -190, 3453, 1543, 1241, -1161, 5353, 6067, 1173, -4633, -1811, 1860, 2135, 2158, -616, -2110, -6111, -2378, 700, -2859, -1201, 4813, -6405, -1106, 2071, 2418, -1363, 2328, -4513, -778, 2741, 5804, 686, -4261, 848, 2883, -1692, 4912, 4064, 312, 3373, 4165, -41, -5241, -437, -4115, 5880, 5655, -3201, 3573, 2473, 2905, 402, -1389, -3316, 2321, -6717, -317, -481, -64, 494, -3703, -3145, -2403, 2882, 4453, -4954, -2072, -4651, 76, 2691, -1932, -1016, 4249, -3752, -4246, -1205, -2332, 1014, 74, 1315, 1069, 2729, -4722, 2530, 908, 4104, -5976, -3387, 4303, 1467, -3658, 2504, -2143, 1224, 411, -2134, -172, 972, 3695, -3550, -1409, -10, 878, -1489, -3880, 6152, 2195, 3337, -147, 1455, -2298, 7319, 3098, -524, -2244, 2475, -8621, -2045, -5390, 332, -1931, 2616, -2458, 3896, -2434, -1339, -3351, -6553, -107, 1963, -143, 667, 5142, 3207, 5573, 2171, -5912, -945, -8238, -65, 3933, 4256, -3673, -3165, 4928, -2693, 3922, 4089, 341, 3558, 440, -6022, -2996, -495, 2697, 2655, -1877, -3865, -3322, -519, 5942, -1065, 1795, 7320, 5927, -270, -1092, 4721, -1933, -2898, 9, -5553, -850, -3884, 3353, -2994, 244, -3048, -1303, -72, -1847, -2509, -1811, 2108, 3938, 8178, 1713, -3294, -1249, -5696, -2842, 3834, 877, 5917, 65, 4058, 2062, 1438, -4190, 3152, 3822, -2327, -2159, 5952, 1687, -2385, 2123, -6005, -3061, 3510, 792, -4670, -9036, 4556, 8160, 403, 5158, 5504, 8183, -791, 1232, 2232, 32, -3104, -7922, 3293, -2669, 31, -3040, -2805, 12978, 4017, 6813, 2203, 2702, 4608, -2986, 10013, -6794, 1277, 5614, 237, -7426, 1437, 6088, -1496, -3613, -4716, -5922, 7673, 4867, -1682, -3797, -3535, 6117, 2691, -642, -1270, -4025, -1980, -3817, 527, -3656, -6051, 2874, -4942, -6792, 2824, 4065, -3725, -1442, -290, -10177, 4183, -189, -5121, 4630, -5231, -111, 953, 8087, -3147, 331, -5165, 1210, 7092, -2665, -2883, 1881, 1744, 5381, 5276, 2787, -7274, -2015, -6016, 622, 319, 1984, -2417, -6567, 3855, 3853, 4069, 4679, -55, 4721, 4253, -2614, 4339, 2307, 2958, -2371, -3343, -7233, 5562, -5769, -6938, 2047, 3008, -430, 5016, 4165, 4899, -3275, -601, 439, 7293, 3642, -236, 1390, -4034, -2157, 1206, -5570, -2223, 433, 1437, -5660, -2394, -4649, -1196, -3004, -5673, -3093, 2236, -8069, 5014, -4157, 2062, -1391, -7499, 7039, 3713, 4206, 5134, 6249, -4325, -948, 3089, 7789, 3362, 2543, 4321, 1784, 572, -1969, -1431, 5218, -1513, 6360, 5492, 1147, -2510, 1381, 4953, -1204, 3654, 1236, -6426, 6712, -1491, -5876, 580, 6623, 1157, 3240, 3352, -4703, -5112, -4197, 544, 5706, -5025, 3402, 13036, -629, 524, -3559, -4104, 2007, 2340, 980, 8137, -10332, -1834, -1122, -2003, -403, -3598, -4321, -2013, -2602, 7815, 4804, 2793, -3458, -4614, 4216, -6385, 8357, 6074, 5098, 385, 205, 3915, -4007, -1321, -3528, -2193, -6681, 6581, -1251, -433, -6213, 3545, 4620, 5957, -5019, 2600, -138, 5794, 4199, -3625, -5277, 1646, 4654, 5585, 2118, -3651, -6631, -3884, -4931, -1656, 3188, 215, -307, -3201, -6826, 5792, -3165, -2222, 286, 5919, 3818, 3025, -4615, 2568, -8416, 1159, 1709, 5035, 1679, 6650, -1288, 6631, -4069, -3369, 4942, 109, 2567, -4464, 4525, -2386, 204, -1661, -286, 4323, -7059, 3431, -4604, 1214, 2701, 1104, -2286, -3924, 3518, 4074, 709, -3880, -536, -1250, 3411, -254, -585, 3119, -3571, -1486, -5518, -1618, 2891, -141, -933, -4410, -376, -2416, -4731, 2277, -2790, 0, -2296, 2007, -6144, -3413, -234, 2364, -660, 600, -7, 3100, -1092, 2167, 1116, -4102, 5045, 128, 3794, -3380, 558, -1138, 500, -1683, 3337, -375, 5812, 1641, -390, 2061, -2838, 1475, -359, -1395, -776, 2158, 1960, -1486, 1063, -364, -250, -3226, -3266, 1466, 2514, 3003, 2621, 1219, -3598, -2565, 2571, 4114, -1517, 2333, 1479, 6103, 2413, -647, 1801, 2505, 998, 3588, -1098, -3270, -1242, -6554, -4385, 4651, 5943, -111, -2084, 2296, -359, -1995, -1594, -2431, -4891, 1264, 4035, -739, -3350, -5308, 2113, 316, 4461, 2291, -905, -6406, -374, 2693, 2618, -2186, 1920, -299, 648, 2558, -5976, -5654, -2591, 1533, 5489, 2465, -6122, -182, 7150, 554, 751, -3227, -4159, -2022, -960, 6172, 1242, 3480, -3466, 2027, -4091, -5042, 4769, -3376, -4628, -2313, 4396, -2028, -2405, 2756, 729, -6439, 371, -6750, 1145, 1210, 4121, -2847, -2451, 6946, 6813, 3024, 3120, -5793, 5397, -2651, -991, -8891, 1712, -9316, -1720, -204, 5728, 4869, 1609, 6440, -3760, -2333, 5034, 6508, 1960, -7417, 9575, -5434, 5777, 642, -1407, 3266, 917, 3758, 406, -4599, -5330, -5398, -2169, -2334, 966, 1377, 808, -3391, 197, 5434, -4639, -2236, -2847, -502, 641, 8260, -1818, -5705, -4554, 2800, 51, 5430, 3068, 2589, -567, -39, 1585, -5446, -6548, 4121, 681, -3465, 784, -3531, -2135, -6217, 874, -2406, 4476, -3344, 4021, -5635, 1552, -4951, 795, 3846, 2760, -4592, -2514, 2996, -5084, -3855, -3693, -5389, 2935, 4990, -3967, 5027, -991, 4270, -6951, -3816, -3109, 2699, -1960, 279, 1587, -406, -3377, 3646, 1721, -3387, -7956, -6743, -63, -3624, 1525, -1515, -5885, 1857, -2760, -4397, -6089, -4707, -4532, -330, 1973, 4559, 8603, 1806, -2073, 4878, 2985, -4596, -5340, 2382, -2546, 1509, 6287, -5145, 3426, 997, 2976, 5713, -2212, 3402, 62, -3319, -295, 2550, -1782, 2279, -3658, 1266, 3193, -3584, 10527, 1428, 2171, -3610, 2278, -218, -451, -3942, -1042, 619, -1295, 419, 1986, -2131, 551, 1933, 443, -5632, -2329, 5216, -3011, -158, 5136, 4355, -3486, 1212, 2898, 3774, 10, -2310, -5100, -320, -1290, -1654, 2429, -2873, 1924, -4153, -1681, -1130, 680, -1068, 769, -4259, -2642, 3563, 4150, 2360, 1467, 1584, -3540, -335, -6359, -1801, 6380, -5006, 2461, -1770, -668, 933, -2544, -548, -5213, 165, -2128, -2466, 3185, 2140, 3249, 4656, 3616, 915, 1925, 1354, 3545, -5518, -106, -220, -4991, 4528, -1863, 6048, -1070, 4690, 2108, -66, 892, -230, -718, 5214, 374, 1177, 1283, -2137, -4536, 4082, 3625, 400, -2915, -399, 3320, -2553, -4085, -254, 4906, -1149, -2341, 5815, 2745, -5215, -4281, 3032, -569, 1418, 807, -2924, -1460, 548, -1678, 1966, -2519, 2886, 1197, 5207, 3788, -2868, 1651, 4341, -3531, -1262, -5767, 6308, -2359, 2382, -4551, -3418, 1235, 1216, -1910, -3986, 1913, 5384, 556, -5337, 209, -3368, 2377, -539, -401, -1804, -1748, 2689, 2911, -4947, 393, 1538, 2355, 3286, -134, 4609, -2222, -3268, -785, -4047, -2706, 2076, 3322, 260, 5322, 7604, 2162, -2187, -5381, -5573, 6645, 2063, -2009, -42, -6031, -3043, 1470, -7616, -2157, 9108, -5506, -3406, 2048, -241, -3133, 510, -2978, 1401, 4913, -1579, -3823, -3987, -557, -5225, 4621, 3653, -33, 293, 2854, 4430, -1533, -5573, -2636, -5013, 4382, -1514, -289, 2567, -2992, -2435, -7861, -5746, 4740, 1569, -6859, -8167, -365, 4225, -853, -5232, 4992, 6258, -2746, -1439, 2631, 24, -1913, 3628, -37, -698, -1341, -3897, 6672, -2135, 2243, 6446, -3093, -5208, 1035, 4567, 2635, -4257, 2886, 2670, 501, 2713, -4240, 3886, 6734, 1081, -6763, -871, 5701, -3829, 580, 985, 4316, 1107, 3002, -865, 5086, 5342, 404, -498, 4599, 739, -4602, 1334, 2830, 2266, -2171, -407, -2838, -7631, 647, 2248, 1299, 1245, 2679, -3672, 759, -2923, -5128, -2563, -667, 1261, 8627, -4259, 4031, 3539, 4485, 520, -1692, 356, -6301, 376, 2934, -3929, -395, -3068, 2404, -4602, -251, 724, -187, -3742, 2470, -3217, 358, -2447, 1865, -7178, -499, -4800, 1111, 1368, 6081, -1831, -2717, -3660, 4941, -1837, -4163, -1909, 4719, -6695, 297, 5908, 2092, -1110, 4366, -5552, -1763, 1336, 2509, -1579, -1823, -6306, -1656, -2311, -221, -7500, -2384, 3106, 5635, -6685, 3138, -2255, 3472, 3922, 5078, -6438, 2875, 874, 3976, -3314, -5640, 1626, 3182, -118, -4086, 1865, -1723, 1447, 763, -1365, -523, -4208, -1811, -1109, -4796, -2438, 92, 759, -2514, -4661, -775, -4090, 864, -5746, -480, -3214, -2812, 814, -5304, 5040, -650, -3825, -3588, -6889, -1537, 1826, -3429, 494, 3521, 710, -1490, -2670, 2695, 5423, 594, -1835, 6468, -327, -914, -4072, -4927, 3032, -690, 2228, 2785, -1680, -3604, -792, -1097, -2281, 1258, 2610, -2549, -722, 1049, 2007, 1119, 2409, -496, 362, -1469, 3050, -1106, -3056, -5154, -1309, -218, -1284, 3435, -400, -4861, 1563, 5238, 600, 4292, 863, 195, 4926, 2094, -1018, -3887, -3981, -2059, 5450, -3824, -3459, 126, 1898, 4339, 6542, 543, 2110, 1759, -1192, 7617, -670, 6219, -3099, -4952, -4175, -3162, 2031, 2852, 4290, -264, -3798, -2414, 5348, 2033, 2123, 4400, -1719, -2961, -676, -2171, -10661, -51, -3938, 2510, 2740, 4258, 2060, 4024, -932, -2677, -1009, 1567, -5888, -4157, -1310, 3297, -3138, 552, -1990, -2963, -379, 5008, -1987, 1876, -5760, -8478, 120, 3758, -1197, 3570, -1319, 2121, -386, -2138, 2963, 24, 859, -4873, 1247, -2429, 1649, -2319, -5325, -3257, -956, -1366, -2119, -8667, 5000, 3825, -32, 1890, -2064, 2282, 3520, 15, -3334, 1805, 1310, 1753, -2762, -744, 2224, 4620, -3762, -911, 2246, 2742, -2904, -767, -1506, 950, 2217, -1816, 4185, 1317, -2390, -1962, 554, -571, 1281, 779, 342, -277, 2805, -1478, 2619, -3979, 5015, 3328, 2397, 1884, -533, 1282, 3369, 899, -2024, -3713, -2775, -1054, -1057, -2770, -544, -1057, 1231, -3513, -669, -660, 1498, 1457, 1320, -2460, -789, 3788, 2411, -1294, -2359, 3773, 1842, -717, 905, 2840, 3023, -5031, -2558, -1442, -1217, -1260, 4647, -2159, -58, 958, -4324, -2307, 1625, 4449, 1486, 4298, 1099, 218, -4752, 870, 696, -1947, -4150, -1435, 1177, -1297, -3923, 1716, -4335, -712, 2079, -3063, 6185, 1753, 1018, 330, -910, -3218, 1041, -1306, -1378, 2213, -1206, -5892, -5184, 534, 2284, -1369, 2888, -2029, -5244, -2172, 8815, -3145, -2127, 5695, 2459, -3474, 1088, 4948, 3039, -3164, -84, 7077, -194, -4272, -1809, 5040, -9316, 321, -3476, -3544, 5996, 3260, -5175, -3159, -1018, -4173, -1540, 1166, 2986, 83, -878, -1616, 3909, 2032, 2460, -2542, 1083, 2271, -2594, -3203, 3327, 5307, 2075, 5574, -2773, 4862, 5663, 2517, -2273, -3854, -2149, 1143, 4065, 4829, -4717, 8153, 3172, -5256, 4677, 976, 1062, 779, -2066, 1095, -16, 488, -1862, -350, 531, 3767, -4389, -3773, 4324, 2991, -3251, -3768, 3865, 1256, 4542, -61, 4027, 786, 1328, -3748, -1717, -2127, 269, -1609, 1509, 5113, 4852, 4417, 574, 1405, 1605, -145, 5677, -1474, 3905, -274, -348, -3368, -2113, -1491, 3665, 2769, 800, -2458, 2391, -1, -4394, 977, -4553, -2508, 4437, -1883, -684, 3017, -3214, 127, -451, 339, 2083, 1294, 571, 3431, -894, 3604, -2270, 3347, -498, 2811, 1728, 1876, -5269, -5324, 1514, -3790, 2135, 330, -20, 1676, 2451, 2392, 6559, -1055, -3109, 7342, 112, -2101, 1275, 3203, -1544, 143, -1016, -457, 1309, 1380, -1758, -4233, 4479, -1607, 629, 3826, 4960, -4360, -1807, -1165, -1012, -1303, 150, 2266, 382, -1932, -1644, -4728, 5137, -1412, -188, 59, 6053, -1634, -2748, -1755, 950, 908, 433, -3538, -1991, 609, -3744, 8902, 1274, -6419, -5815, -1257, 4641, -2034, -529, 6742, -2829, -1743, -4432, 4615, 169, -1043, -1099, 739, 1335, 9237, -1894, 5348, -3557, 8818, -4945, 4426, 4977, -4615, 454, 1297, -4429, 3039, 10669, -7812, 1805, 9339, 3728, 5094, 419, -1244, -1968, -2101, 3427, -650, -9455, 3652, 5701, -3829, -643, 2336, 9339, 2380, 3989, -1458, 2237, -1426, 5542, -3882, 6163, -797, -313, 2968, 1569, 2394, 7211, 200, -4347, 8082, 1228, -3829, 8965, 2356, -6027, -3411, 3010, -3421, -3389, -1350, 6796, 6530, 8408, 4522, -7491, 2583, 7028, 2494}; +static Q15_T W1[CTEMP] = {17017, 19529, 17179, 18286, 8737, 13563, 15882, 18782, 19230, 19203, 19456, 25471, 12554, 10485, 19418, 13622, 11164, 14686, 16740, 20330, 15084, 24454, 21138, 18955, 15140, 21354, 13947, 17199, 22820, 21448, 21498, 21165, 14533, 16778, 15325, 15593, 18523, 21365, 15671, 17979, 21084, 25756, 22460, 13637, 23945, 15634, 18745, 14041, 23845, 25844, 17189, 22305, 8599, 18819, 10575, 14152, 19962, 17389, 17664, 20796, 20798, 22578, 17279, 26630, 24488, 17586, 22453, 20906, 13527, 16455, 26186, 9836, 25189, 15573, 18342, 17394, 14727, 19176, 14324, 17629, 8642, 13678, 8987, 20371, 20281, 16199, 22043, 13271, 19443, 21668, 19171, 16988, 15005, 17742, 21479, 23528, 19084, 13634, 12271, 22752, 16969, 19306, 22343, 21196, 5418, 18690, 13993, 12758, 16980, 15562, 15264, 16169, 20813, 15180, 15017, 27001, 16917, 12239, 19544, 22506, 23084, 21204, 19130, 20882, 25210, 17332, 24433, 15447}; +static Q15_T W2[CTEMP] = {8535, 10292, 5604, 9277, 10630, 9521, 13822, 8070, 10129, 6732, 14744, 13360, 12231, 13296, 19848, 9294, 10397, 15903, 7895, 14529, 15805, 9358, 6117, 14469, 9985, 13497, 14509, 7510, 14038, 7025, 12413, 16935, 10073, 12142, 13526, 6777, 9707, 13967, 13092, 15507, 12378, 17038, 7935, 9505, 8430, 9915, 10257, 10117, 11709, 6992, 11311, 7528, 15950, 6808, 13814, 9106, 9278, 8031, 11968, 15385, 10298, 11967, 9841, 9242, 14062, 10776, 8999, 10246, 7690, 10579, 12271, 13767, 9685, 10398, 9605, 8170, 16233, 10247, 14005, 8778, 10210, 14752, 8010, 8981, 12800, 5472, 8930, 9337, 12519, 10456, 6350, 10933, 9849, 13346, 9544, 18141, 5637, 12034, 11230, 18919, 16873, 6865, 10485, 8152, 12424, 11561, 12696, 5076, 10348, 10152, 12801, 8833, 11424, 15754, 11842, 12732, 7114, 6708, 9603, 11161, 11218, 8709, 7457, 9017, 10969, 9211, 10775, 11094}; +static Q15_T W3[COUT] = {12368, 13004, 12100, 11959, 13254, 16515, 12059, 13361, 15720, 13710, 18765, 13356, 14064, 13519, 17339, 16531, 14603, 12099, 12376, 13623, 13499, 10513, 10804, 15041, 11999, 10641, 15260, 10878, 13068, 13612, 14244, 11100, 12406, 11941, 13466, 9906, 14022, 13501, 12064, 9390, 8943, 13008, 16716, 11632, 9350, 15337, 11673, 13357, 12354, 14307, 13764, 14733, 14145, 11535, 13445, 17489, 12084, 12721, 11737, 9927, 15752, 14964, 16905, 12186, 13966, 13273, 9645, 12992, 13590, 13313, 10062, 11590, 15541, 13678, 12459, 13440, 10833, 12467, 15060, 9469, 14126, 12190, 11136, 14279, 11990, 14388, 17415, 9278, 13177, 16070, 14818, 13810, 12733, 10381, 11791, 10578}; +static Q15_T B1[CTEMP] = {45, 419, -331, 237, -2862, -475, 777, 1304, -432, -212, 334, 219, -1183, -407, 493, -182, -1737, 838, 373, 866, -548, 194, -727, 390, 554, -113, -531, 423, 151, 618, 974, -291, 144, 995, 287, -493, -405, -245, -632, 217, -58, -141, -544, 612, -494, 870, -18, 1421, -408, 459, 542, -356, -2660, 833, -1213, -652, -80, -573, -31, 188, -159, 448, 1034, 52, -517, 441, -187, 53, -916, 1068, -87, -2072, 329, -647, -326, -107, 783, 664, -827, 906, -3009, -172, -2200, 527, -378, 1285, 518, 75, 775, 888, 927, -913, 1537, 181, -10, 1028, 851, -228, -1876, -623, 677, 477, 313, 774, -6018, 467, -717, 670, 737, -1112, -21, 625, -44, -382, 586, -563, 762, 519, 930, 5, 473, 497, 720, 152, -876, 929, 596, -949}; +static Q15_T B2[CTEMP] = {8981, 4723, -6834, 6407, -4121, -4412, 1483, -3512, 4361, -5743, 2053, 3115, -3249, -3303, -136, -5206, -4473, 2402, -4968, 1258, 2555, 5165, -7390, -2766, 4921, -2583, 579, 10976, 2678, -4358, 6043, 942, -1933, 5302, 889, 11729, 3923, 1018, -3004, 1327, 2478, 627, -6750, 5391, -5388, -5776, 1347, -4478, -3896, 7581, 5740, -6986, -2451, -5816, 1623, -5721, 6780, -5428, 3364, 2706, 3555, -2784, 4682, 2793, 2726, 4879, -5177, 4003, -6290, 2021, -2728, -2189, -2310, -4872, 418, -6413, -1229, -2341, -4847, -1512, -5982, -2168, -6157, -3529, -4030, -8255, -3464, -5022, -322, -2862, -6283, 6, -5371, 1134, -5815, 3716, -8533, -3671, -4925, -82, 3033, -7628, -4947, -783, -2899, -313, 3774, -10015, 2495, -5242, 3984, 6235, -845, -294, -4882, -53, 9152, -6262, -297, 3731, 6412, -37, 2210, 4462, -1914, 6312, 3876, -4445}; +static Q15_T B3[COUT] = {1160, -59, -7167, 4023, 6164, -2833, 3751, -11123, -6620, 1581, -8055, -218, -1753, 58, 10599, -315, 9199, 764, 805, 4847, -7131, 4180, 2173, -3984, 7500, 3829, 3992, 9068, 2585, 2156, 2545, 39, 91, -1073, -1142, -3006, -2796, 8919, -1638, 7959, 1974, -3988, 2952, 1787, 6907, 1175, 9246, 6685, -2396, 3808, -313, 2935, 1082, 5350, 4615, -7950, 2360, 3035, -4500, -12323, 6270, 1183, -429, -2555, 3002, 5455, 242, 749, -2457, 1708, -5855, -6824, -2937, 615, 2145, -2081, 968, 4346, 1115, 3701, -8017, -1853, 2674, -2385, -13135, -2746, -2141, 11876, -4400, -3446, 3710, 3493, -1532, -7569, -9304, -640}; -static SCALE_T D1 = 6; -static SCALE_T D2 = 4; -static SCALE_T D3 = 7; -static INTM_T Limit1 = 805306368L; -static INTM_T Limit2 = 805306368L; +static Q31_T Limit1 = 805306368L; +static Q31_T Limit2 = 805306368L; #ifdef SHIFT - static L_SCALE_T ShRU1 = 10; //1024 - static L_SCALE_T ShRB1 = 2; //4 - static L_SCALE_T ShRX1 = 15; //32768L - static L_SCALE_T ShRU2 = 9; //512 - static L_SCALE_T ShRB2 = 1; //2 - static L_SCALE_T ShRX2 = 15; //32768L - static L_SCALE_T ShRU3 = 6; //64 - static L_SCALE_T ShRB3 = 1; //2 - static L_SCALE_T ShRW3 = 14; //16384 - static L_SCALE_T ShLU1 = 0; //1 - static L_SCALE_T ShLB1 = 0; //1 - static L_SCALE_T ShLX1 = 0; //1 - static L_SCALE_T ShLU2 = 0; //1 - static L_SCALE_T ShLB2 = 0; //1 - static L_SCALE_T ShLX2 = 0; //1 - static L_SCALE_T ShLU3 = 0; //1 - static L_SCALE_T ShLB3 = 0; //1 - static L_SCALE_T ShLW3 = 0; //1 + static SCALE_T ShRU1 = 10 + 6; //1024 * 64 + static SCALE_T ShRX1 = 15; //32768L + static SCALE_T ShRU2 = 9 + 4; //512 * 16 + static SCALE_T ShRX2 = 15; //32768L + static SCALE_T ShRU3 = 6 + 7; //64 * 128 + static SCALE_T ShRW3 = 14; //16384 + static SCALE_T ShLU1 = 0; //1 + static SCALE_T ShLX1 = 0; //1 + static SCALE_T ShLU2 = 0; //1 + static SCALE_T ShLX2 = 0; //1 + static SCALE_T ShLU3 = 0; //1 + static SCALE_T ShLW3 = 0; //1 #else - static L_SCALE_T ShRU1 = 1024; - static L_SCALE_T ShRB1 = 4; - static L_SCALE_T ShRX1 = 32768L; - static L_SCALE_T ShRU2 = 512; - static L_SCALE_T ShRB2 = 2; - static L_SCALE_T ShRX2 = 32768L; - static L_SCALE_T ShRU3 = 64; - static L_SCALE_T ShRB3 = 2; - static L_SCALE_T ShRW3 = 16384; - static L_SCALE_T ShLU1 = 1; - static L_SCALE_T ShLB1 = 1; - static L_SCALE_T ShLX1 = 1; - static L_SCALE_T ShLU2 = 1; - static L_SCALE_T ShLB2 = 1; - static L_SCALE_T ShLX2 = 1; - static L_SCALE_T ShLU3 = 1; - static L_SCALE_T ShLB3 = 1; - static L_SCALE_T ShLW3 = 1; + static SCALE_T ShRU1 = 1024 * 64; + static SCALE_T ShRX1 = 32768L; + static SCALE_T ShRU2 = 512 * 16; + static SCALE_T ShRX2 = 32768L; + static SCALE_T ShRU3 = 64 * 128; + static SCALE_T ShRW3 = 16384; + static SCALE_T ShLU1 = 1; + static SCALE_T ShLX1 = 1; + static SCALE_T ShLU2 = 1; + static SCALE_T ShLX2 = 1; + static SCALE_T ShLU3 = 1; + static SCALE_T ShLW3 = 1; #endif -static INT_T expected[N * HOUT * WOUT * COUT] = {-726, 952, -3886, -4320, -419, -5447, -708, 192, 1170, 2126, 1187, -1411, 2388, -4602, 11102, 1500, 2698, -8034, -4335, -853, -3070, 2686, 1918, -3377, -1704, 2687, -5540, 4147, -4460, 2599, -778, 1399, 4187, -1284, -2798, -4566, 2095, 3006, 2599, 660, 2383, 3851, 6036, -2449, 5683, 4884, -2915, 8476, 656, -2826, -3655, -1933, 4592, 919, 2712, 3410, -1288, -1707, -2891, -2935, 6715, -1470, 2633, 3508, 1109, 834, 1180, 2956, -6079, 1572, 2754, -5195, 5335, -4432, -3784, -2688, 2283, 2828, 8314, 5379, 1599, 1246, 1080, -4991, -8975, -2988, 3197, 5736, 861, 991, -402, -51, 4847, 585, -5091, -3751, 1484, 403, -6199, -6123, 6501, -3793, 5489, -1774, 314, 1743, -7301, 2762, -1466, -2495, 3172, 506, 9364, -5254, -798, -2092, -7907, 1946, 4919, 4233, -343, 5962, -2304, 5520, -1125, 3977, -3531, -927, 1422, -2509, -4970, -350, 3029, 9067, -2616, 2114, 3765, 3494, 59, 3381, 6259, 6505, 616, 5296, -477, 438, -943, 6395, -947, 6173, -3677, -1601, 4029, 4441, -1473, -7239, 529, -85, -1532, -373, 3867, 2255, 2321, 3347, -3421, 732, 2579, -6353, -5088, 1879, -3170, 1348, -618, 1468, -3107, 6879, -598, 2397, -345, 2882, -3683, -2946, -4737, 6338, 4035, 4615, 6565, 6674, -719, -1137, -4065, -4195, 1163, -173, -4460, -5177, 5354, -4038, 5668, -517, -1016, 5029, -8400, 460, -2022, -2848, 3345, -7189, 5471, -4763, -3999, 360, -6997, -1538, 1756, 857, -2674, 6277, 3215, 7871, -1398, 7161, -2810, -357, 3, -892, -176, -3103, 2573, 9364, -4325, 3704, 3112, 2962, -1095, -313, 5589, 2494, -522, 5421, -209, 765, -802, 3340, 783, 2257, -2778, -3604, 4514, 5547, 758, -8772, 1382, 2159, 2573, -2680, 1482, 4090, -2494, 3205, -5728, 4142, -1158, -4670, -5071, -221, -1268, 1499, 2802, 151, -4003, 6272, -2094, -454, -152, -131, -5028, -6365, -4951, 6584, 656, -2182, 1556, 2577, 1265, -937, -5260, 1022, -965, 1915, -1430, -8760, 8509, 707, 12376, 7217, 5861, 1146, -7309, -797, -1314, -8892, -122, -6544, 1878, 132, -2368, -7154, -5162, 202, 3328, 3975, -5672, 7857, -2591, 11271, -3946, 7480, -11855, -1415, 1668, -1244, -1646, -1968, -943, 7778, -6192, 5689, 4778, 10353, -5672, -2697, 8197, 1333, 1186, 5885, 2704, -189, -3893, 7817, -1818, 5528, -4181, -4287, 4004, 10597, 301, -5918, -2965, 2702, -3357, -3381, -2327, 5512, -2262, 7212, -1285, -1460, 1033, -3816, -10287, -307, -2196, 6067, -3333, -1200, -6477, 10435, -1863, 6214, -1723, 3640, -3086, -5128, -4825, 3771, 2359, 3446, -2672, 3865, 122, -993, -3453, -3028, -1768, 425, -2727, -5277, 3534, 285, 8375, 1674, 1939, 5051, -6936, 1096, 4514, -7983, 5613, 1982, 3181, -746, -562, -4330, -1273, -644, -727, 2536, 717, 3074, -841, 6910, -3275, 4868, -6310, 936, 4007, -373, -2162, -2206, -2714, 8604, 565, 7124, 2211, 13686, 4005, 572, 7874, 1356, 6623, 4350, -1561, 3833, -4165, 3257, 2463, -382, -368, -1113, -6103, 5573, -2973, -7407, 3437, -2778, -6112, -724, 405, 2393, 1749, 6729, -2176, 344, -221, -3417, -1924, 4262, -2830, -287, 472, 1021, 398, 6496, 2658, 1266, 2221, -1719, -8071, -4368, 903, 4658, -4576, -6558, 866, 1394, 901, -992, -8474, -2562, -4231, -1057, -3450, -3340, 1020, -2683, 3625, -834, -174, 4709, -10493, 1431, -744, -5252, 5807, 1478, 571, -6794, -2737, -3039, -4854, 234, -1181, 763, -1475, 4754, -4419, 6332, -6538, 1915, -3541, 292, 991, -1429, -2647, -2920, -388, 5907, 1272, 3937, 3083, 3706, 2199, 1873, 8162, 7287, -1553, 10630, -655, 921, -1692, 726, 5451, 3513, 3833, -2181, 916, 2817, -443, -6532, 6908, -3318, 1247, 3325, 1686, 1561, 4219, 2118, -7801, -803, 3946, -3007, -2585, 3012, -2681, -2574, 544, 2520, 3797, 5860, -344, -2432, -1717, -4382, -6441, -3327, -632, 5199, 1534, -1180, 2514, 2028, 1571, -1558, -3262, -1122, -5174, -4178, -2253, -9272, -88, -813, 4659, 449, -578, 6270, -6537, -2366, 2770, -8341, 5871, 1219, 1484, -9060, -4856, 276, -5586, -869, -1014, -3363, 253, 5103, -2649, 9881, -5107, 835, -5680, 1110, 5444, -491, -2387, -316, 6833, 2173, 4726, 4073, 5310, 6492, 3674, -2724, 4813, 4600, -2627, 7864, -2844, -2975, -5222, -2236, 3683, 4551, 1655, 3811, -4920, 8175, 109, -4252, 1225, 1525, -632, 1727, 720, -1696, 4507, 5991, -4597, -1262, 2555, -1475, -2368, 2939, -5096, -3028, 1035, 5733, 6493, 6074, 6599, 190, 301, -227, -10631, -173, -1524, 4727, 4679, -182, 600, 1278, 3675, -811, -10339, -3733, -1330, -1220, -5685, -3857, 2541, -6015, 2902, -2650, -1298, 204, -4174, -2526, 5762, 2771, 9974, 1391, 4387, -6029, -6032, 171, -2428, 2272, 1192, -3585, -1941, 1445, -5726, 128, -2627, 6728, 6471, 176, 4555, -4415, -4380, -3005, 4915, 1878, 3577, 2845, 3726, 532, 6118, 2112, 3332, 6690, -1231, 5895, -2872, 2654, -5821, -86, 7149, 3932, 1508, 5061, -743, -275, -2112, -5420, 9680, 3397, 557, 6101, 1860, -5521, 2832, 449, -6988, -2588, 1836, -2378, 1186, -3760, -5960, -4738, 2145, 1015, 5271, 4758, 4729, 771, 1751, 1721, -7737, -1387, -751, 5492, -229, -1718, 8301, -1629, -2458, -2947, -4397, -2162, -1117, -1246, -5333, -3963, 3453, -564, 6689, 2727, -511, 6455, -9161, 6051, -1151, -3284, 9312, -1848, 1122, 170, -3202, -2296, -4586, 3847, 1226, 1078, -1923, 5702, 880, 5747, -2767, 2928, -3358, -1136, 555, 2308, 297, -3972, -417, 8649, -2951, 6377, 5009, 4149, -3861, 1437, 5703, 395, 864, 5940, 1584, 5879, -1192, 5704, 3068, 1884, -2676, -11216, 2699, 3942, -2379, -4277, 3866, -3129, -2893, 3358, 2171, -138, 1391, 3562, -5274, -2232, 2104, -6725, -5309, -61, -1079, -12, -1153, -1979, 2895, 5765, -3010, 1591, 2045, -2437, -3686, -5978, -2976, 4748, -2001, -2951, -1082, 6252, -875, -2118, -2703, -1100, -4782, -1027, -3884, -5912, 6436, -3397, 6161, 1362, -1178, 4509, -2099, 3436, 20, -4798, 7998, -306, 825, -6817, -4988, -2143, -1726, 2407, -263, -2268, -6420, 5437, -4056, 8146, -4322, 2280, -2566, 1300, 2752, -779, -3084, -1794, -1696, 7202, 319, 3965, 2954, 7399, -2042, 2114, 4252, 7837, -3216, 11887, -1394, 2273, -2756, 610, 2903, -2023, 2352, -3600, 79, 4501, -3346, -5887, 5854, -369, 1486, 5542, 2009, -4987, 2153, 2974, -10796, 869, 4621, -2608, 2566, -3276, -199, -654, 3676, -1285, 4868, 7313, 1704, 1456, -448, -930, -6968, -3526, 1527, 4466, 1154, 2869, 1486, -3095, 3246, -2749, -5196, -2898, -1452, -741, -5137, -4474, 2900, -2281, 6675, 1616, 1921, 4807, -6522, 816, 2594, -3573, 5936, -3033, 5331, -1205, -892, -1719, -280, 1270, 1191, -3610, -1572, 2965, -4150, 4113, -1746, 7860, -1448, 1306, 27, -1569, -4129, -275, -1345, 5559, 1396, 5402, 2966, 6429, 3258, 918, 5423, 5209, 3152, 4569, -3770, 1226, -1282, -151, 2325, 2025, 1635, 1177, -2394, 7352, 1628, -5513, 7473, -2711, -3473, 2900, -531, 2828, 883, 5447, -3204, 912, 2564, -930, 2010, 2397, -4086, 586, 1566, 2450, 602, 6312, 2351, 322, 449, -3232, -4413, -2009, 7056, 5818, -1531, -3553, 2329, -468, 2050, -819, -7423, -2393, -893, 1225, -3100, -3897, 4438, -4210, 6490, 3451, -2727, 6234, -1551, -287, -1096, -7340, 7624, 2508, 5001, -4929, 544, -3809, -3715, -2125, -1033, -5450, 264, 4819, -2575, 8278, -2778, 1820, -6263, 266, 4278, 2454, -1083, -2395, 5532, 5303, 201, 3615, 4933, 5815, -2566, -777, 7143, 4791, -1007, 8465, 600, -425, -3429, -794, 2006, 570, 1280, 1254, -2976, 4024, -1530, -6079, 4024, 102, -216, 142, -575, -5173, 971, -654, -7737, -645, 827, -1975, -757, 3032, -2499, -1459, 741, 3820, 5515, 7374, 4190, 889, -1475, -1957, -8868, -2292, -2619, 4223, 2963, -261, 684, 507, 174, -3120, -6330, -2311, -1708, -1285, -8388, -5675, 3574, -5413, 4222, 566, 2058, 9353, -7162, -950, -827, -5288, 10232, 755, 2549, -6362, -5766, -2025, -6082, 4154, 58, -5279, -2631, 3236, -2992, 6524, -1621, 6358, 2189, 3238, 2031, -2765, -6591, -3259, 8945, 1051, -5, 4477, 6038, 1581, 2781, 932, 6316, 3591, -2252, 7849, -1102, -1279, -4169, -410, 2443, 4057, 3739, 2016, 787, 2546, -487, -3323, 6026, -404, 142, 4110, -470, -695, 218, 6574, -3879, -937, 2201, -3756, 5632, 732, -6084, -3038, -1125, 2297, 7445, 6567, 2364, 1866, 1328, -911, -7003, -381, -662, 8096, 2410, -854, 2770, 2135, -486, -1468, -7956, -3235, -1900, 754, -5983, -10041, 8008, 477, 4981, 2681, 889, 7032, -7060, 2677, 3544, -3841, 1626, -1451, 2421, -4582, -2061, -1608, -9039, 378, 2966, 5263, -2728, 5726, 2019, 6477, -2694, 4850, -5394, 199, 1571, 425, -2401, -1922, 2095, 3930, -955, 3668, 3122, 5595, -4285, 711, 6462, 29, -2669, 6239, 709, -2437, -4348, 1954, 453, 2401, -4094, -5694, 4010, 7160, 63, -4513, -815, 3586, 2221, 2191, 5862, 2499, 408, 4285, -4780, 1158, 3687, -6986, -755, -30, -1027, 1291, -653, 2318, 2357, 4878, 1533, 2412, 432, 2790, -7079, -5318, -4110, 6330, 1372, -1830, 3265, 1884, 952, -2142, -4645, -832, -975, -3441, -5518, -4634, 533, -3059, 3544, 742, 2964, 331, -7505, -445, -818, -2680, 4591, -527, 6697, -8643, -6580, -2917, -8466, 729, 1053, -4390, -5127, 1321, -3382, 2737, -139, 5979, 406, 931, 3787, -3335, -5750, -2143, 5016, 3371, 970, 4494, 5997, 5399, 6219, -226, 3838, 1840, -533, 3649, 245, 6023, -7906, -2819, 4611, 5292, 320, 8382, 1351, 5239, -5505, -3991, 3236, 1929, -2611, 355, 141, -4197, -115, 2288, -4611, -3880, 1042, -5044, 320, 2447, -1284, 493, -509, 859, -814, 4298, 5448, -182, 3753, 1875, -4949, -2432, -2140, 4044, 2128, 2824, 5024, 2298, -2272, -5069, -8435, -3399, -614, -586, -3042, -3961, 2991, -3715, 7148, -2608, -220, 4183, -5742, 1614, -1885, -3491, 133, 1988, 10809, -6419, -4489, 2714, -5231, -1126, 4198, 3050, -2142, 4106, 875, 6928, -3449, 5330, -1559, 1536, 680, -1887, 1056, -2468, 6057, 7085, -1595, 3477, 846, 5482, 3578, 2198, 8678, 5265, 193, 6233, 716, 2856, -1218, 1810, 25, 4424, 1742, 278, 3108, 6723, -767, -5666, 4048, 3190, 985, -290, 2407, 429, -1064, 4509, -3803, 3684, 1338, -3726, -4032, 4129, -4552, 127, 4625, 3607, 2577, 7751, 346, 854, -2194, -5824, -3815, -2496, -1953, 5839, 2626, 3367, 4432, 5963, 1370, -927, -5487, -1007, -1229, 1965, -4797, -2489, 3330, -3564, 5049, -2018, -3288, 3218, -8839, 1204, -4716, -900, 630, 888, 4709, -3402, -3878, 1098, -6588, -155, 1136, -2030, -1433, 5412, 184, 3798, -1867, 7717, -3016, 2215, -169, -1730, -1680, -1622, 2726, 5776, -185, 715, 1169, 3211, -1488, 1150, 4811, 6365, -1533, 2946, -2684, 2936, 164, 3738, -524, 3148, 5542, -2091, 426, 3561, -1484, -4842, 5019, 1686, 1288, -1094, 3521, -395, -177, -1248, -6075, 3112, 3899, -1683, 327, -737, -2977, 63, 1325, -803, 2289, 4440, -34, 5871, 802, -4522, -4013, -406, 867, 4754, 3246, 130, 2889, 790, -1248, -959, -3403, -2530, -192, 862, -5508, -4531, 1753, -5774, 4327, 23, -3284, 3373, -5413, -683, 3976, -3006, 8011, -5306, 4202, -5994, -1984, 247, -3660, 1169, 788, -4215, -1535, 7046, -2666, 2918, -2636, 4463, -1909, -735, 846, -5205, -1044, -1741, 1063, 2994, 1284, 3181, 937, 3491, -756, -1969, 5251, 5658, -1717, 9866, -3398, 849, 195, 546, 2631, 1179, 2766, -3426, -1244, 2870, -1035, -7076, 4810, -1695, 2116, -93, 3154, 5, 3356, 1266, -11973, 4343, 4197, -2907, 1911, -1440, -3704, -734, 2818, 1513, 3532, 2874, -53, 946, 537, -3267, -5206, 1923, 2000, 2918, -1429, 2907, 1847, 1170, 3332, -1006, -5987, -803, 779, -23, -9507, -6962, 6120, -2361, 5382, 5429, -1990, 8878, -10381, 6640, 378, -5503, 7164, -4718, 1382, -1581, -1751, -4422, -5865, -2489, 2006, 5641, -2662, 10214, -308, 7487, -762, 6152, -7901, -404, -2790, -824, 1139, -1471, 830, 7988, -1152, 706, 2882, 5804, -206, 3045, 7272, 2814, 3449, 6540, 186, 187, 393, 7668, 620, 3448, -4407, -12404, 4513, 5431, -349, -6386, 2898, 4953, -1262, 504, 4532, 2572, 1482, 3116, -9194, 769, 3997, -3694, -1322, 2623, -1676, -107, 2043, -2880, 2422, 4640, -1267, 3663, -1338, 534, -3543, -2191, -1719, 2142, -3648, -3516, 2365, 3081, 3436, 1238, -412, 172, -3389, -110, -7096, -6188, -308, -2697, -1187, -191, 3391, 3251, -11840, -3758, 2201, 2587, 7272, 4061, 4142, -2284, -6042, 2067, 1795, 2252, 3393, -2368, -4717, 4834, 773, 5436, -144, 12836, -1366, 5836, 2342, -360, -699, -2208, 8385, 2453, 203, 1134, 5826, 4419, 10141, 3766, 1870, 3302, 9, 1807, -1408, -254, -1239, -3163, -431, 5285, 1622, -5608, 2909, 1313, -3355, -7228, 8553, 415, -1833, -85, -2738, 2104, 281, 5275, -5428, 7834, 3098, -9044, 11712, -6682, -7715, -13, 2529, -1791, 6766, 7386, -2946, 1822, 1861, 74, -7163, 4631, 1538, 5535, -4588, -6092, 244, -2809, 1167, 2482, -9212, -2041, -311, 6, -921, -1389, -3279, -4123, 5805, -9018, -1278, -1017, -5278, -1605, 636, 2716, 11805, 4602, 4914, -2299, -441, 5551, -4325, 3903, 147, -4580, 3110, 4425, 2240, 4828, 188, 7673, 5816, 707, 3355, -995, 2052, -2840, 7218, 4276, -312, 4465, 3166, -2122, 10202, 1221, 5217, 567, 992, 3600, -2422, 1869, -2318, -2496, 2508, 4455, 6881, 5363, 64, 1162, -2187, -4295, 3375, -4860, 4264, 732, 86, 3093, -1179, 3041, -2624, 4878, -2029, -623, 1146, -2394, -701, -7322, -2154, 1340, -868, 2248, 2220, -2889, -1298, 1193, -9583, 341, -2740, 7274, -2519, -2766, 2336, 4579, -2218, -1796, -5346, -1189, 2611, 3678, -3459, -1738, 3781, -739, 2156, -1029, -781, 1230, -7961, -679, -4111, -4803, 3312, -2963, 5043, -1110, 384, 1126, -3359, 5196, 1170, -2402, 1392, 4588, 4912, 11097, 2539, 6524, -12, 2522, 2050, -1931, -951, -2865, 4185, 8598, -6388, 6513, 4462, 1297, 504, 986, 6109, 2388, 926, 4434, -2600, 1954, 628, 3163, 470, 4548, 2417, -1420, -3597, 6691, -2350, -6041, 5747, 285, -1391, -2310, -1198, 4895, -2457, 3787, -1665, 4804, -53, 1129, -6505, -1855, 1150, 2986, -2440, 1056, -4078, 3490, -3960, 738, 630, -2801, -5992, -5889, -4527, 7830, -91, -2868, 2693, 1842, -1106, 1118, -9942, -818, -5561, 2693, -52, -5546, -918, 10013, -896, 3093, 7660, 2536, -9775, 1511, -542, -7456, -3665, 1065, 520, 2768, -4004, -1533, -138, 4741, 1600, 7745, -2251, 4847, 2058, 12079, -3851, 6187, -6544, 2794, 250, 4463, 2014, -4437, 1472, 2889, -3164, 4241, 6678, 10850, -1129, 3010, 7583, -868, 1498, 3504, 2731, 3084, -6433, 6804, -3683, 7895, -5292, -1635, -2026, 7379, -6386, -6051, -3549, 4694, 75, -1733, -1769, -1397, -742, 6775, 4808, -1081, 2283, -6244, -6237, 3794, -387, 6268, -4899, -919, -377, 4356, 2290, 7821, 674, 11, -1186, -3044, -5784, 1510, -1227, 1479, 5572, 7115, -4526, -1253, -6326, -3773, -2918, 2470, -105, -8093, 3603, 1318, -1987, -1139, 5722, 1913, 2260, -4120, 566, -11918, -133, 5246, 4942, -7085, -2548, 3500, -1347, -569, 3669, 2486, 1989, 6777, 2233, 7709, -651, -1838, -5009, 2453, 820, -1211, 3543, -4274, 7759, 4339, -1069, 8293, 4449, 7555, 4594, -775, 6766, 3288, 2874, 3268, -3157, 4368, -1796, 3580, -1393, 6144, -3110, 3937, -7004, 8413, -5399, -8583, 52, 3705, -2225, -2872, 273, -542, 1585, 2510, -1483, 3251, 1098, -4312, -5295, 5742, -3256, 3215, -1453, 229, 120, 6417, 1980, 6619, -2580, 1056, -6655, -2804, -4555, 3031, -1442, 2164, -1416, 5960, -2135, 667, -6228, -4633, 1265, 1212, 1492, -3118, -4624, -2571, 922, -5149, 2646, 3369, -4790, -7393, 1544, -3307, 7969, 2135, 4394, -1742, -2334, 3815, -1519, 1653, 501, -5093, 4217, 4674, 4316, 5963, -4201, 6037, 465, 4262, 2931, 1242, 7637, -2579, 8543, 3011, -2143, 7631, 3446, -4119, 10101, 5359, 4750, -5259, -2224, 285, 2908, 1901, -305, -5590, -1348, 7531, 4661, 7193, -7281, 5067, -2778, -7243, 6111, -5114, -1921, -1854, -7491, -3525, 3287, 5132, -3622, 7208, -2035, -3152, 1234, 4053, -3669, 23, -4970, 4188, 1139, 7673, 2675, 728, -3741, 881, -6477, -2304, 2881, 4998, -1414, 2472, 4404, 5347, -2254, -2840, -11023, -3689, 2152, 2077, -1290, -1456, 4347, -84, 1780, -5319, -565, 3855, -9924, -1675, 5298, -1528, 5453, -340, 3093, -3190, -2658, 4241, -8227, 2296, 3291, 2013, 2798, 3418, 4291, 3914, 1272, 3061, 2968, 1869, -951, 106, 4974, -3508, 1208, 2098, -3231, 4901, 2104, 901, 6841, 538, 3747, 2767, 5758, 2313, -1100, 6460, -1299, 1689, 4950, 5449, -4076, -1509, -42, 9796, 394, -5906, -2101, 3418, -1305, -2168, -181, 6377, 1521, 5081, 473, -491, -188, -4331, -8151, 1518, -717, -441, 795, 2011, 1022, 2800, -581, 848, -2501, 4008, -6754, -2741, -1850, 5429, -4414, -2021, 4722, 955, -416, -1938, -5988, 759, 2933, 3158, -3388, 188, 2065, -7337, 3519, -3436, -4453, 1746, -3046, -635, -628, -533, 4189, -1829, 9908, -2635, -1739, -85, -1966, 173, 2220, -2046, -413, 2854, 5346, 3684, -870, 7841, -419, 2313, -1568, -1594, 109, 1017, 2036, 2643, -2057, 3943, 1118, 898, 4328, 6071, 4706, 3425, 4377, 2899, 714, 1448, -1682, 1547, -2616, 4015, 1751, 2682, -1640, 3166, -3095, -6956, 1613, 3330, -1376, -1503, 2749, 668, 897, 2383, -4764, 2179, 1844, -2565, 669, 4721, -3658, 2835, 978, -194, -4879, 5975, -827, 3557, -466, -3111, -92, -785, 1727, 3453, 5740, 1120, 5107, -103, -875, -1677, -4304, -2142, -1107, 2291, -3746, -4857, 6842, -1039, 5779, -3694, -4336, 3602, -6305, 61, -8850, -6895, 2615, -1598, 3627, -1411, 598, -1865, -7718, 1334, 6778, 6100, 2353, 6723, -3468, 6547, 1522, 2085, -187, 140, -835, 2297, -2499, 1256, -2196, 11208, -5149, 1698, -2954, 1354, -625, 3939, 7377, 2531, 5444, 4786, 1820, 773, -3275, 10277, -3622, 7362, -3988, -5617, 1018, 5692, -756, -7296, -4054, 3804, 1322, -391, 959, 2985, 1871, -5377, -2034, 866, -356, -188, -9604, 4372, 1999, 1001, 581, 2208, -8110, 3616, -3965, -84, -884, 1584, -3387, -9392, -4117, 6733, 78, 5165, 9045, 5723, -3879, -3470, 2514, -1992, 3170, 3436, -2019, -324, 5636, 2036, 958, -2499, -157, 1402, -8791, -759, -7932, -2054, 3363, -1883, 5902, 2747, 1161, 1105, -3796, 2253, 2683, 1825, 3613, 2240, 3857, 5709, 4678, 2989, -1755, 95, -203, 1198, 2975, -1403, 423, 7396, -2784, 1977, 564, 1399, 1606, 6246, 5710, -1047, 5715, 901, -2913, -323, -382, 5436, -4321, 2797, -798, -8412, 1533, 2521, -4490, -6877, 1595, 3315, -2527, -4016, 2875, 8121, 605, 1871, -1074, 5047, -1897, -6237, -7210, -390, 3817, 2433, 332, -1322, -2698, 2850, -6558, 1407, 2474, -3651, -1504, -2611, -2011, 6094, -2964, -5827, 244, 3148, -1703, 1020, -4713, -1663, -2268, 3251, -3313, -3803, -180, -4097, 3515, -7957, -2660, 2309, -4325, 1665, 445, -1911, 4080, -581, 3103, 831, 3673, 7589, -1317, 6664, 2385, -1063, -57, 3221, -36, 4897, 855, 5078, 1800, 2833, 1394, -2521, -1079, 1719, 1408, 3811, 2000, 4335, 4666, 3095, 6404, 1933, 3442, 6328, 1665, 1306, -2262, 3290, -1576, -2866, -696, 4625, 4259, 3141, -3297, 9046, -906, -7079, 7703, 1716, -1192, -1602, -337, 762, 1612, 8893, -5946, 5934, 2759, -2272, 3111, -607, -3045, -3083, 1222, 900, 683, 3736, -1885, -447, 3923, -166, -8200, -466, 4072, 4585, -2169, 4059, -1607, 4053, -489, -3989, -9056, -4716, -1626, -4, -4857, -5187, -901, 834, 3800, -3531, 101, 4767, -7950, -1419, 1493, 351, 3790, -5935, 2553, -1157, 2276, 9471, -2014, 3276, -3142, 1858, 755, 3713, 3909, 4758, 5661, 5669, -308, 1597, 686, -4321, -2248, -283, 2436, 1429, 1593, 2804, 2428, 1359, 3779, 967, 3767, 5371, 39, 6478, -3897, -2259, -939, -2228, -29, 4017, 396, -3320, 3259, 2966, -1393, -7233, 5633, 3073, 1927, -4840, 6691, 2961, -722, 8151, -11368, 6112, 1746, -3790, 3960, -1381, -2078, -1376, 241, 642, 5178, 748, -3419, -913, 4230, -3252, -7593, -2016, -1500, 4556, -4348, -5969, 151, 2363, 3104, -2839, -9198, -2882, -1376, -713, -2974, -2090, 1782, -4712, -2372, -3057, 2744, -992, -4806, -5032, 3006, 3756, 630, 4692, 9714, -1753, -686, 5465, -2303, -2284, -741, -4597, 738, 790, 4334, 1324, -1027, 9764, 1210, 5765, 3948, -6281, 3970, 18, 10552, -4324, 1641, 3202, 4696, 1562, 2100, 4300, 3053, 6039, -189, 182, -2403, 793, -1242, -5771, -3490, 8658, 6488, 1641, 1281, 2274, -1533, -7621, 5250, -586, -2773, -2469, 2827, 2908, -1174, 6545, -7185, 3509, -2150, -5480, 6107, -7876, -1409, 3935, -4142, 2046, 3160, 3214, -3396, 1170, -968, -5736, -2654, 6095, 6364, 6842, -2846, 937, 4369, 2330, 1238, 1937, -8401, -3929, 950, -1689, -3041, -3281, 3614, -6405, 2927, -3320, -2067, 605, -9597, -353, -949, -2052, 7444, 2164, 11021, -3465, -126, 7090, -4136, 3599, -261, -2674, -1909, 4309, 8413, 5537, 6070, 5703, 236, 718, 4607, -3717, 2130, -197, 7378, 3666, -10625, 5025, -298, -2587, 11516, 1494, 1658, -3155, -1583, 5894, -418, 6468, 3138, -2566, -5822, 5751, 149, -8001, -526, 6949, 244, -6654, 5195, 1755, 434, -6690, 3152, 2367, -986, 3611, -7169, 6069, -1875, -7141, 4848, -5898, -4764, -1287, 2743, 2532, 228, 3605, -4728, -4576, 4144, -3272, -7021, -1022, -5689, 2764, -2346, -1623, 4908, 1096, 2280, 417, -6185, -2392, -3780, 671, -8822, -5736, 5831, -4880, 6203, -991, -3327, 11802, -14570, 5356, -1466, -5525, 4815, -6847, 2348, -4221, -1645, -633, -6335, 3170, -662, 3307, -1083, 6448, -2390, 8229, -2575, 6570, -5208, -1138, 723, -2985, -2364, 8, -941, 5376, -1216, 4829, 986, 4623, -664, 1301, 8483, 6774, 4261, 8949, -1971, 469, -914, 3855, -845, 4895, 1216, -9862, 2143, 8433, 2036, -6269, -770, -400, 2013, -1336, 4177, 4981, -682, 5398, -8456, 2517, 4110, -4110, 2974, 2821, -2377, -3195, -392, 2127, 1125, 4384, -3921, 1908, 296, -3331, -5936, -2802, -2175, 2944, -1401, -4787, 1059, 3048, 3331, -1227, -7004, 464, -1317, 1832, -1758, -2141, 5000, 1066, -899, -3731, 126, 4644, -8192, -3656, 4031, -4544, -711, 2013, 7409, -3230, -1018, 4797, -2131, -450, 3687, 731, -758, 6579, 908, 4403, -6753, 7816, -2916, 3454, 1710, -1486, -697, -3070, 2523, 3409, 47, 4319, 2361, 6181, 4106, -3177, 6081, 4535, 1712, 6316, -3388, 117, 763, 3848, 1914, 7601, -885, -2497, -1022, 6491, -5478, -8008, 3109, 1699, -1771, -3217, 4349, 3651, 1260, 6181, -4878, 2094, 5110, -2471, -2904, -5103, -4132, 377, -2336, -3585, 2589, 5269, -5526, 3426, -4560, -3953, -1344, 347, -1987, 4166, -1166, -1169, 2100, 2438, 3797, 2273, -10010, -1131, 3940, -2108, -2156, -3626, -529, -3533, 1809, -3979, 910, 609, -9706, -2262, -512, -265, 8385, -7483, -1474, 576, -228, 2489, -3359, 2890, 2989, -450, -544, 2653, 2180, 6241, 661, 6975, 1892, -770, 701, 3208, -857, -879, -1148, 8499, -4335, 3026, 2873, 6556, 3695, -1588, 664, -5978, 3686, 1848, 245, 878, -1620, -3575, -573, 2050, -3686, -5020, 829, 4462, 758, -4227, -600, -4575, 2064, -6609, -3824, 7807, 1190, 9490, -2066, 7517, -4025, -6193, -2387, -5319, -3234, 3633, 394, -637, -3919, 3647, -6393, -2086, 643, -2261, -8541, -1219, 1779, 3352, -5069, -8076, -1690, 1739, 3103, -822, -7489, -740, 903, -1257, -3826, -2017, 1158, -2195, 3664, -2453, -1169, 3744, -8297, -1565, -2704, 470, 7762, 1391, 2728, 213, -287, 2315, -4534, 905, 555, 101, -691, 1241, 4259, 6477, -1069, 6402, 12, 2657, 1827, -273, 2151, -3945, 4139, 2910, -1599, 5973, 4405, 2419, 6794, 5079, 4562, -351, 2658, 1196, 364, 6291, -3194, -981, -2183, 4031, 3923, -5273, -1732, 3549, 1204, -3078, 2787, 896, -354, -2600, -936, 1830, -991, 3822, -2524, 5631, -2260, -7260, 2903, -51, -1555, -664, -120, 206, 1570, 5369, -694, 220, 2104, -90, -8436, -1385, -2007, 5411, -3469, -3946, 2477, -133, -977, -1554, -8976, -1302, -2667, 360, -3979, -8844, 3446, -1336, 272, -571, 4933, 3906, -8499, 842, -1176, -869, 1354, -237, 5033, 227, -259, 118, 1393, 2746, 4083, -1392, -3987, 5248, -1824, 7778, -3996, 11782, -6614, 3661, -2267, -1321, -603, -294, 4913, 1153, -2089, 6291, 5539, 4030, 3613, 1405, 6791, 6043, -2577, 6828, 825, -1056, -1825, 2646, -4709, 5409, 3278, -6795, 896, 5283, -1747, -9480, 6551, -853, 3047, -1565, -40, 1474, 1291, 7107, -10870, 5535, 4157, -9413, 5653, -1041, -1272, 3306, -780, -1983, 1330, 7699, -7385, -1260, -4366, -366, -2734, -1845, -4674, 2931, -449, -3085, 2877, 3037, -60, 1921, -10163, 2536, 171, 3242, -4406, -4219, 3249, 2516, 1310, 3396, 683, 2065, -6905, 6, -4636, -2610, 3640, -4608, 3165, 2592, -3733, -1509, -4634, 2754, 2454, -2219, -788, 4101, -1475, 5857, -3077, 8158, -1187, 972, -1280, 1053, 854, -5348, 688, 3657, -6065, 3089, 3531, 5488, -1135, 2602, 5852, -1202, 93, 3649, -1992, 3388, -1959, 3478, -3569, 4358, 1069, -5083, 1394, 451, -6124, -5354, 5769, 1413, -505, 642, 556, 6313, -421, 3914, -2839, 911, 970, -5393, 394, -4241, -2052, 3962, -5261, -3211, -408, 3658, -5503, 5319, -842, -1436, -2135, -122, -2614, 3997, -4716, -4233, 4154, 3349, 219, 2113, -3376, 1024, -5420, 2601, -4251, -3419, 1969, 1791, 3228, -943, 2613, 8365, -6796, -1444, -1543, -3013, 4069, -2710, 1658, -1764, -654, -1482, 1703, 515, 1943, 2233, -955, 5358, -2017, 4937, -4015, 7878, -4443, 2351, 382, -1098, 3295, -2590, -865, 4315, 2650, 1980, 2026, 1681, 1948, 1462, 7655, 819, 1545, 7474, -1710, 1093, 1623, 3559, -2014, 8495, -123, -5746, -529, 2177, 1536, -8281, 3350, 3315, -25, -238, 70, 1301, -2476, 3426, -6041, 3799, 2895, -3930, 1260, -102, -5983, 2287, -1166, 402, 4864, 4799, -839, 3342, -1922, -3690, -5762, -3633, 3511, 2372, -4613, -3038, 2895, 1293, 721, 2801, -7383, -2714, -204, -226, -2790, -4426, -1896, -78, 4675, -1476, 2595, 3230, -12437, -586, 506, 4279, 6489, 4067, 7128, 2012, -5301, 1003, -1836, -674, 1094, -1179, -1526, 3653, 2991, 6638, -1249, 12854, -4228, 1535, -2078, -795, 2887, -3043, 7733, -43, -493, 4947, 6612, 6029, 9093, 4542, 6644, 2894, 4112, 2238, 450, 3933, -2142, 526, -236, 1333, 3723, -5082, -68, 3240, 174, -2922, 2624, -1884, -2544, -1242, 1124, 4566, 1494, 11302, -3255, 4431, 2688, -9443, 294, 3266, -1364, -770, 171, -4883, 4632, 2626, 1150, 906, -710, -657, -4311, -1324, -2214, 4115, -2973, -2172, 1102, -506, -83, 760, -6166, 1699, -673, 2582, -2164, -405, 6093, 4316, 3505, -376, -2666, 1687, -5994, 1702, -2073, -8723, 5259, 2547, 6119, -1457, -388, -4573, -4016, -1922, 1514, -80, 2243, 5059, -2115, 8991, -1745, 3673, -4802, 4674, 764, -169, 1570, -1322, 1709, 6865, -3270, 6465, 3100, 9621, -691, -1652, 8153, 4189, 406, 6009, 278, 1867, -1591, 8650, -4548, -249, 3132, -2461, -4616, 5125, -6375, -6452, 2800, -2660, -2018, -2964, 70, 776, 1959, 4382, -1919, 2819, -87, -4414, -7250, 3154, -1688, -224, -2610, -1034, -969, 5504, -1132, -525, 1520, -1993, -3690, -2647, -2257, 4780, 1536, -574, 1665, 4616, -745, -355, -8137, -3405, -472, 2925, -3203, -2261, 3738, 1144, 2704, -3275, 2948, 3464, -8796, -48, -2212, -4138, -2645, -196, 2636, 3487, -1219, -2521, -3783, 4735, 1396, -5443, 1775, 594, -2932, 3757, -2009, 4905, 714, 3726, 438, -3058, -4579, -1527, -4323, 5619, 2126, 5422, 2239, 7538, -1049, 2550, 7977, 1095, 5368, 4327, -1891, 4248, -5741, 3910, -1903, 2315, 1733, 220, -2169, 3101, -4793, -8738, 6894, -3443, -4463, 2541, -1903, 2677, 1900, 3396, -2573, -671, 1534, -2276, 94, -1147, -4618, 1234, -5827, -728, -1241, 4739, -2358, 2982, -222, 2079, -4813, -2062, 4379, 6866, 864, 1233, 1901, 8219, -1755, -2321, -7942, -3689, -3445, 992, -1626, -5152, -1328, 4890, 2400, -1923, 3089, 5066, -5683, -559, -5429, -3505, 3393, 5901, 5621, 368, -2621, 2011, 820, 1693, -561, -3275, -198, 3529, 1928, 10727, 6878, 3835, -2272, 9305, 4007, 3593, 5061, -4105, 10910, 2683, -4858, 10048, 6914, 1424, 5165, 6846, 7268, -4574, -2318, -604, 2688, 5699, -8208, 680, -8441, 7096, 7222, 137, -8110, 2289, -7770, -7085, 6468, -2321, -5472, -1535, -7649, -6754, -192, 3601, -2772, 6486, -2268, -10607, 6450, 3637, -3485, 986, -9240, 4099, 1429, 7091, 256, -328, 5474, -851, -4305, -778, -8203, 4153, -4270, -3523, -3879, 6217, -7589, 24, -9887, -8831, -3974, -2894, -3913, -5968, -337, 5606, 3549, 784, 6617, 6210, -9153, 1071, -5355, -3005, 3567, -1376, 458, -1036, -2161, 2551, 1749, 1779, -190, 3665, -3953, 4689, 2222, 9068, 4517, 3487, -2491, 143, -2917, -1629, 4882, -2554, 6685, 5988, -1026, 3975, 5412, 2138, 79, 4292, 4689, 2709, -3798, 9475, -948, 206, -375, 4490, -670, 5128, -658, -9027, 2897, 3398, 1012, -6785, 5678, 5641, 5802, -1802, -49, 4772, -260, 3673, -5067, 3093, 2439, -5464, -1888, -2037, -1602, 4932, -1165, -3606, 6881, 5040, -3142, 1592, -1645, -223, -7532, -6564, -2969, 5020, -1266, -6063, 2028, -3744, 2735, 3032, -6856, -3606, 696, -1331, -2200, -1532, -737, 1608, -750, 2231, 7358, 4540, -6770, 1729, 3342, -3752, 4955, 5921, 2713, 5146, -1634, -699, 1816, 965, 1013, 409, -2623, 893, -3027, 5271, 447, 3173, -2850, -732, 37, 2087, 2652, -6445, 4783, 592, -3882, 6233, 3229, 959, 3384, 2979, 3337, -1599, -1526, 8909, -1303, 906, 889, -442, -1877, 5300, 4494, -1600, -2295, 1488, -2943, -5224, 8342, 3629, 4525, -3892, 1056, 4014, 2128, 3056, -387, -3322, 2247, -5975, -57, 399, -5637, 6505, -2858, -349, 3436, 2402, -2411, 813, 91, -1869, -3989, -7883, -1712, 3313, -2508, -4413, 8175, -2236, -1178, 1699, -6404, -3051, -3245, -1537, -1408, -4078, 2777, 63, 5805, 719, 3668, 9307, -7675, -621, -2265, -7219, -895, -5751, -3054, -5965, -973, -3573, -5663, -983, -181, 3190, 1920, 220, 117, 7272, -6632, 3030, -4985, -399, 3823, -2672, -2424, -1638, -229, 7693, -2258, 6245, 2891, 7679, -3939, -3670, 6641, 2931, 4337, 4553, -882, 1813, -1738, 2069, 1483, 3220, -3764, -893, -1380, 5584, 2082, -6018, -1205, -1269, 809, -1133, 662, 6254, 1807, 7616, -919, 894, 141, -1346, -5093, 3942, -3748, 990, -1019, 1083, -2805, 5297, 1914, 4791, -409, -3500, -8494, -1785, 2807, 3954, -717, -3500, -2566, 4039, 2483, -2327, -6041, -1289, -5237, -1531, -2814, 604, 3937, 1787, 1798, 1358, -3310, 2434, -13118, 4028, -2139, -1810, -1207, -4621, 2741, 928, 3765, -551, -7863, 3511, 216, 6234, -1876, 4719, 4044, 6915, -433, 3960, -4186, -1064, -1852, 3019, -182, -3166, -655, 8225, -5635, 3765, 3539, 3671, -3772, 3488, 6624, 4014, 5671, 5525, 2056, -1157, 1530, 2162, -714, 5133, -6472, -9787, 4855, 8849, -1662, -5938, -2609, 2602, -1369, -1838, 544, 5639, 1323, 6966, -3842, -334, 2818, -5906, -9671, 3981, 905, 4672, -1967, 1766, -13, 1679, -1916, 1547, -1481, -2154, -3887, -1343, -4706, 3281, -2091, -3178, 4464, -1447, -1710, -3635, -3691, 1166, 1694, -226, 1239, 105, 1247, 1027, -153, -7898, -3835, 2964, -5412, -3697, -2265, 500, 4998, 1860, 308, -650, 2887, 4413, -2413, 617, -862, 2810, 1418, 3327, 4929, 4653, 1199, 2765, 3179, 1469, -1528, 5036, 3128, -3459, 1318, 6948, -2884, 3924, 888, -3, 5548, 5875, 2183, -969, 4644, 3487, 26, 1587, 3215, 2372, -1148, 5661, -2300, -6157, 2730, 2686, -499, -5227, 298, 5236, 335, -2875, -1449, 6406, 1013, 2306, -2145, 5191, -106, -2282, -2610, 1165, -2146, 1299, -3138, -4516, -1363, 3946, -4901, 1467, -3379, 608, -5746, -2550, -2841, 4960, -4161, -3897, 3852, 1666, -3024, -114, -4926, 1017, 1600, 1421, -2242, -2511, 759, 2151, 1873, -4447, -1657, 485, -9539, 1393, -3003, 4014, 1421, 2381, 6128, 564, 484, 2440, -4124, 3708, 4136, -5990, 1831, 733, -279, 324, -3452, 7590, 7874, 5373, -2167, 294, -2561, -2607, 2454, 3498, -3160, 2039, 3947, -2049, 5454, 744, 3088, 4478, -2098, 2832, -606, 4228, -3653, 1836, -655, 6443, 7451, -2028, -1593, 90, -3202, -5316, 9884, -924, -2992, -700, -3236, 983, 682, 4139, -3676, 2215, 1144, -6384, 6050, -2040, -3183, -1527, -283, -2873, 1177, 5265, -7687, -3989, -450, -3292, -1919, -1247, 187, 5008, -2174, -1318, 4277, 4523, -3375, 431, -9128, -861, -348, 3414, -2804, -532, 181, -1845, -308, -5809, -6518, 2249, -5570, -2142, -3052, 2387, -139, -3844, 5600, -454, -849, 7760, -5773, 4792, 658, -4371, -905, 2096, 2035, 4157, -1849, 5067, 3101, 8022, -4649, 4531, 6407, -4153, 3419, 3267, -806, 3673, 2528, 2579, 6686, 3720, 4994, 1729, 1863, 3529, 594, 1986, -2754, -2973, 1853, 887, 5787, -9474, -2273, 3449, -2624, -4179, 1211, -1778, -206, -3190, -2201, -2999, 1546, 3313, -7009, 8841, 461, -7700, 1185, 1247, -992, -4112, 635, 820, -1093, 5737, 21, -3467, 1710, -4275, -4919, 2934, -5169, 3397, -6993, 441, 753, 624, -2263, -3780, -10844, 477, 2967, 4803, 134, 940, 4247, -4937, 4408, -5342, -5285, -2399, -8083, -1945, -3794, -300, 5, 2954, 9363, -482, -2216, 2447, -5292, 2997, 2607, -4123, 189, -279, 3041, 757, 1086, 5687, 3106, 1318, 119, -1961, -1887, -1636, 854, -74, -3004, 1509, 764, -3791, 9720, 2428, 2791, 1705, 782, 369, -2040, 856, -3057, -4829, -3059, 5833, 5292, 3303, -3592, 2923, -2871, -2392, -1199, 3073, -2496, -2682, -25, 311, 724, -4490, -4684, 545, 41, -4332, 150, -1227, -1779, -3423, 1114, -868, 34, 3269, -359, 876, 3232, -2728, -2372, -852, 424, 3341, 2806, 118, 6612, -1365, -2513, 367, -5942, -1863, -411, 2881, -5151, -302, 5270, -222, -761, -3363, -4115, -252, -4592, -2444, 4129, -2245, 7856, -895, -374, -1426, 2882, -429, -3127, 3325, 4359, 1254, 1617, 1862, -958, -1266, 3250, 2452, 3953, 3197, 533, 271, -745, -1896, -415, 3353, 3978, 2173, 1474, 81, 9738, 1508, 3758, 3617, 3657, 859, 1810, -6473, -3975, 3978, 3919, 6555, -1580, 1907, 337, 142, -2047, -6420, 5405, 1349, -2439, 3281, -325, 3497, 3956, 1022, -4718, 1535, -13, -2889, -2782, -2133, -3368, 645, -4084, 3365, 1982, 833, -4914, 20, 2296, -1526, -4453, -2005, 6215, 5818, -3916, -5615, 1775, 569, -1189, 1094, -4387, -431, -2238, -221, -2179, -5337, -83, 1715, -2519, -2112, -1391, 726, -8855, 3617, 2214, 611, 3263, -2194, 2610, -23, 1364, 4550, -2162, -762, 3568, 3611, -2262, 4615, 7023, 6780, -3192, 5828, -4562, 1432, -5435, 4030, 4726, -1705, 2841, 5961, -3348, 4857, 5099, 3478, 2621, 4423, 7521, 2897, 2149, 3447, 557, 1221, 564, -604, -2074, 2797, -4153, -8589, 3676, 3218, -2895, -8171, 3613, 553, -334, -1788, -789, 6386, 3369, 4552, -5088, 4598, -232, -6123, -3986, 3646, 352, 5383, -1335, -1308, -2595, 2659, -3701, 672, -2245, -465, -3426, -2480, -2674, 4551, -4040, -3122, 2072, 5165, -1077, -314, -5338, 2082, 473, 2857, -5168, -4163, 3526, 1032, 1682, -2194, 2134, 5939, -17676, 3424, 565, -2887, 1822, 2337, 7122, 4466, -3287, 2382, -20, -68, 613, 1413, 495, 3303, 4795, 7838, 1793, 6327, -1859, 4952, -759, -1399, 5759, -3164, 4838, 1575, -7271, 7164, 1572, 1047, 3428, 5059, 9867, -230, 5471, 1366, -2264, 2223, -469, 5138, -6042, 5680, 2402, -7433, -1885, 1831, 236, -10141, 5807, -1458, -3895, -6711, 820, 8094, -2264, 8560, -4594, 1560, -1270, -5369, -258, -548, -2621, 2763, -3273, -3511, -2691, 2861, -9611, 276, -695, -5135, 935, -3932, -7391, 2535, -2293, -8550, 1920, 3293, 2003, 5446, -9968, 1475, -1111, 3636, -2728, 613, 5570, -118, 2018, -1659, -5030, -1703, -1895, 2545, -3470, -7530, 5932, -986, 1668, -6044, -2412, -2659, -10276, 1579, 309, -3569, -344, 3613, -3814, 7019, -3178, 3509, 558, 732, 1427, -1385, -1947, -2776, 1710, 7272, -641, 3316, 3074, 4987, 1277, -2677, 8006, 8858, 3610, 8901, -867, -1451, -7276, 7399, 2053, 3910, 508, 5782, -382, 3063, -7234, -3459, 3056, 220, -2458, 2383, 241, 1871, -316, 386, -638, -2461, 1021, -3180, -6271, 468, 482, -470, -4799, -639, -173, 4221, 1931, 2904, -2391, -2197, -1980, -3638, -4655, 5982, 2222, 1693, -1530, 5521, -3388, -750, -1713, -3211, 920, 1706, -1604, 3922, 983, -1715, 2530, -3532, 8, -4332, -8053, -1628, 2230, 198, 5159, 94, 8715, 803, -3117, 2628, -1155, 4329, 1338, -1305, 2465, 2669, 3828, 5312, 3960, 5652, 5245, 3023, -1906, -463, 1097, -3486, -407, 4945, -845, 3756, 3291, -652, 8273, 5386, 5222, -2756, 3788, 1633, -1293, 1871, -3222, -3757, 372, 6356, 3428, 1786, -1207, 1965, -4410, -3527, 5246, -396, -2627, 90, -3354, 768, -1055, 3335, 694, 1493, -1955, -2498, -222, 489, -3684, -3331, -3016, 64, -676, 2488, -1543, -2352, 2639, -797, -3626, -2639, -372, 6318, -4656, -5482, 4194, 701, -218, -558, -7610, -4073, -2275, -2986, -8833, -986, 124, -2463, 5892, 686, 606, 4277, -6560, -376, 1622, -2148, 11532, -114, -2107, -3954, -337, -3942, -7893, 2633, -1440, -1255, -405, 457, 257, 3453, 87, 6463, 5708, 1287, 277, -1327, -3818, -4460, -1466, 2553, -1492, 2562, 4030, -4092, 3164, -218, 5282, 2330, 2301, 6567, 77, -495, -3719, 4096, 4260, 452, 1907, -4191, 1570, -1476, -777, -3092, 5019, -3420, 2409, 2772, -2400, 7671, 2705, 4217, -437, 1533, -2786, -4955, 2329, -2077, -3383, -2090, 547, -520, 3995, 2282, -354, -1912, 1311, 724, -10273, -3269, 4931, 8264, -1851, -5106, 1448, -2979, 2913, -433, -4725, -805, 2895, 4021, -3571, -2347, 1528, -7214, 3435, -20, -527, 477, 1825, -605, 1652, -8937, 2873, 5552, 1183, -2201, 2511, -5715, -2412, 4569, -737, 1251, -384, 3083, -927, 6100, -245, 5427, 3270, 2912, 1603, -1531, -2264, -2081, -1075, 2513, -104, 5530, 3990, 5306, 6028, 2686, 8798, -5543, 3342, 5476, 6277, 5394, -2834, -2393, 164, 2880, -1147, 1528, -6342, -825, -1412, -1759, 650, 1786, 722, 1043, -219, -2763, -236, 4132, -4422, -807, 3878, -461, 1848, 1731, -4255, -3668, -5388, -401, 2914, 5858, 2258, 972, 76, -2997, -7001, -2374, -2000, 2381, -35, 385, 5190, 5609, -2688, -2616, -2803, -5584, 2345, 2941, -2871, -1084, 4657, -419, 2481, -3887, -2630, 866, -5318, 2368, -965, -1088, 6335, -424, 5501, -176, 1246, -4012, -7271, -300, 3456, 1689, 4446, 3466, -556, 3840, 908, 3406, -2944, 515, -686, 2926, 1396, -1918, -966, 5721, 1050, 3630, 1508, 1074, 1249, 2445, 7095, 4427, 3649, 2500, 830, -2062, -757, 5490, -1180, 644, -1431, -3465, 2833, 2241, -463, -9661, 1826, 1550, 181, 4136, 4296, 4530, 3158, -302, -3150, 640, 121, -5167, -5439, 5596, -356, -36, -1190, 2054, -791, 4576, -1445, 95, -318, -33, -3203, -2954, -1059, 7049, -617, -1535, 3150, 4503, -3218, -2334, -1822, -590, -2221, 4003, -4852, -1521, 3245, -683, 3294, -2272, -5857, 2096, -3639, 4451, -507, 465, 9739, 1348, 8904, -1101, 1796, 3222, -4173, 1633, 4104, -6762, -157, 1675, 3632, 7772, -1958, 5195, 833, 5493, -2092, 230, 2597, -2062, 1095, 7463, -789, 1479, 1865, -1633, 8243, 3965, 5132, 6606, 2381, 7273, -2326, 2060, -2204, 2798, -69, 2206, 6049, -9803, -2032, 4714, -7430, -1866, 4825, 1764, -4266, -1893, 2205, -3166, 1629, 602, 1087, 5184, 3544, -5460, 465, 1162, -1825, -2990, 4445, 2370, 2335, 4041, -778, -1101, 3479, -3071, -3474, -779, -4636, 7409, 71, -5987, 5013, -2209, -1411, -532, -8249, -1530, -2673, 1112, -3515, -2310, 724, 3135, 8602, -119, -7179, 675, -4741, 2006, -1785, -4741, 8553, -4914, 7367, -7101, -314, 1998, -4641, -55, 3013, -4972, -1397, 2416, -3414, 6327, -6151, 4398, 3443, 3223, 2112, -198, -977, 680, -760, 6118, 2284, 967, -598, 2257, 2010, 1115, 6266, 10071, 1412, 9394, -3923, 756, -6333, 2255, 2430, 3615, 1488, -3743, 2339, 5327, -4381, -5880, 5724, 967, -4182, 1525, 982, -1066, 2653, -1335, -436, 680, 305, -722, -4381, 20, -1996, -5160, 3866, 4030, -1999, 4964, -316, -3123, -207, -4052, -2721, 1148, -2226, 7379, 552, 358, 6875, 1082, -1178, 1178, -1530, -2755, -3963, -114, -4425, -2881, 9901, -2902, 4558, -3808, -4906, -856, -988, -2360, 4770, -4801, 6673, -3720, 6500, -6152, 161, 2609, -1543, 1731, 2350, 695, 483, 3233, 232, 3915, -920, 3134, 1011, 112, -1177, -2428, -2995, 10, -2357, 4581, 2024, 1935, 4046, 7476, 4035, 1220, 4238, 8459, 5605, 7146, -1428, 3900, -1971, -3722, 3956, 1718, -180, -1906, 3105, 6262, -1473, -5892, 7675, 3453, 2610, 1561, 2335, -3167, 1737, 9591, -8858, 5423, -1423, -3082, -1431, 2164, -1831, -1496, 4055, 2421, 1232, 4416, -1145, 434, 1117, -804, -7990, 2287, 3441, 3805, -862, 2441, 1802, -1228, 1511, -3782, -6433, -1973, -619, 3, -7471, -4137, 6673, -4315, 6340, -1501, -2600, 5751, -6406, 4153, -1202, -3790, 10577, -5981, 2794, -4621, -2442, -1496, -5195, 1600, 2374, 2510, -2, 3890, -4049, 5843, 803, 3442, -3183, 367, 1440, -1692, -225, -2442, 409, 6381, -302, 3903, 3463, 4667, 2128, 3258, 7068, 4743, 5926, 4508, -1727, 553, -5876, 3076, -2111, 1621, -37, -4287, 2517, 3930, -699, -8341, 2118, -832, -5, 0, 2264, 3692, 1311, 6649, -5455, 3354, -83, -5084, -181, 2237, -2434, -2683, -2739, 2373, -841, 5699, -2182, 46, 1201, 2438, -7145, -1475, -2816, 4391, -5143, -4745, -761, 1614, 3451, -2091, -5330, -1285, 224, 4563, 316, -3099, 3717, 2162, 4412, 1913, -331, 3410, 3037, 7661, -3840, -4775, 2908, 833, -1013, -299, -546, -3443, -2090, 2561, 1097, 4042, -2130, 2509, 1408, 9698, -486, 243, -7314, 2298, -967, 4207, 1606, -4541, -3093, 9952, -1306, 3166, 5440, 4877, 2376, 5049, 8755, -3460, -1840, 5169, 2090, -633, -4208, 6701, -4491, 1324, 1036, -3097, -1615, 2064, -2625, -6494, 4171, -2552, -6369, -1365, -2870, 1774, 2108, 6226, -2340, -2323, 2341, -4086, -2985, 3308, -2504, 945, -6303, 2132, 799, 8042, -3530, 1591, 4481, -3934, -2977, -7307, -1657, 5795, -902, -4949, 680, 7810, -2432, 1770, -4040, -3341, 694, -1840, -5795, -1726, -1473, -5162, 1923, -7274, -1799, 4162, -4499, -1998, 3114, -2491, 5625, 1597, -155, -2452, -4063, 844, -5047, 328, 492, -2281, -634, 3826, 1090, 1491, 3285, 6961, 6414, 4858, 475, -2338, 1782, -3315, 4962, 862, 2192, 6583, 1760, -4058, 5856, -971, 2440, -2873, -2139, 1267, -1382, -57, -757, -4178, 2975, 7388, 2690, 4489, -1847, 1942, -462, -7873, 5929, 609, 2623, -1704, -2966, 792, 2872, 6025, -4153, 1265, -1137, -176, 1578, -1349, -8824, -2433, -732, 3128, 1541, 3573, -588, 722, 3879, -2318, -8382, -2597, 2107, 4186, -1166, -3918, 1873, -68, -413, -652, -5221, -6594, -557, -1492, -5483, -2211, 1211, 523, 304, -3150, 1224, -2465, -8407, -890, 1665, 621, 5173, 1314, 6177, 1600, -2006, -334, -2456, 2200, -1777, -8136, 2582, -2266, -1323, 3255, 1724, 7176, 5391, 2852, 2136, -1283, 3220, -1061, 5063, 4731, -342, 4084, 5920, -367, 2341, 6942, 4227, -63, 1292, -383, 996, 6330, -4251, -1646, 2315, 4176, 4765, 7598, -3147, 1093, -2498, -6721, 10339, 1917, -1455, 1626, -3851, -1610, -194, 4529, -232, 735, -1256, -4583, 709, 72, -5068, 2888, -5046, 5229, 2509, 2418, 3128, -70, 67, 2754, -4235, 1024, -139, 5378, -727, -2637, 6387, 2430, -2530, -1952, -8660, -2871, -2276, 1646, -4957, -7183, 5017, -1908, -3644, -517, 337, 1133, -7685, 1705, 569, -4058, 9032, -1009, 5646, -2184, -1945, 5372, -1005, 872, -2263, -2909, -2066, 3606, 3909, 10442, -1093, 4892, -729, 5900, -3156, -186, 3802, -1951, 3970, 2728, -2278, 3811, 6160, 2727, 830, 3128, 5527, 1599, 4457, 4644, -3943, 434, 373, 2619, 1507, 4000, 3189, -11034, -2561, 9093, -196, -5956, 4036, 295, -6136, 62, -1513, 8736, -2375, 8984, -1352, 830, -1586, -5156, 940, -3230, -1031, 5295, -2152, 1981, 3230, 6312, -4515, -508, -3134, -7086, -6530, -2479, 1270, 6680, -5247, -11357, -511, 2982, 7815, 1698, -7890, 440, -8124, 3579, -5637, -8740, 5945, 3667, 1929, 1950, 1604, 11874, -3610, 1602, -2197, -11445, 4680, -949, 1779, -5835, -2495, -5501, -4055, 2018, -2964, -1047, -2977, 6252, -6014, 9338, -4130, 5788, -7526, 5041, 1995, 212, -5048, -1642, 695, 1956, 1406, 4043, 6139, 4459, -2185, 2644, 9383, 5241, -547, 9976, -54, -3713, -3033, 5193, 1497, 7196, -532, -1213, -2009, 7278, -6997, -8522, 4331, 3623, 995, 2933, 1226, -4004, 6895, 1998, -9256, -2844, 6917, -4124, 2359, 4181, -333, -2404, -5540, 2042, 5680, 8031, -2251, 2790, -2467, 192, -5269, -7918, -3194, 6564, 3686, 2718, 1891, 2057, 671, -1113, -6812, -3396, -1194, -1457, -5018, -464, 2214, -1701, 2368, -2466, -1985, 3665, -8666, 529, -931, 1163, 4636, -2222, 5207, 2588, -737, 1396, -5551, 1112, 1169, 356, -1138, 2574, 1195, 5724, 291, 1808, 2063, 2832, -1154, -2161, -1296, -2873, 2252, 5657, -848, 5002, 3173, 3054, 4802, 1634, 2391, 3392, 1988, 4623, -155, 3819, -245, 3850, 2437, 3443, 2455, -5686, 2352, 2458, -1761, -7499, 6976, 2160, 1049, -1589, 444, 819, 359, 3075, -2791, 172, -77, -6529, -1279, -2105, -3861, 517, -804, 1308, 11, 3547, -5619, -674, 1031, -843, -7733, -791, -4511, 5330, -3184, -1562, 1150, 1963, -2870, -2986, -5491, -1445, -4791, 3103, -6450, -6948, -1760, 3142, 5310, 1236, -2991, 7844, -3949, 3047, -3304, -5635, 4816, -3040, 1298, -7851, 70, -2886, -8751, 2906, 649, 246, 1129, 8247, -785, 4729, -7481, -923, 698, 2432, 800, 1787, -333, -2255, 2505, 2397, 2239, 1537, 3771, -1276, 2116, -134, 6853, 2674, -2016, 7666, -3017, -1743, -6850, 2588, 3386, 6879, 4565, -4838, -2432, 4681, -6183, -2272, 197, -2052, 1355, -2449, 210, -6002, 4570, -2826, -5217, 916, 1505, -4628, 967, 4776, -2893, -8747, -1959, 1107, 6552, 5024, 2094, 1657, 1575, -2503, -9651, -4576, -7563, 3493, 79, 1993, 4013, 287, -1750, -3121, -7388, -4352, -1864, 728, -4121, -3453, 4298, -74, 5293, 1927, -2553, 8545, -9405, 3440, -816, -2624, 5692, -3690, 2145, -296, 2412, -1642, -9348, -170, -1286, 2366, 938, 4960, 4065, 4453, 293, 5433, 801, 2625, -550, -2503, -2274, -2701, -3162, 6426, -490, 3337, 2337, 23, 1274, -1449, 5933, 87, 2758, 3449, -888, 1646, 23, 2669, 1103, 2078, -1781, -8895, 120, 3008, -846, -4501, -216, 2352, -4886, 1270, 1014, 4795, 1874, 3990, -1798, 2208, 1754, -2033, 2406, 2673, -3756, -2006, 1481, 767, 958, 4389, -3589, -292, 2378, -3387, -6176, -2151, 2099, 4229, -2795, -5286, -884, 3344, 97, -2637, -5959, -2887, 1256, 2446, -8450, -1395, 9359, 175, -4243, -6877, -4250, 2132, -15855, -3102, 2019, -763, 5404, 547, 9339, 256, -1157, 779, -3359, 5212, -795, -5850, 2554, 5052, -1318, 2217, 4383, 7851, 2030, 1373, 2626, -2086, -1120, -4595, -390, -1189, -4113, 1440, -579, -753, 8208, 4173, 3397, -523, 3788, 6492, -2001, -910, 1376, 2825, -3327, 7588, 539, -4031, 2958, 753, -4167, -9116, 6557, 705, -6109, -4080, 707, 7454, 792, 3052, -4650, 1158, -1825, -7637, 4120, -4129, -7322, -4935, -3492, -372, 4294, 746, -8026, 2734, 3117, -1233, -4744, -1742, 3927, 3707, -1847, -1788, 7000, 6261, -2136, -1343, -9779, 550, -4384, 306, -2821, -3697, -1518, 722, -945, -1739, 3174, 609, -8245, 3012, -5919, -2412, 5417, -2662, -761, 650, 305, -1064, -2131, 3683, 1430, 2034, -1083, 4524, -3447, 6394, 194, 5756, 226, 2568, -1119, 2487, 861, -1346, 409, 3397, 2466, 3592, 3526, 1297, -2105, 4653, 6060, -10, -1532, 5083, 704, -158, -5170, 851, 1484, 5786, 3489, -3141, 955, -439, -3452, -8524, 3030, 2095, 2484, 3222, -2987, 985, 5643, 1827, -2509, -359, 1892, -1880, 1678, -2098, -1209, -2080, -4578, 793, 2980, 3117, -752, -475, 294, -2224, -7446, 438, 127, 5067, -2206, -3164, 2644, 3596, -218, -2747, -1209, -5059, -2688, 630, -7877, -10411, 2636, 2742, 5553, 364, 2472, 7973, -6504, 1982, 1098, -6597, 7290, -2445, 1486, -9286, -2119, -5621, -3073, -908, 5407, 3691, 100, 10676, -3455, 7508, -3896, 4517, -5250, 1382, 237, 2037, 696, -2737, 780, 5881, -957, 1827, 1441, 3646, -1410, 971, 7921, 5351, 1796, 15097, 152, -4237, -3112, 6957, 3236, 9392, -4588, -3384, 4425, 3327, -4482, -8670, -174, 7360, 1161, 3026, 3965, -1983, 4161, -831, -4248, 1568, 5399, -3775, 113, 7187, -2742, 183, 1379, -302, 1410, 5938, -729, 2281, -5472, -2089, -3426, -1528, -6029, 4269, -2504, -1150, 2143, 332, 444, 723, 1072, -3618, 124, -311, -4343, -3267, 293, -3431, 4327, -3394, -2483, 2830, -8969, 1568, -6078, -3416, 7290, 2434, 1132, -1245, -333, -881, -5504, 4320, -121, -963, 3075, -1975, 704, 5731, 1524, 5913, 5065, 2983, 3353, 2584, 1098, -1455, 225, 5517, -1051, 6122, 4022, 2853, 8243, 528, 3686, -457, 200, 3071, 4858, 1203, -3710, -2549, 3942, 2542, 1962, 859, -3593, -824, -4390, -3824, 3773, -2861, -2413, 1071, -8104, 646, 2415, 3167, 3099, 1000, -1995, -3368, 2731, -531, -3914, 35, -2614, 8984, 2583, 3380, -31, -3981, 3766, -2379, -12923, -2491, 3581, 5947, -1195, -5742, 4864, 4575, -768, -1840, -5860, -2208, -166, 5446, -2903, -1551, 8278, 5586, 2509, -3019, -1872, 6410, -10348, 5292, -3369, -6925, 4787, 1893, 1727, 4773, 320, -3012, -5465, -571, 5959, 7057, 3452, 8699, 2272, 6934, -3004, -2388, -4618, -697, -2806, 2604, 2510, -3936, 1449, 8898, -4964, 5494, 1873, 1009, -1450, 1953, 7170, -187, 1613, 6354, 3757, -2029, -1565, 11235, -1977, 3438, -3522, -10308, -2593, 3995, -5005, -5514, 93, 2193, -1626, -3942, 572, 4421, 2093, -1057, -509, -3793, -292, -4617, -11963, 3498, 2156, -161, -2325, -5951, 2363, 3689, -7479, 2299, -1996, 1444, -2635, -8545, -12044, 4654, 2577, 1486, 2731, 4231, -2399, -676, -4780, 1882, -1130, 1922, -3993, -1587, 698, 1303, 4933, -8747, -1649, 1776, -9692, 2205, -711, 4532, 6311, 69, 6928, -3150, -963, 6679, -2505, 2184, 3183, 1701, -1626, 1568, 3561, 5131, -1887, 8524, 2667, 4069, 2222, -1400, 3326, -1510, -736, 6960, -1630, 4690, 2118, -2322, 11431, 2167, 2759, 2415, -995, 5259, 55, -1882, -231, 1009, 915, 5069, 2761, -6459, -249, 2230, -3318, -7365, 4885, 949, -3434, -2386, -7266, 1036, 384, 4649, -3395, 4152, 736, -5734, 2248, -2390, -3421, -2705, -1258, 2652, 1010, 4759, -4442, -3508, 1222, 1064, -11563, -1732, -2107, 5154, -2912, 194, 8060, 916, -150, 889, -8774, -849, -7553, -5038, -9951, -7166, 787, -1383, 2028, 198, -2593, 4735, -3826, 2381, 3103, 165, 9298, 1253, -821, -7890, -4017, 4110, -3712, 387, -1679, -3353, -1172, 1149, 2481, 3552, -5349, 5003, 5451, 3902, 4634, -3931, 301, -2768, 4035, 1030, 1273, 464, 4736, 1446, 3659, 2178, 4609, 6148, -4095, 9853, -264, -2512, -4018, -3962, 8612, 4212, 5717, -2060, 1764, -2110, -5374, -6591, 6867, -552, 1855, -516, 1443, 3144, 4358, 5883, -7440, -2367, 2395, -755, 8549, -9593, -2191, -3958, -402, 3151, 11381, 2424, -1763, 1380, 436, -5540, -11296, -699, 7569, 7842, -2913, -3484, 5140, -5241, 7656, -159, -7631, -3272, 842, -1934, -6779, -3036, 3252, -2185, 5853, -4140, -4826, 6264, -1508, 315, 606, -2866, 12025, 724, 6375, -6446, -190, 513, -9446, 2032, 2064, -5189, 2577, 2605, 4948, 7475, 3689, 1760, 6870, 4076, 1576, 2496, -3419, -4106, 3003, 1335, -4608, 7249, 3747, -5004, 5257, 1172, 5309, -2587, 3359, 4089, 2468, -1349, -992, -6319, 2470, 4008, 1904, 496, -1293, 3177, -1620, -3325, 3552, -636, 1280, 662, -28, 1501, 2442, 6733, -1520, 2215, -4433, -4748, 1172, 4417, -422, -2978, -636, 6921, 2565, 3026, -1548, -3986, 1380, -1574, -10194, -5557, -2764, 7885, 1123, -3799, 1183, -3731, 352, -3629, -5450, -1880, -4844, -2735, -2437, -2631, 5094, 1805, -2343, 1018, 3521, -1778, -2582, -1676, 1990, 602, 4754, -627, 6363, -6409, -6212, 3207, -556, -936, -877, -6069, -2976, 3445, 261, 5436, -6366, 8677, 1102, 6409, -1082, -2190, 2847, -1545, 2593, 3629, -225, 3486, 2230, 8464, 1894, 139, 5140, 8661, 619, 9794, -3300, 2419, -426, 1086, 835, 1046, 4644, -4780, 1751, 4556, -2404, -3830, 10048, 1644, -2224, 2512, 1694, 1233, 407, 6744, -6736, 1561, 2342, -4716, 2324, -3909, -707, 4653, 2437, -3161, 3061, 3106, 74, -974, -5911, -9823, -2170, -1283, 3248, 5230, -3459, -3818, 5714, -3062, 3788, 1351, -9265, 377, -4417, 123, -5089, -7583, 5161, 3386, 3959, -1772, 551, 7685, -12734, 5783, -126, -2582, 2571, -3462, 3602, 1936, -2825, -462, -2522, 3127, 5974, 5577, -3850, 6264, 1089, 7584, -3302, 4120, -2690, -1040, -1802, 5710, 1491, -1973, 5189, 3985, -3803, 6900, 2989, 7531, -59, 5796, 5730, 4555, 3979, 3784, 1303, 249, -3316, 1359, -4480, 5146, -4458, -7094, 2166, 9130, -1448, -10889, 3671, 8034, 3555, -1531, 2495, 5623, 2440, 2629, -3562, 2115, 1125, -5676, -5346, 2262, -1406, 5100, 441, 56, -2179, 3811, -4415, 1447, -1696, 501, -3388, -2627, -7168, 4300, -1064, -1409, 4730, -1518, -725, -2553, -4733, 3747, -539, 1082, -3367, 310, -779, -8090, -3426, -5016, 1097, -823, -3033, -2592, -2291, -2668, 2093, 4084, 7048, -2007, -2798, -498, 751, 3382, 2630, -3885, -5795, 2077, -2611, 4800, 5433, 3341, 3688, 7675, 536, -416, -3177, -4992, 8799, 3171, -5435, 5842, 4942, -4684, 2749, 3775, 4208, 808, -2008, 3127, 1106, 1967, -5169, -2217, -3788, 4217, 1331, 1924, -5395, 1312, -967, -7862, 7295, 5346, 696, -920, -2300, -1685, 3060, -3463, 225, -21, -1105, -2357, -403, -2691, -6549, -59, 192, 3604, 689, 6735, -362, -2290, 4944, -366, -5231, 2695, -3928, 4096, 790, 2390, 2273, -2718, -4783, -2841, -4692, -5137, -2521, 3031, -4871, -5224, 6887, 2458, 2382, -3967, -443, 3927, -2666, 3012, 188, -6670, 6879, -3369, -4222, 484, 2972, -412, -5198, 2045, 355, 3200, 3483, 1570, -1011, 7605, 386, 2990, -2331, 2792, 2293, -3876, -2452, -804, -6107, 8017, 754, 5388, 2478, 9613, -1704, -2450, 7721, 4508, 4452, 4425, 795, 1103, -3135, 8540, 1825, 1382, -2801, -784, -57, 5798, 165, -5241, 1491, -1677, -2183, 2031, 2883, 1839, 149, 4891, -965, -1608, 1803, -1425, -6766, -101, 2034, -1210, -4876, 3007, -2681, 2889, -1673, 2218, 1538, 2044, -7797, -3467, 5406, 5938, 2158, -2627, -1612, 9356, -291, -4283, -5293, -3498, -3257, 1687, -4174, -2874, 1845, 5441, 5417, -953, -4374, 7487, -18578, 6276, -1051, -4601, 10386, -4094, 2894, 2102, -865, -2389, -6219, -331, -828, 5749, 798, 11428, 5652, 7076, -2095, 890, -5766, 1556, -676, 5435, 7667, -1721, 1930, 10325, -6244, 4358, 2123, -423, 842, 5754, 8676, -937, 5656, 5598, 1309, 599, 628, 6452, -1182, 6154, -1010, -9012, -1070, 7818, -3638, -10292, 4370, 1338, -6329, -4504, -1080, 6212, 474, 5325, -988, 3142, 447, -6231, -5346, 8652, -1688, 3571, -4958, 844, -829, 3866, -7469, -517, 77, -295, 2652, -5469, -5484, 7032, -1279, -2138, 287, 6541, -45, -936, -5640, -565, -4065, 522, -7741, -2322, 4103, -5290, 2311, -1807, -6187, 5265, -11859, 2716, -21, -2103, 10034, -1796, 2790, -2356, -1661, 4537, -4401, 1824, -520, 2142, -4224, 4170, 3529, 4628, 130, 2051, -2116, 364, -1714, -1292, -1684, -2819, -889, 10118, -1840, 3857, 5014, -90, 5847, 3375, 4398, 1799, 1085, 8240, 423, 2767, 362, 3685, 5711, 2291, 367, -11688, 421, 2816, -5223, -6114, 8162, 276, -3786, 1271, -1543, -850, 253, 3070, -9927, -28, 1808, -6232, 840, 1099, -2398, 1019, 560, 749, 2950, 5088, -7778, -1719, 3798, -2653, -8079, -3377, -4040, 4180, -5293, -2108, 341, 2149, 343, -3252, -6289, -1284, 777, 816, -2122, -1808, 5483, 793, 5728, 1285, -2022, 5598, -2933, 4183, -6118, -6832, 4335, -774, 8906, -2025, -1245, -493, -6326, 2403, 1777, -2185, -1208, 3331, -7, 8428, -133, 2339, -993, -768, 732, 1776, 2856, -3122, 3249, 9941, -3300, 5311, 2438, 6015, -264, 3914, 5939, 4891, 630, 4236, -1075, 5607, -3462, 2533, 337, 3402, 1959, -1217, 674, 7147, -5067, -6684, 7485, 2396, -2038, -100, 1439, 196, -1731, 1868, -2222, 3047, -829, -2291, -2407, 1103, 407, -365, 581, -83, -4506, 5791, 1, -229, 2106, -3067, -3648, -5478, -2642, 5428, 1190, -555, 1372, 5331, -1815, 195, -4790, -1025, 1718, 4398, -2593, -5290, 3925, 5364, 3287, 2957, 2276, 2021, 2189, 1473, 315, -6485, 7168, -3800, 3918, -1096, -1636, -1700, -1272, -217, 3598, -4416, -409, 2677, -3884, 7579, -3287, 2969, -2403, 2917, 399, -645, -547, -1790, 1065, 4221, -1036, 5181, 2669, 6627, 1433, 1774, 6310, 1309, -740, 7414, -2541, -1390, -3673, 5061, -5173, -45, 1439, -8821, -2770, 2122, -5308, -6135, 9235, -4410, -2330, 47, 2156, 870, 1868, 6075, -7251, 1926, -75, -6135, -1530, -4233, -2352, 1319, -44, -1713, 875, 7414, -960, 1275, 955, -4883, -4514, -1341, 1669, 4644, -967, -2412, 1728, 3220, 4030, -846, -6380, -2495, -2895, 884, -2097, -4483, 2201, 6875, 4880, 1829, 6201, 3260, -3685, 324, -1971, 75, 3436, -2513, 4187, -6651, -3381, -4409, -5830, 2272, 4022, -5677, -346, 4469, 517, 7894, -1360, 6440, -2675, 3850, 866, -1996, -574, -4073, 5350, 8115, -3656, 4848, 5147, 3785, -27, 1811, 5962, 3340, -2663, 4840, -2864, -1439, -4210, 570, -4454, 5153, 363, 1122, 3958, 7641, -3519, -7249, 6699, 183, 1037, -703, -366, 3910, 1691, 5861, -2051, 3265, 604, -4838, -2521, 3219, 132, 5060, -431, 601, -3390, 5386, 566, 1739, -1543, -307, -3821, -3735, -5247, 6017, -3016, -2688, 3974, -948, -3930, 851, -8646, -27, -5916, 1415, -5028, -6377, 3799, -867, 2588, -156, 2274, 4501, -7001, -2223, 1414, -4171, 7509, 2619, 6335, -2761, -2909, 3025, -2297, -230, -523, -1668, -951, 5423, 6234, 7049, -1899, 6214, -1748, 4476, -306, -1349, -2108, -1945, 5865, 4576, -3789, 4388, 5920, 876, 6008, 77, 5028, 2942, -1070, 4550, -2375, 950, 1103, 3177, 166, 2539, -396, -5360, -2529, 5343, -2883, -7048, 5162, 1172, -273, -1445, 898, -1118, 1936, 4981, -6739, 1740, 1523, -6193, 2142, 1480, -3558, -19, 3994, -1078, 5970, 6279, -2572, -224, 2349, -910, -6676, -4326, -3786, 6332, -1341, -2215, 2743, -2070, 59, -23, -8058, -505, -4150, -1300, -6329, -2272, 3772, -3778, 4806, -927, -1765, 66, -2245, 4399, -257, -5326, 5025, 3224, 5340, -8114, -2045, -1683, -5684, -2189, -93, 3539, 479, 5904, -1230, 4142, 221, 990, -2042, -69, 472, -83, 1180, -1440, 2065, 7820, -1094, 3968, 2395, 13, 746, 2095, 7096, 6051, 4033, 7028, -2088, 3827, -3245, 6514, 1868, 4280, -173, -6124, 3496, 4327, -2869, -3104, -2329, 4526, 925, 3095, 8479, -2724, 1544, -3149, -4710, -856, 2634, -1176, -3284, 3507, 447, -6638, 152, -1054, -363, 2274, 4309, 2687, 292, 1051, -4608, -3330, -4064, 981, -5002, -2164, 406, 2087, -2769, -1763, 4660, -2071, -337, -528, -3366, -1636, 3730, -2121, 7769, -494, 1134, 2253, -9277, 871, -1127, -2931, 5795, -367, 4709, -1684, -4017, 954, -3324, 1652, -271, 3259, -478, 5482, 2308, 7515, 2361, 6372, -1460, 3450, 789, 2551, 2252, -1745, 3690, 7975, -2976, 4262, 5706, 3792, 5375, 7693, 7294, -294, 7698, 549, 859, 3634, -5759, 1912, -1942, 5070, 1783, -339, -1865, 7247, -1920, -5278, -92, 5105, -7007, -3231, -891, 405, -2175, 5567, 1237, 4058, -303, -4085, -3025, 4369, -1405, -633, -6367, 880, -4032, 4731, 2796, 2183, 3240, 4683, -2739, -3841, -2585, 6184, -5431, -2095, -2956, 6728, -1046, -3483, -2992, -2701, -1003, 1489, -4788, -2808, 1909, -1557, 4299, -1309, -2831, -1118, -3526, 3233, -2115, -177, 7943, -1876, 5437, -1102, 0, 613, -3582, 946, 1254, -158, -2839, 3438, 1568, 3220, -570, 621, -893, 1016, 865, -1261, 2805, -1978, 703, 5860, 279, 3025, 1108, -652, 3494, 4893, 6637, 3243, 6037, 5876, -4271, -1756, -1683, 4805, -286, 4002, 915, -4859, 15, 6150, -5058, -8326, 5982, -295, -1708, -250, 3389, 1964, 3507, 2964, -6231, 4905, -1465, -4137, -902, 1751, -2325, -2666, -386, 235, 1114, 4881, -3832, 398, 1232, -2992, -3507, -2210, -568, 6488, -2686, -4843, -1145, 4468, 1286, -334, -3669, -652, -3218, -1807, -6233, -6326, 4740, -3628, -1390, -2290, -313, 3649, -5506, -613, -361, -4216, 12371, -1670, 3627, -4385, -2620, 3788, -128, 3674, -1438, -5519, -2410, 2023, 70, 7592, -244, 4928, -818, 3033, -54, -1177, -2265, -2854, 819, 2004, 1500, 4155, 4856, 3290, 3737, 540, 5204, 1592, -894, 8864, -2630, -2859, -2124, -1258, 1051, 3750, 2227, -3427, -1650, 1085, -871, -3826, 5067, -1639, -1239, 2710, -1651, 757, -1539, 4913, -6801, 806, 339, -4990, 8757, -3626, -1476, -1188, -1314, 1631, 6731, 5703, -3668, 566, 1456, -5304, -8974, -2399, 5516, 5586, -1813, -6027, 2462, 1552, 3295, -394, -8600, -2493, -3827, -1104, -2853, -9092, -735, 2595, 4391, 347, 4471, 8709, -3935, 4716, -2230, -7954, 5518, 2151, 3552, -4599, 693, 2333, -6446, 3605, 582, -917, 1286, 3941, 1069, 9392, -4163, -1259, -1164, 1245, 4500, 1550, 567, -2724, 2558, 5165, -3794, 7012, 4600, -749, 4336, 708, 5605, -3258, -1811, 6346, -2225, 3751, -4200, 1177, -4404, 9061, 3865, -6761, -3894, 2839, -4450, -6370, 2530, -4978, -4164, -7215, -2026, 179, 813, 7889, -2517, 4183, -757, -8556, 4476, -884, -2644, -476, -2778, 3150, -443, 5497, 140, 342, 1823, -6640, -9313, -6165, -3725, 3392, -2241, -3442, 2652, 6609, -1914, -154, -8645, -8038, -1268, -2933, -4959, -1321, -602, 3046, 6329, -3058, 366, 522, -9207, -553, -2333, -2236, 4648, -703, 8806, -5405, -3352, -84, -2877, -553, 1062, -1983, 2509, 3083, 3330, 5053, 1100, 6057, 2052, 2426, 362, -2618, 3351, -263, 8550, 7862, -974, 5602, 3561, 1729, 5715, 3308, 5608, 4630, 2091, 3229, 1048, 3499, -2416, 638, 2625, 3364, 1682, -4040, 3217, 4060, -1444, -6508, 7733, 1912, -2349, -2882, -1307, 1670, 1130, 5165, -1669, 5421, 824, -4414, -5193, 1646, -3307, -704, 216, 2390, 3637, 3728, -1598, -2129, -1192, -3301, -5551, -713, 2547, 6071, -264, -2301, 3426, 1803, -460, -22, -5783, 777, -2660, 4799, -3239, 2110, 3671, 3322, 3549, -4624, -350, 1330, -9929, -2500, -2602, 1269, 883, -1189, -1030, -1244, 2404, 1900, -6023, 2818, 508, 2698, -1871, 1508, 5308, 5288, 3270, 3383, 3348, 2965, -619, -25, -1070, -5111, -3235, 5413, 392, 3116, 1082, -2196, 2525, 1996, 6608, 927, 1429, 6458, -1238, -2781, -691, 4265, -496, 3485, 704, -7366, 3223, 941, -1332, -5016, 2033, 542, 679, -2593, -2024, 3292, 2085, 6295, -3774, 1529, -466, -3863, -5635, 893, -1796, -26, -1239, 464, 22, 2667, -3903, -1284, 2421, -4898, -5051, -2194, -1467, 4820, -1904, -3687, 5126, 257, -1864, -788, -5989, 214, -671, 2164, -2073, -2972, 368, 8250, 3407, -1206, 6607, -939, -12825, 1729, -2451, -438, 1420, 2128, 7887, 1307, -2431, -981, 889, 3387, 3659, 1181, 607, 5672, 2891, 6608, -2141, 8797, -1806, 1862, -3523, -1620, 1952, -2165, 1858, 6682, -1892, 6469, 4052, 6088, 8228, 5631, 6317, 3640, 302, 6330, 21, -459, -2842, 1842, -3614, 4558, 2644, -4992, 2975, 4473, -8588, -3674, 4507, -238, -794, -3430, -1372, 3007, 1369, 5362, 673, 4336, 4226, -7209, -2746, 4463, -3286, -343, -1982, -3351, 367, 4163, -2585, 3435, 814, -577, -3353, -5141, -6308, 5097, 636, -2033, 2685, 7384, -2334, 2935, -6399, 55, -672, 1063, -79, -480, -4170, 372, -2498, -6990, 1134, -1546, -11013, 593, 284, 7214, 5196, 3045, 9439, -737, -666, 5044, -2288, 5148, 3917, -3917, 905, 1368, 2463, -775, -75, 6704, 8536, 4579, 726, 212, 3902, -3198, 7805, 3004, -1203, 5719, 1384, -8601, 9983, 3015, -1942, 6404, -6429, 2940, -668, -713, -1127, -3115, 1339, 5837, 8266, 2311, -1264, -66, -6607, -7273, 6162, -646, -1832, 763, -3754, 12, 2819, 2941, -2282, 3298, 1384, -5189, 6621, -3881, -2178, -3995, 1154, -213, -919, 3002, -1936, -4333, 916, 999, -6523, -85, -2535, 3619, -2237, -1444, 7702, -1671, -4003, 231, -9064, -958, -2463, -3212, -3703, -2335, 4643, 965, 250, -3375, -198, -140, -9416, 124, 2123, -1916, 8479, 3827, 5144, -93, -52, 167, -4032, 1366, 2986, -2342, 1491, 2479, -4337, 1577, -871, 2121, 485, 774, 1776, 402, 4979, -1648, 1968, 5640, 2697, 934, 4317, -828, 5960, 3704, 3463, 2982, 3094, 6007, 2671, 3120, -3068, 2977, 2166, 7408, 511, -7871, 2022, 3889, 71, -5966, 4314, 2152, -529, -323, 1690, 2059, 2325, 3834, -841, -281, -583, -7934, -3502, -2496, -266, 1995, -1564, 3526, 5917, 3790, -1715, -571, -1203, 897, -5112, -1155, -1378, 3633, -4576, 4963, 7249, 4844, -1851, -2149, -7886, -2316, 3249, 2819, -2364, 1548, 2485, -4938, 4931, -4684, -3131, 310, -10152, 37, -3869, -2154, 7030, -423, 8778, 694, -2593, 1953, -4619, 1738, 216, -6419, 1473, 3530, 2775, 6588, 3393, 10188, 1568, 1085, -79, -1509, -1149, -1230, 2063, 5296, -1961, 3287, 2470, -118, 8052, 714, 5956, 921, 8110, -695, -3449, 3981, 838, 3335, -2402, 3702, 1851, -5166, 1209, 6782, -861, -4629, 1585, 903, -7467, -2600, -2156, 3443, -2461, 2070, 2377, 1686, -656, -2947, -5537, 1248, -6082, -3948, 69, 3043, -1264, 2697, -75, 1991, 5227, -2990, -3546, -3599, 1683, 5328, -1597, -7038, 841, 7704, -3200, -1741, -3391, 1427, -6286, -2377, -6744, -4195, -3059, -2784, -2618, -5878, -1524, -403, -6556, -5508, 3800, -3036, 6700, -1396, 499, -10701, -4313, 2373, -1010, 9671, -3237, -9628, 3239, 3172, -320, 5186, 5357, 6152, 1016, 5945, 298, -6154, 701, -1201, 9460, -3156, 4018, 4831, 5949, -4515, 7404, 1331, 3379, 3808, -3975, 5947, -2549, -701, -2264, -2463, 6617, 9451, 8860, 8256, -8143, 1913, 907, -6612, 14184, 6390, 291, 4456, 424, -4042, 4776, 6128, -10627, 3650, 5262, -2001, 6676, 3656, -5681, -3378, -3797, 3271, 9407, 21, -669, -361, 4395, -6754, -6447, 4130, 376, 7528, -2147, 805, -5940, -1269, 3495, 1850, -10109, -6211, -3240, -310, -9729, -3957, 2244, 863, 208, -393, 4086, 6153, -4483, 3638, 581, -7194, 104, 1651, 5944, -705, -1824, 942, -4016, 1567, 1842, 1094, -1587, 6062, -1678, 7060, 8001, 5230, -1740, 2915, -1596, -2450, 1551, -1705, 6670, 3646, -832, 6757, 1699, 5382, 2208, 5343, 6854, 4882, 4269, 5414, -4072, -3525, -2973, 1254, -992, 6948, -3274, -1334, 1036, 9105, -6949, -7247, 812, 5413, -2531, -5659, 3147, 5150, 5108, 5496, -473, -2669, 4436, -3347, -2321, 1415, -2825, -2763, -3326, 128, -413, 1674, -2678, 3269, 2880, -1443, -3121, -3461, -191, 3234, -4047, -996, 3333, 1564, -129, -30, -2523, -1923, -2816, 1124, -4981, -2466, 6419, 1621, 4231, -2277, -2836, 5029, -12067, 6972, -4724, -7731, 10535, -2863, 2769, 3303, -944, -2807, -5711, 3722, -1639, 805, 2092, 5098, 4585, 9095, -761, 667, -1268, 2018, -2584, 2544, 1762, -162, -2790, 8423, -2428, 4293, 3693, 1471, 2623, 5194, 7467, -2179, 3416, 4006, 1084, 4380, -1511, 6041, -3238, 2183, 1723, -9542, -845, 4433, -2939, -5615, 1654, -225, -4587, 516, -2387, 3967, 1109, 8142, 1495, -1349, 303, -5846, -981, 2418, -2371, -1287, -5224, 589, 4845, 3880, -4301, 3078, 2258, -3302, -1757, -2111, -3863, 4995, -1566, -2612, -1429, 10525, 1161, -930, -4253, -1822, -1844, 532, -3062, -811, -2213, -1776, 407, -3816, -2452, 2917, -7797, -411, -2430, -873, 8026, -591, 1004, -2304, -2812, 1551, -6045, 2557, -2157, -2486, -1767, 812, -154, 3042, 2493, 5029, 1215, 3043, -1209, -491, 655, -5708, 681, 3869, 979, 5538, 4886, -1699, 4525, 1742, 5607, 2048, 370, 6871, -1314, 1677, -5032, 2471, 4106, 1399, 2671, -1645, 977, -859, -5053, -7734, 6489, -1888, -3961, 1753, -563, 1813, 2191, 7391, -4528, 873, -1488, -6707, 1780, 2992, -2643, -2261, -1905, -408, 3188, 4287, -3340, -2307, 4073, -4789, -5618, -1135, -2894, 6452, -5932, -7227, 315, 5076, -3571, -276, -5636, -2044, -377, 515, -77, 375, 3048, 6592, 5213, 1593, 2064, -1635, -5565, 2591, -553, -1368, 618, -484, 7076, 2213, 105, -122, -2114, -873, 2344, 195, 2019, 6934, 1106, 3514, -379, 3659, -2674, 871, -310, 3380, 3004, -2365, -1383, 5919, -3403, 1575, 645, 241, -2605, 2239, 7096, 1449, 5153, 7156, 203, -812, -1592, 8638, -3573, 9151, -448, -5257, 4856, 4356, -5213, -6764, 3951, 947, -2210, -3158, 2450, 6934, 905, 2096, -530, -2958, -807, -5553, -3857, -1632, 533, -513, -4844, -1429, 2471, 2080, -4253, 68, -3166, -352, 1130, -6332, -4209, 6695, -4515, -7308, 3856, 2515, -2825, 1092, -1973, -1552, 1289, -313, -1470, -2451, 2483, -2959, 3412, -4471, 1121, 4378, -5412, -3196, -1866, -2127, 3639, -2241, 3383, -2144, -3457, 59, -5781, 3768, 2211, -2804, -555, 2440, 2589, 6333, -160, 8043, 2775, 3482, 2161, 5054, 664, -2781, 8087, 1658, -2251, 3689, 3154, 1976, 2339, 5417, 4657, -3141, 1506, -408, 6303, 2865, -5906, -2686, -3577, 5940, -1122, 1926, 712, 6904, -2124, -5775, 2906, 4942, 4160, 264, -3562, 212, 993, 2666, -2096, 2320, -2250, -3781, -825, 1058, -780, -552, -1573, 5340, 1164, 5750, -1266, 162, -723, 3072, -5157, 3157, -3322, 6040, -1141, -771, 3932, 301, -5279, -5113, -5116, -1912, 2660, 2528, -4032, -5272, 2823, -1116, 2257, -5267, -3471, -1979, -7237, -1308, 2737, 6021, 4613, 2196, 6708, 1501, 370, 5865, -3888, 6257, 944, -6722, 3129, 2480, 8918, 2029, 3120, 7287, 5618, 5956, 1991, 3708, -1801, -3249, -1504, -1857, -4581, 1039, 3720, -3438, 6216, 2263, 3273, -6656, 1327, 2693, -843, -2427, 286, -5022, -1127, 3570, 3048, -4128, -162, -1641, -4490, -6063, 7798, -2398, -103, -650, -4343, 5885, 1143, 6377, -2742, 7313, -852, -2584, 11511, -6170, -2415, -1661, -6085, 4470, 3806, 1003, -7702, -2209, 2665, 3738, -7303, 2577, 7167, 8323, -1479, -5664, 3748, 2466, -1914, -2043, -8785, -669, -7318, 1554, -6860, -4565, 4850, 4946, 1935, -687, 6442, 2845, -7631, -2376, 2250, -3925, 988, 6439, 2107, -1795, -1606, 831, -1731, 2121, 2264, 1971, 1214, 6881, -504, 7331, 130, 2975, -2636, 5783, 4253, -2572, 2075, -2955, 7375, 5281, -1541, 6620, 1950, 13058, 1265, 4153, 8652, 4530, 4788, 3740, -5609, 2301, -8018, 8994, -2480, 6039, -2512, -329, -121, 4331, -7397, -8368, 8347, 2646, -1146, -1866, 1849, 3809, 1714, 1417, -958, 3176, 1973, -7495, 2006, -1481, -5642, 1705, -7447, -5532, 4742, 3059, -5298, 3670, -3272, 6447, -5088, 1630, -8644, 8894, -4116, -3838, -2062, 5510, -3621, 3371, -7013, -1444, -1829, 3922, -6574, -2248, 3653, -2118, 1713, -4333, -1932, -693, -3992, -190, -959, -6354, 7544, 282, 3894, 104, 2254, 462, 921, 4571, 2166, -3257, 1584, 2771, -871, 2590, 3369, 2897, -476, 5347, 4120, -1643, 2604, -1150, 1015, 4406, 2296, 4521, 574, -856, 6380, 2981, 5017, -286, 1725, 1342, -895, 1856, -1563, 425, -1694, 4667, 2918, 1860, -5359, 1607, -1500, -6286, 6614, -352, -6050, 145, -341, 215, 3402, 2695, -1060, -39, 816, -2299, 136, 2370, -7884, -1883, -2740, 7349, 3570, 6274, -3961, 3686, 6875, -4426, -2818, -415, -18, 5774, -885, 2106, 593, 6551, -546, 45, -6638, -7423, 256, 822, -3801, -1843, 11, -4873, 2767, -3612, 1888, 653, 2040, -4141, -2132, -1773, 9973, -172, 5130, -5672, -1428, 5815, -1194, 480, 797, -2665, -607, 1026, 3727, 4809, 4901, 6636, 3511, 3028, 1596, -5475, 2255, -496, 4017, 4457, 1658, 3455, 1879, -3351, 11584, 3392, 1463, 2461, -2195, 4606, -223, 2591, 1686, 2762, 2903, 2290, 1047, -907, 2318, 3580, -6808, -5725, 5074, 2188, -1699, -4110, 793, -1311, 1642, 6863, -1118, -616, 2375, -1801, -3521, -620, -3164, -5058, 2492, 4252, 3173, 4247, -1673, 2170, 5275, -380, -9539, -3702, 1914, 5359, -582, -5941, 7261, -1938, 361, -3344, -4661, -4498, -221, 3172, -1878, -3340, 6279, 763, 3864, 239, 1415, 5896, -3315, -776, -608, -9060, -3799, -1312, 5119, 5296, 1664, 213, -6320, 4016, 198, 5119, 747, 3138, 3364, 10581, -4118, 113, -3086, -1766, 449, -2811, -3209, -2872, -3557, 9623, -2008, 4564, 3253, 6497, -1628, 1314, 7853, 525, 6931, 5539, -1398, 3077, 2012, 12148, 5110, 2642, -3743, -4649, -4369, 6432, -4497, -8866, -513, 2506, -2748, -5901, 1623, 1276, 133, 6908, 1560, -34, 2359, -1363, -12213, 2727, -1123, 1393, -2238, -3288, -1320, 4646, -3509, 6020, 454, 1087, -3535, -6440, -6576, 8025, 3588, 6796, 3422, 10812, -2569, -3828, -9376, -1382, -4346, -1431, -2989, -5691, 672, -1244, 777, -3854, 2217, 2906, -4054, -3960, -3509, 124, 3293, 2316, 2582, -3842, -3837, 3801, -2274, -1382, 1122, -4264, -2680, 4139, -2100, 2576, -2431, 5151, -1880, 3786, 249, -2004, 558, -4234, 2755, 3196, 1638, 3045, 4507, 688, 3690, -2514, 3197, 6813, -2904, 8653, -3289, 3255, -3856, 3895, 876, 2606, 4499, -1619, -871, -1187, -3709, -7240, 3802, -2731, -1762, -571, -2182, 1111, 3110, 2125, -5146, 2371, 2979, -2630, 1207, -1397, -3516, -1556, -573, -1896, 4002, 4335, -2630, 3949, 490, 847, -6708, -2438, 3880, 5530, -1301, 69, 3322, 75, -2933, 1257, -8387, -5625, 3219, 1114, -6461, -3601, 6484, -2469, 5072, -2863, -6081, 1823, -3726, 2699, 3877, -3194, 5401, 2453, 6595, -801, -340, 2058, -4559, -2302, 3462, 82, -89, 8240, 4778, 4868, -2973, 4070, 2702, 2268, -886, -1628, -197, -4888, 3161, 5809, -3943, 3000, 3234, 4278, 2811, -733, 4776, 1104, 3957, 7222, 580, 1731, -242, 6139, 2366, 2689, -2618, -4197, 1604, 2639, -3598, -7157, 1283, 7061, -481, -3032, 5578, 4653, -1168, 2043, -3536, -1722, 3791, -1071, -5522, -905, -1151, 95, -279, -1494, -704, 4307, -7088, 4165, -2746, -2512, -2469, 133, -1544, 3453, -915, -735, 2447, 5282, -1929, -1170, -1712, -1033, -4390, 373, -5968, -5175, 115, -2490, 6504, -4047, 2405, 2222, -6788, 1348, 1087, -579, 5348, 1882, 4310, -2365, -3137, 386, -1457, 3495, 1599, -2864, -642, 3327, -1897, 4179, 1363, 7963, 923, 3411, 474, -2703, -650, 682, 4887, -515, 144, 5876, 3824, 238, 2834, 4401, 7180, 3511, -479, 5157, -3108, -902, -6135, -1020, -693, 4327, 4864, 1611, -3356, -489, -5022, -6314, 3172, -1587, 875, -2943, 2570, -1393, 3152, 2519, -7018, 2901, 2857, -6196, 3845, -2400, -2284, -4214, -3047, -2271, 86, 4304, -495, -14, 2582, 1207, -4531, 468, -1038, 5629, 1739, 305, 2541, 205, -784, -2003, -3950, -3737, 384, 184, -5071, -3786, 715, -1674, 4302, -1087, -24, 4842, -9468, 4993, 617, 1903, 10800, 2807, 910, -3930, -821, 1765, -3304, 2349, 964, 1127, -644, 4898, 4798, 7823, -1807, 7235, 2759, 850, 930, -482, 3382, -2816, 5411, 4015, -2803, 5228, 6035, -1988, 2378, 2768, 7211, 1743, -889, 8706, -1302, -429, -2558, 791, -260, 4838, 3873, -5357, 2928, 2689, -3191, -4810, 2757, -864, -3046, -1717, -885, 5042, 2139, 7591, -2236, 1138, -218, -5494, 5131, 1617, -1030, -4081, -2017, -2027, 4165, 4683, -2838, -2079, 2446, -3307, -6378, -2172, -4006, 6670, -5737, -9836, 1022, 4586, 2532, 195, -6679, -58, 663, 1472, -7337, -2965, 2042, -4381, 7015, 458, -2181, 6957, -12274, 7529, -4455, 140, 6960, -434, 986, 4839, -861, 4223, -6851, 1151, -1773, 3868, -4513, 3146, 3022, 5720, 2379, 5205, -803, -701, -2819, 190, -599, -2349, 1764, 7934, -5906, 5259, 1987, -844, 1302, 4573, 3547, 5143, 4029, 6269, -3003, 4213, 2773, 4670, 1314, 1415, 3362, -10130, 3054, 4742, -1471, -2982, -1382, -3425, -4646, -476, 6712, 4000, -1527, 6432, -6774, -889, 3780, -5009, -477, 3057, -198, -59, -2622, -1913, -2832, 399, -1814, 1294, 1641, -1941, -2361, -4541, -4912, 1726, -7024, -11926, -2380, 3878, 162, -1347, 405, 80, -1481, 261, -5861, -2448, 4473, -2782, 5478, -1997, -1667, 3237, -6010, 2259, 2781, -4058, 8839, 2559, 5436, -2813, -3972, -180, -4115, 2495, 1824, -873, -1100, 5369, 701, 3925, -2619, 4183, 4016, 1460, 760, -3652, 2835, -2553, 5811, 7558, -1559, 7714, 4043, 2356, 6336, 1700, 6916, 5456, 1212, 9716, -3252, 5614, -1720, 2159, 2748, 1417, 318, 1887, -3072, 5269, -172, -6004, 4029, 800, 565, 754, 6132, -2870, 2634, 2185, -3857, -108, 4609, -3781, -5437, 3174, -6247, -3200, 296, 1517, 4530, 4034, 1695, -457, 987, -1865, -2141, -3959, -7704, 7302, -939, 751, 2958, 5218, 342, -848, -3871, -426, -1980, 2691, -5358, -1572, 2735, -4438, 3331, -2635, -3763, 1395, -5224, -2591, -784, -2379, 3884, 274, 2032, -2430, 1550, -1633, -4594, 6079, -1377, -1835, -1925, 3436, -548, 6142, -959, 8448, 2444, 5070, 1366, -4345, 334, -2836, -43, 8696, 175, 2799, 3518, 2805, 2120, 2905, 5212, 2551, 1098, 6076, 953, 3867, -2384, 77, 4189, 4909, 1468, 119, -1674, 4657, 433, -3440, 4361, 1223, 261, 2509, -1236, 680, -1841, 1963, -3740, 5191, 3447, -1701, 3268, -748, -1910, -296, -4078, 1976, 2011, 7384, -3985, -539, -1349, -499, -7886, -4087, 2103, 6615, -4050, 1010, 55, 1242, -1717, -694, -8718, -3195, -29, 1221, -1934, -949, 2409, 1169, 6137, -3199, -2814, 4886, -9148, 6961, -7525, -4077, 2055, -565, 1315, 734, 1218, -2137, -7730, 3388, 69, -42, 6564, 388, 1295, 6384, -2691, 2278, -684, -1377, -1462, 1719, -2686, 305, -2902, 6374, -169, 3903, 3391, 4904, 947, -1053, 5454, 5976, 7673, 4386, -61, 4491, -2826, 2200, 1106, 3819, 2982, -3792, 1723, 3629, -3019, -2133, -2563, 92, -63, 136, 3914, 2209, 2801, -398, 1975, -1064, 1929, -2901, -4634, 6211, 127, -1485, -989, 2711, -2133, 1220, 1770, 2215, -58, -6733, -3475, -3704, -1507, 2788, -1581, -5498, 884, 6390, -4519, -1385, 455, -245, -1451, 1691, 312, -5280, 5384, -3507, 5138, -3825, -1267, -581, -2910, -7365, 5713, 2293, 9299, -1076, 6103, -6128, -361, 4441, -957, -227, -1979, -2672, 2167, 3563, 3124, 5299, -4345, 7313, -416, 2812, 5482, -5167, 1500, -1021, 1608, 1245, 1003, 2862, 3961, 3026, 2127, -3158, 4271, -1192, -1766, 5511, -660, -1102, 1483, -2776, 1241, 3168, 2200, 4878, -727, 3746, 1965, -5228, 3504, -1912, 270, -876, 763, -27, -860, 7748, -7880, 3489, 434, -2642, 1386, -1116, 356, 672, -1047, 4448, 3275, 6856, 1091, 803, -2771, -3654, -9205, 1991, 4473, 5740, -173, 24, 6898, -461, 1777, -4065, -8600, -2174, 2836, -1612, -5366, -642, 3152, -5574, 477, -4044, -4515, 1249, -10035, 1085, -1611, -3365, 3999, -1377, 2957, 2084, -1404, -154, -8342, 3202, 1910, 1251, 3971, -570, 404, 4336, 2325, 4410, -1625, 3250, 1771, 2102, -2275, -1262, -5103, 3807, -441, 1372, -2681, 5920, 3355, 472, 4671, -903, 7646, 1742, 4521, 649, -1103, 3859, -424, -240, -509, -5288, -3991, 2006, -1457, -5832, -2230, -1418, 1531, -1327, 2129, 4390, 2514, 1615, -2847, 1133, -1604, -3935, -735, -1308, 1323, 1188, -663, 3570, -334, -284, -2343, -1616, 511, -2985, -5551, 336, 542, 4487, -3597, -3655, 2630, 3731, 1300, -2336, -4638, 62, -1113, 1835, -2084, 572, 4890, -5636, 663, -1687, -5951, 640, -8518, 3245, -3952, 688, 5844, -3366, 3752, -816, 586, 2825, -2692, 2361, 835, 2077, 21, 3076, -1110, 6573, -274, 5252, 1188, 1348, 2590, -3463, 2186, -1134, -5481, 9039, -1459, 2103, -1846, 2044, 15, 4707, 3467, 6915, 5428, 2857, -2426, 5292, 3241, 2840, -4525, 5383, -492, -5278, 2239, 6651, -1720, -7454, -2394, 2416, -5144, 493, 4413, 2038, -665, 957, 29, 817, 171, -3014, -3996, -2606, 1539, 1189, 3081, 1407, -7736, 2625, 858, 1180, -65, -1751, -1312, 412, -400, 1880, -5201, -353, 5043, 5235, -1286, -2781, 126, -3253, -2112, -2730, -6590, -3077, 2407, -1622, 780, -2364, 203, -825, -6772, -3544, -1483, -928, 5358, 40, 332, 628, -1019, 493, -3442, 6181, 2379, -1352, -1495, 1152, -3837, 1586, 866, -481, 799, 3372, 1285, 1365, 501, -4721, -226, 3339, 2262, 1608, 2437, 2498, 3891, 5275, 5850, -4058, 2403, 4089, -324, 192, -8716, 1200, 2201, 3994, 942, -4548, -774, 200, -2211, -6809, 9563, -3188, 6578, 373, -1915, 4277, 4270, 1574, -3961, 3667, -1687, -5717, 6266, -6470, -2631, -1080, -7009, 173, 6619, 5412, -7385, -1131, -297, 6822, -8984, -1381, 1650, 7799, -3430, 326, 163, 220, 81, -750, -8762, -3608, -1644, 2179, -1227, -2962, 1213, 4140, 2057, 2117, -1414, 3715, -12761, 1330, -836, 9, 12326, -1767, 24, -3008, -830, 4176, -1190, 744, 573, 3236, 324, 8041, 7716, 6896, 5379, -188, -1127, 682, -418, 1882, 9961, -3881, 7414, 7408, -8316, 7590, 5530, 3267, 2565, 3412, 1924, -1581, 5142, 3508, -1321, 4185, -588, 3664, -1251, 8836, -1548, -3184, 695, 8029, -4776, -6578, -326, 1137, -5428, -4624, -2574, 8654, -518, 3841, -1430, 5569, -1451, -8506, -5415, 2875, -1713, 7102, -2952, -3262, -3639, 5369, -5488, -947, -965, -982, -348, -1931, -7322, 5069, -6019, -10436, -7421, 1919, -1503, 1354, -2106, -4169, -4097, -1579, -3909, -3767, 5058, -2860, 3509, -600, 2906, 3599, -6617, 169, -113, -2488, 8713, 1151, -1106, 2240, -2422, -2874, -4161, 3956, -1778, -2575, 3527, 2197, -1072, 7549, 691, 3051, -1118, -1521, 2199, 1845, 1241, -2304, 3175, 5879, -696, 4903, 2485, 235, -4419, 6497, 3944, -937, -618, 3776, 900, 3788, -5106, 2148, -339, 2067, 2231, -1854, 1661, 4200, -1661, -4178, 1445, -1565, 2085, 4941, 3694, 2530, 2556, 2813, -1533, -3352, 1814, -2113, -442, 930, -3599, 859, -5019, 3474, 2828, 1702, -246, 6816, -629, 3790, -5675, -5248, -2742, 6756, -1453, -5648, -294, 5703, -2016, -2881, -3064, -2179, 1266, -1173, 0, -2089, 618, -2394, 1386, 1640, 5818, -109, -4583, 2240, -3400, -2618, 1467, 4445, 7677, -3419, -4093, -1141, -584, 22, 2283, 2657, -1218, 7020, -501, 4996, -1340, 3459, -122, 2052, 1522, 479, 3729, -4416, 5376, 5616, -4128, 5127, 1998, -1699, 4198, 4220, 5909, -295, 2658, 4493, -1212, 779, -2440, -398, -7511, 7971, -1633, -816, 1656, 2544, -2552, -6181, 567, -1083, -5569, -2087, 1141, -3650, 542, 574, -1924, -153, -2841, -6159, -2151, 5133, -2156, -1419, -2499, 311, -1751, 6004, 4068, 895, -120, -3439, -1877, -3099, -4519, 2032, -3330, -5297, 530, 5637, -2467, -1715, 138, -5431, -4539, 1049, -6095, -2032, 3894, -2665, 2283, -5303, -1413, -697, -5511, 4851, 1955, -4085, 2563, 6487, 4173, -4101, -851, -3616, -8386, -811, 1789, 4778, -184, 1245, -431, 3267, -5557, 2516, -2385, 3031, 817, -1612, 486, -1209, -2989, 10078, 322, 4203, 2563, -429, 4096, 802, 7027, 6796, 4303, 5477, 1109, 2544, -1052, 9906, 3027, 3446, -3046, -9768, -3398, 4740, -2827, -6140, 498, 912, -2942, 2417, 2834, -2249, 3915, 739, -814, 1144, 2613, -6575, -5512, 3865, -3085, -1842, 885, -636, 2157, 6316, -1128, -400, -1131, -992, -5817, -4025, -5458, 6073, -957, 157, 4251, 2537, -340, -744, -3713, -864, -2624, 1441, -892, -5240, 3347, 5102, 4091, -1317, 1846, 7043, -8422, 3307, -1292, -4958, 6498, -909, 758, -317, -2983, -2599, -2793, 3598, 3062, 3536, 898, 6187, 2699, 8155, 32, 2702, -1810, 2768, -63, 4152, 2947, -2243, 3360, 8530, -775, 5073, 3748, 6016, 1674, 1910, 6218, -5429, 1126, 1108, 779, 4008, -2968, 3380, -3889, 4961, -4296, -6005, 449, 4123, -4419, -5502, 2950, 1214, -619, 2522, -3190, 227, 1078, 4783, -1344, 1824, 927, -6952, -2135, 4668, -2873, 3186, -6183, -295, -1620, 5977, -2936, 3330, 1783, -1094, -3626, -2736, -4403, 3939, -5910, -5137, 141, 8565, -2836, -986, -4774, -2916, 877, 1088, -3441, -2939, 2636, 1964, 5147, -5036, 2292, 4968, -7080, 3647, -3251, -991, 5396, 941, 1705, 1471, -2060, -861, -4254, -1724, 4389, 1568, 1762, 3335, 2864, 3530, -1393, 3327, -3172, -344, -4518, 4105, 3198, -3535, 2847, 5958, -5126, 6975, 4577, -151, 921, 4489, 6477, -1065, 4414, 3504, 530, 84, -1846, 4932, -4940, 3829, -59, -11197, 2116, 2279, -944, -6948, 4143, -1525, -862, -1465, 665, 9057, 3322, 5331, -3600, 2693, -375, -8878, -3737, 4565, -3118, 2615, -3797, -6734, -1965, 5465, -7317, 1103, 508, -1156, -2033, -4224, -1828, 4645, -3920, -4554, 170, 4576, -1058, 1824, -3414, 2015, 872, 355, -4363, -1551, 3357, 655, 2510, -892, -2506, 410, -11313, 2241, -4612, -262, 8962, -4200, 721, -3097, -1488, -220, 53, 0, 2092, 8737, -1996, 1810, 3430, 6719, 5080, 1532, -2849, 1136, -420, 8454, 6924, -2822, 520, 10539, -6565, 3569, 2028, 2390, 2484, 8541, 3619, -3506, 896, 2341, 5517, 403, -1403, 3904, 606, 1405, -101, -5628, 2089, 2496, -2068, -5752, 3725, 3083, -3754, 750, -4187, 4034, 94, 1422, -712, 3049, -3091, -8260, -313, 2614, -315, 1629, -2955, 559, -2594, 4358, -2406, -5665, 2991, 2974, -5937, -1160, -4536, 3753, -6705, -9431, -2004, -660, 35, 717, -508, -1685, 4292, 4147, 517, 1272, 6066, 6190, 4429, 2941, 2211, 395, -9054, 3010, -4840, 1056, 501, -5141, 10332, 4215, -2723, 1324, -3373, 2019, 2971, -1221, -79, 2127, 3276, 8803, 317, 4620, 482, -2077, -3065, 2421, 5252, -4504, -4016, 9584, -9804, 5384, 1820, 4466, -1859, 4782, 5511, 534, 6063, 3581, -3335, 6509, -1928, 5604, -4855, 3183, 1089, -8209, 6154, 7535, -5997, -8092, 4373, 804, -4313, -6472, -1859, 10973, -4224, 8469, 3545, 5379, -2156, -3041, -6366, -1805, -708, 4442, -673, -5508, -8299, 3506, -6473, 3174, -609, -2655, 1547, -4967, -924, 4425, -1449, -6294, 2601, 6369, -1648, 888, -5632, 1773, -3094, 2882, -2373, 259, 5797, 2901, 5233, -1256, -5805, -1425, -4351, 2194, -7751, -3064, 5830, -4529, 6321, -886, -172, -1719, -7165, 1500, -507, -1831, 1744, 4993, 4645, 6932, -1806, 4252, 2896, 2797, -3383, -2350, 1484, -3403, 670, 9539, -3522, 3465, 1939, 766, 2543, 1780, 5913, 5358, 1901, 5147, -1890, 2176, -2128, 3446, -2035, 4266, 7536, -1042, -3678, 8411, -5183, -5466, 1460, 198, -2528, -3717, -1112, 1761, -1874, 1012, 1342, 5691, -283, -1871, 218, 5770, -995, -2971, -2494, 1365, -2210, 4983, 1310, 1581, 1532, -2059, -3672, -4337, -1483, 6319, 1064, -2611, -1118, 1631, -2746, -2236, -5280, -3955, 4607, 4343, -1052, -2059, 8744, -295, 10129, -1721, -2402, 3476, -3894, 2062, -5209, 355, 2580, -361, 6079, 7308, 7228, 3959, -8517, 1685, 4383, 987, 76, 1480, 7232, 6307, 6217, 3579, 460, 646, -514, -2691, 4826, -78, 4446, 8799, -8093, 2290, 1782, 3278, 5743, 7115, 1757, 9, 2641, -81, 2729, 6345, 3605, 3533, -8982, 644, -3557, -5790, 66, 10135, 1686, 178, -3538, 5342, -3742, -2707, 1550, 7411, -2011, 2751, -320, 4530, -246, -5272, -9606, 1697, 3451, 5611, -1386, -680, -3290, 1461, -2038, 1294, 159, 7651, -1660, -980, -5521, 7408, -6109, 4529, 196, 6615, -4167, -848, -5677, -1831, 1723, 4382, -934, -1637, 4628, 1344, 2463, 189, -2355, 2024, -6608, 1451, -2867, -1325, 8977, -636, 2230, -778, 999, -2096, -6920, -336, 3425, 201, 2345, 5310, 1127, 5925, -1397, -3413, -103, 829, 1148, 1051, 4328, -2733, 1887, 6477, -2430, 5954, 1953, -435, 963, 3690, 6688, 827, 6448, 2890, 145, 2259, -3301, 5430, -3880, 2533, 308, -8057, -365, 2728, -3720, -5793, -237, -579, -5895, -1475, -444, 2936, 1513, -193, 471, 5118, -2583, -8824, -6804, 938, 1161, -9, -1086, -815, -3885, 4196, -628, 2717, -140, 1899, -3856, -2862, -3601, 4192, -703, -1993, -279, 7516, -5201, -2819, 196, 207, -1718, -719, -6181, -9996, 3057, -1873, 8093, -334, 4879, 4377, -3823, -1058, -1237, -9797, -265, -322, 3655, -4392, -824, 4213, -7248, 191, -4653, 2183, 1778, 1009, 4136, 12387, -328, 7618, -2515, 2695, 5718, -3700, -2234, 1025, -1306, 3696, -1315, 5834, 3855, 6360, 4541, -1534, 7797, 4113, 893, 4821, 3301, 2161, -3820, -156, 1396, 1746, 2129, 2654, -295, 9717, -3845, -2536, -4625, -41, -3914, -6783, -344, 1305, -1923, 10360, -1211, -304, 3383, -2038, 1818, 556, -1911, -2912, -3247, 6282, -1095, 3584, 2389, 2168, 2272, 490, -9757, -5870, 2809, 5873, 3015, -2085, 3106, 10309, 1457, -2902, -8160, -3622, 2057, -4732, -5284, 302, 427, -7677, 5694, -4153, -1293, 2464, -7611, -595, -1779, -4691, 8041, -1567, 2066, -5017, -2419, -3255, -11179, 1779, -1545, -683, -1763, -1220, -1003, 6305, 167, 5898, 4090, 233, 4123, -3275, -6293, -470, 908, 7453, 536, 4485, 3521, 1567, 4606, -1973, 3486, 1659, 4556, 2988, -410, 3921, -5116, 3722, 3777, 2201, -477, 152, -1068, 5094, 2632, -1822, -2599, -1106, -4164, 3021, -2231, 34, -1185, 5232, -314, -1203, -1948, -4261, -2056, 3406, -2653, -2236, 48, 1831, 701, 2407, 3875, -2476, 2364, -651, -7287, -2016, 305, 4866, -4219, -4703, 1086, 6062, -3576, -5251, -6921, -3767, 1509, -1383, -4180, -4862, 5058, -3344, 5186, -6089, -2332, 2049, -1977, -2388, 3552, -2230, 4672, -3172, 3841, -2689, -1349, 5511, -4630, 2506, 3715, -1476, 172, 3933, 1960, 7400, 236, 3586, 4073, 1096, 2432, 2291, -1326, -2833, 1509, 8366, -6357, 3064, 3929, 2102, 3984, 1816, 277, -603, 3150, 3597, -1417, 6533, -947, -60, 3366, 4448, -863, -1779, 2606, 9501, -739, -6451, 3209, 5579, 3362, -3281, 1789, 4441, -1109, 5779, -719, 6510, -597, -831, -3573, -3725, 97, 38, 1321, 2902, -4909, 3076, -4719, -576, -1797, 5723, -8008, -817, 2904, 6147, -5546, 443, 2346, 869, -1516, -3938, -5850, -821, 705, 2067, -2703, 278, 8549, -4486, 4272, -2653, -3460, 3065, -6742, 1300, -2001, -2754, 6355, -1309, 10454, 1850, -957, 1492, -4845, 660, 139, 234, 1901, 4557, 6151, 9333, 2887, 5092, -1028, 1980, -917, 1397, 4311, -2699, 4041, 7156, -6295, 5188, 1354, 1754, 187, 5016, 6418, -393, 6400, 1673, -40, 5498, -1269, 4772, -4062, 2759, -1174, -7072, -246, 6238, -5283, -8115, 966, 5648, -3027, -4246, 2633, 922, -1886, 3454, -2301, 4510, -2484, -3427, -4562, 3182, 199, 1574, -202, 229, -2729, 4826, -2905, 2982, 2256, 2420, -2889, -3112, -981, 5853, 879, -1164, 1209, 5123, -2835, -2898, -4519, 168, -434, 2099, -3363, -1464, 3873, -4690, 1817, -3067, -1312, 1409, -11881, 3056, -2588, -577, 7591, 1720, 3562, -1156, 716, -1365, -5545, 2016, 249, -1193, 1140, 3354, -956, 5334, -4451, 3298, -228, 57, 301, -2795, -494, -1457, 1267, 7602, -2725, 2985, 5685, -1452, 2960, 1037, 3888, 5690, 1363, 6212, -1340, 2252, 1639, -25, 346, 3368, 3387, 1331, -1152, 5049, -1160, -5582, 2473, -5729, -3910, -2103, 928, 2859, 1186, 2906, -2635, -1114, -369, -5632, -4414, 3421, -1177, -2218, -602, 315, 1603, 3356, 739, -469, -630, -1099, -5950, -379, -6128, 4561, 1133, -2816, 585, 5217, -125, -2948, -5339, -2393, 1196, 2709, -2408, -4363, 3827, -1680, 3329, -583, 168, 3711, -5535, 124, 1286, -2493, 7301, -5416, 6213, -2236, -1106, 605, -4587, 105, -146, -1480, 3360, 1960, -1546, 5045, -5051, 3179, 1925, -355, 572, -571, 948, -354, -546, 3921, -516, 3282, 2337, 5387, 4198, 2450, 6497, 1348, 5426, 3305, -772, 1777, -2735, -2345, 1311, 3755, 1129, -5382, 575, 4603, 965, -4282, 4503, 508, -2306, 627, 928, 1309, 1036, 5999, -5155, 3098, -1779, -5604, -1828, 2227, -3467, -1384, 1957, 3611, 866, 3312, 2514, -1258, 779, -7088, -6090, -2511, 1693, 3078, -3529, -4878, 3232, 6129, 1810, -2094, -5737, 282, 1682, 4128, -4214, -1916, 7328, 1923, 1180, -4298, -5039, 2229, -6083, 2818, 926, -2354, 5892, -6377, 11463, 1199, 175, 2768, -4100, 5424, 1643, -4694, 7072, 3155, -1607, 4287, 4041, 5951, -168, 2793, 3, 2768, 4289, -2448, 5834, 3557, -3234, 5539, 1691, 805, 1642, 1666, 4694, 602, 4673, 1265, -2034, 1629, -1076, 624, -1291, 6277, -1038, -3326, -2547, 4671, -2854, -7302, 8564, 2851, -6468, 949, 1401, 5927, 187, 3566, -133, 4815, -851, -6384, -674, 1015, -5416, 1620, -5769, 5961, -189, 4045, -3094, 1015, 496, 180, -2390, -3914, -1164, 8340, -891, -2598, 387, 8068, -24, 1868, -6967, 1530, -3176, 1569, -4503, -2602, 630, -2310, 3225, -3177, -1967, 1999, -4727, 548, 178, -2730, 4233, 3618, 2066, -4580, -2535, 4322, -4496, 1751, 1690, -155, -6207, 4780, 115, 8829, 2057, 4977, 2257, 3875, 441, -4701, 607, -4622, 6200, 5534, -1445, 3736, 4497, 4764, 3856, -72, 5066, 5830, -1478, 2909, -3029, 3162, -6386, -176, -2349, 3706, 2328, 1872, -1264, 6907, -3087, -3874, 2030, 3646, 783, -2179, -4274, -2004, -2214, 538, -1932, 2883, 1068, -3447, 1974, -2697, -2878, -2737, -1588, -1244, -336, 5511, -450, 2129, 3309, 1945, -8389, -335, -2008, 2664, -2992, 2814, -1759, 2068, -2221, -1327, -4994, -3360, -2970, -1132, -2079, 448, -822, 173, 39, -1529, -2624, 2753, -6275, -3441, 2047, -5039, 5411, -4932, 1456, -2646, -189, 3766, -1317, 4596, -3454, -4736, 2659, 2791, -616, 4773, 1628, -314, -911, 1184, -1983, 595, -2607, -3813, 481, -1123, 1562, 1872, 2867, -2480, -2431, -3510, 1887, 5158, -1259, 9034, -2110, -3062, -1966, 50, 6744, 5307, 4794, -1280, -2176, 3740, -1003, -4546, 5882, 5175, -566, 82, 1039, 2297, 5087, -2650, -2278, -3998, 1366, -3, -2758, -453, -1893, -2360, -2140, 1698, 2765, -78, -3743, 781, 2088, -5180, -5596, -2006, 3506, 5999, -558, -2478, -2667, -3149, 1687, -503, -3721, -1960, -4383, -1582, -2217, -3272, 3108, 1869, -443, 612, 2349, 2895, -3044, 4952, -3362, -6404, 4930, -2257, -2611, -2364, -842, -4851, -3547, 443, 3088, 3526, -2187, 4855, -5667, 5224, -2678, 1728, -6012, 827, -1157, 3018, 2073, -1646, 4600, 7175, 3083, 3436, 5314, 9586, -3185, 307, 6523, 2546, 1538, 8254, -1239, -4027, -8734, 7327, 1250, 6501, -4359, -3992, 41, 5198, -3500, -4235, -405, -663, -1346, 1758, 1159, 539, 2567, 3080, -1031, -4508, 38, -6289, -7684, 2499, -1942, 1756, -3706, -1896, 3344, 6396, 1695, 2191, 1290, -1932, -2753, -3758, -2413, 4550, -2042, -6208, 897, 5774, -1720, 1717, -4890, -3293, 4303, 2576, -2120, 4393, 949, -2188, 4054, -6962, -2423, -1555, -2920, -95, -93, 1986, 614, -589, 7518, 1778, 2717, 1231, -3483, 2459, 1380, -916, 1012, 210, 1724, 2474, 968, 2384, 7865, 852, -2157, -3332, -358, -3813, 997, 3310, -2532, 2881, 542, -1872, 7910, 2545, 2776, 197, 3103, 3677, 2691, 1014, 820, -2772, -900, 3652, 2936, -978, -713, 4401, -950, -2527, 5079, 256, 857, -3983, -924, 3448, -1806, 1022, -1379, 2239, -1827, -2672, -3495, 1395, -3437, -3533, 895, 2549, 170, 2103, -1864, -1413, 1706, -641, -7449, -1025, -1818, 4427, 283, 2379, 2915, 2897, -1837, -830, -4016, 665, -7101, 4327, 85, -5691, 2931, 5849, 32, 1280, 1582, 7116, -5294, 1133, -3273, -7605, 5465, -4874, 418, 98, -953, 3453, -2038, 3322, -2425, -3149, -475, 4278, -1175, 9585, -1578, -214, -873, 3644, -3395, 671, 2890, -2072, -546, 2435, 318, 4744, 6228, 1880, -936, 1628, 6470, 981, -2353, 7567, -4867, 2392, -4731, 2902, -2445, 3135, 3118, -6431, -2639, 7595, -5726, -4830, 2405, 492, -5313, -279, -3338, 5076, 3224, 4251, -29, -1087, 779, -4590, -3663, -1235, -1399, -1237, -2570, 948, 1298, 4846, -2204, 2421, 1537, -3640, -6650, -5424, 2191, 7633, -2097, -3264, -1850, 4740, 2082, 79, -5274, -4127, -5509, -1231, -6442, -2517, 7007, -722, 3220, 222, -1417, 3174, -4871, 6748, -6104, -4100, 7105, 654, 2815, -4921, -1997, -2906, -3284, 2044, 3899, 5359, -1398, 4756, -2936, 7550, 2707, 859, -445, -480, 1108, -870, 2756, -1318, 3571, 10836, -5805, 5062, 3234, 977, 2733, 3358, 4947, 6482, 2451, 2104, -2944, 3641, -1714, 4702, -644, 6722, -2508, -6380, 2607, 6890, -5896, -6403, 5559, 5250, -945, -1870, -133, 2286, 3592, -1215, 2680, -533, 625, -5120, -4022, -464, -2679, -1433, -85, -66, -2183, 6437, -2355, 3121, 2904, 1769, -6713, -5809, -4315, 3825, -1454, -1922, 236, 775, -864, -774, 1067, -2783, -4627, 2617, -9673, -4938, 6291, -2807, 3605, -2442, 292, -1551, -2732, 164, -3528, -7172, 4848, 1072, -1133, -4429, -1150, -3193, -7225, 2209, 1588, -491, 2370, 2359, -7071, 2984, 1942, 2218, -1388, 993, 4849, -1829, -6797, -3468, -5740, 11379, 2125, 51, -700, 3657, -3005, 241, 7756, 5729, 3245, 7057, -2871, -1749, -3157, 9470, 4109, 2420, -164, 2286, -1407, -437, -4031, -6427, 4350, 2191, -413, 6018, 1859, 1748, 2232, -2455, -3083, -1942, 2187, -923, -197, -1940, -2802, 747, -2765, 2151, 2983, 1613, 1542, 2527, -2238, 4359, -8430, -5361, 944, 6408, -866, -847, 2397, 4717, -1516, 780, 43, -3152, -5115, 722, -10470, -2309, 11056, -6136, 2009, -3045, -7585, 4450, -4513, 4561, 963, -6930, 9777, 1, 2248, -5258, 1734, -1994, -4103, 855, 317, 3643, 218, 3418, -6203, 2960, -369, 5, -1814, 1830, 4054, -1357, -5256, 732, -9724, 5313, 1653, -1037, -166, -2512, 4427, 1077, 4935, 9437, 3543, 10427, -2562, -3733, -732, 8476, 5281, 5238, -590, -3737, 101, 2218, -5106, -6802, 2871, 5862, -3440, 4508, 6321, -1899, 7539, -825, -1841, -5900, 3568, -935, -797, -1453, -2712, -5685, -234, 5012, 8545, 2603, -1893, 4097, 3707, 777, -6076, -5623, 5857, 6038, 605, 1739, 3946, -1313, 1886, -2812, -514, -6014, -2788, -306, -5180, -4127, 3985, 2506, 2169, 2838, -3799, 6305, -6191, 2395, 4440, -3080, 7600, 2393, 6496, -1809, -327, -1985, -6168, -2378, 625, -2499, -2955, 5853, -2880, 6171, -898, 2773, -1785, 4547, -1304, -390, -57, -3012, 2208, 4307, -558, 2675, 3873, 4432, 300, -206, 6715, 7280, -1754, 11595, -1554, 2077, -3208, 5162, 3301, 3395, -141, -5046, 1576, 1673, -7363, -4642, 2494, 3593, -492, 737, 982, -4692, 4230, 454, -4397, -1799, 4090, -8492, 3653, 1112, -3575, -2973, 579, -2488, 4831, 7401, -279, 2179, -1016, 957, -3714, -1715, -5223, 5393, -856, 971, 3445, 650, -1778, -856, -3850, -5260, -4822, -260, -3307, -2220, -462, -4049, -1609, -3022, 6448, 5320, -6511, -990, 2001, 897, 3240, 7514, 6149, -3786, -7790, 1205, 454, 5115, 2398, -5290, -2744, -228, -348, 7142, -5423, 9459, -718, 6686, 1609, -169, -718, -1838, 7659, 2891, 1676, 6456, 6918, 4986, 4564, 6541, 4874, 3757, -1203, 3535, 2228, 5274, -5973, -3963, -4460, 5138, 2434, 974, -488, 4305, -3195, -7267, 2314, -3065, 2622, 2976, -26, -2054, 3354, 8657, -3235, 1970, 5830, -8613, 7800, -1548, -6718, 1738, -523, -527, 2434, 10303, 795, 4885, -578, -1282, -3599, -710, -3182, 6621, 637, 420, 2423, 1537, -467, 750, -8928, -5500, -5561, -966, -609, -3656, 1516, 3132, 3234, 1092, 831, -92, -4757, 383, -4749, -628, 193, -176, 5576, -2447, -2138, 3329, -5896, 2493, 2801, -3759, -3488, 4713, 3437, 10793, -1526, 1862, -3487, 3539, -1530, 1053, 2519, -1106, 7823, 8747, -1893, 5146, 896, 5533, 526, 3525, 6435, 4949, 1055, 1570, -5465, 3506, -6529, 5604, -6301, 5364, 5023, -7738, -1461, 10751, -3808, -5069, -184, 84, -1457, -4095, 542, -1642, -722, 1304, -4896, 9108, 281, -5758, -2402, 450, -1704, 1328, -1159, -2514, -3687, 3534, 1503, 4027, -2346, -1074, -3411, 769, -7537, 4332, 1167, -4831, -1939, 646, -4158, 595, -7329, -665, -1174, 1533, -7926, -2034, 3284, -2581, 3572, -3373, -1773, 29, -105, -3586, 1186, -2908, 1242, 2568, 5029, -70, -2214, -3641, -7346, -523, 3606, -6324, -246, 1971, -6467, 731, 391, 10302, 4479, 4723, -986, -5278, -4393, -2773, 1842, 1574, -538, 4151, 78, -364, 1185, -1487, 5552, 4385, -1354, 5697, -2296, -1432, -1072, 2985, 671, 4283, 1459, 6546, -3059, 1121, -3649, -5457, 5063, -949, 1190, 2508, 3703, -289, 2131, -1766, -6756, -943, 1853, -4530, -585, -559, -4207, -1694, -2103, 773, 2442, 3545, 513, 2479, -1561, 1693, -4753, -5184, 3494, 6722, -88, -926, 2587, 412, -2289, -1318, -3717, -2370, 1602, -496, -5567, -2045, 171, -297, 2437, -2793, -5756, 3501, -3452, 369, 1641, -1028, 14871, -5381, -2641, 44, 2143, 2071, -5025, 501, 3020, -1522, -829, 5201, 319, 3999, 2510, 2571, 5408, 2382, -2625, 4073, 286, -3674, -2267, 7604, -1013, 2541, 4911, -6946, 2744, -585, 2494, -3539, 1611, 3609, -642, -2541, -1566, 1052, 4625, 4321, -693, -4670, 1032, 1062, 1101, -3935, 4869, 174, -3713, 3814, -4659, 4445, 2228, 3213, -1326, 3043, -2343, -2005, -1140, 185, -1485, 1454, -3174, 3599, 1179, 2451, -3068, -1700, 2153, 2037, -6676, -3503, 5943, 6765, -6364, -6053, -1217, 1767, 314, 594, -2539, -2267, -110, 457, -1957, -5132, 782, -1928, 6408, -1110, -3389, 3948, -5671, -2770, 3281, -4171, 7872, -4730, 6830, -6451, -1676, 4219, -2260, 3246, -1055, -3744, 4556, 2708, 3969, 7234, -794, 5807, -430, -984, 3708, -1936, 1430, 1936, 2548, 3001, 2471, 3506, 1645, 3231, 3687, 2226, 3344, 3755, -120, 5238, -4203, 8013, -3751, -2154, 6610, 3979, 5503, 1975, -2624, 6334, -2610, -6643, 7748, 2136, -2463, 200, 3737, -357, 1353, 5607, -6862, 3394, -342, 1883, 3207, 751, -1950, -4394, 3912, 3776, 971, 3549, -43, 78, 1498, -5344, -8151, 1275, 207, 5482, -2897, -5921, 4428, 1432, 4048, -2640, -8972, -2813, 146, -1482, -5270, -331, 7527, -4730, 722, -4455, -780, -159, -9737, 168, -295, -481, 2873, -2473, 5150, -22, 2027, 2727, -5530, 2022, 2462, -1826, 4758, 3766, -1779, 1782, 2837, 4380, -2783, -241, -928, -1715, 299, 361, 1758, 1198, -3787, 2517, -1705, 4346, 900, 1090, 3180, 6345, 2401, 4399, -1961, -613, -1436, 1291, -1929, 3377, 2763, -4110, 380, 2136, -1810, -1204, 4035, 1524, 3238, -3959, 5856, 6978, 253, 1074, -6811, 2830, -1324, -6215, 1298, -3152, 824, 1640, -2579, -3988, 5668, -2686, -3700, 1078, -820, 205, -5234, -228, -3283, 5265, -3433, -1589, 1599, 764, 1559, 2474, -7631, 1143, -358, 1173, -8023, -6116, 5263, -677, 1752, -1763, -5093, 5362, -14258, -77, 6680, -1563, 10433, -6637, 872, -433, -5256, 5678, -2555, 6014, 892, -3532, -14, 2905, 2051, 5661, 617, 3001, 187, -2148, -645, -1098, 5252, -79, 617, 689, -2661, 5535, 1646, 5786, 3392, 2305, -2528, 7768, 4025, 6509, -8377, 1799, 2194, -443, 6921, 2990, 4834, 239, -3342, 11539, -925, -6704, 2238, 3641, 1763, -4565, 8033, 4607, 1522, 5501, -3500, 1480, 2981, -6496, 737, -3464, -3463, 6881, 3800, 225, 1091, -324, -1564, 5267, -1447, -1460, -4022, 697, -1984, 3121, -1651, -3332, -1807, -2414, 4428, -1143, -8261, -78, -1260, 1094, -3436, -2638, 1018, -208, 1597, -1829, 2265, 3495, -13443, 1066, -1171, -5856, 3810, 473, 6266, -1022, -3844, -2263, -2067, 1859, 1221, -1373, -1489, 6297, 2611, 6486, 2965, 1879, -5075, 3302, -2109, -584, 2868, -3454, 5274, 2912, -5258, 7625, 4105, 1305, 5796, 6295, 6746, 1150, 3238, 7845, 641, 3597, -3322, 1742, -2888, 4732, 3695, -3881, -5002, 8148, -2319, -8182, 5560, 2616, -2384, -3074, -1170, 6734, 792, 2791, -2112, 2688, 413, -5474, -267, 4277, -3145, 3026, -634, 2159, -1057, 5299, -5473, -2241, 821, 72, -1960, -331, -2936, 4456, -3076, -790, 1674, -414, 378, 2190, -7516, -895, 1062, 2797, -1947, 53, 2763, -15, -1613, -5436, 3360, 2265, -12186, -739, -2541, 3236, 288, 3601, 5302, 372, 6, 663, -3454, 2835, 4533, 1535, 202, 2272, 2327, 5597, 1352, 7826, -2540, 2525, 709, 1595, -890, -4445, 2850, 2179, -2515, 2769, 2013, 624, 1999, 1688, 3915, 225, 83, 3029, 1164, -1007, -1831, 1692, -3540, 7509, 2470, -2755, 3085, 1634, -2495, -7976, 3741, -607, 432, -101, -816, 4897, 1289, 4090, -1639, 2817, -354, -7139, 4910, -772, -3884, 1749, -2634, -1359, -1119, 4439, -4774, -378, -8, -392, -5053, -1391, -2555, 3754, -481, -1658, 4074, 3101, -4219, 63, -8614, -2561, -2352, -2496, -1231, -1124, -1799, 1340, 2277, -3393, -2260, 2179, -7295, 3013, 430, 3044, 9430, -1228, 2227, -3430, -849, 53, -6897, 1330, -2321, 2789, -1723, 4279, 2346, 7401, -4156, 4472, 1242, -794, 24, -761, 772, -3664, 2781, 6157, -705, 3471, 6207, 2832, 7409, 1454, 5578, 577, 393, 8167, 1900, 1729, 1149, 138, 1181, 2100, -2186, -7450, 5492, 1458, -1096, -2581, 2462, -1304, 4927, -1108, 1091, 1295, 1189, 9149, -5972, 629, 3333, -9071, -5058, 1420, 533, -2685, -2704, -2362, 4583, 2417, 780, -2858, -746, -2654, -7128, -4677, -7372, 4217, -3358, -3416, 4937, 3444, -352, -4670, -6220, 1949, 2705, 5159, -546, 748, 1357, -1047, 2693, -3889, -1689, 4817, -5442, 2170, -4373, -647, 3728, 2769, 1752, -611, -4307, -2297, -5002, 1090, 3597, -1602, 1273, 3412, -2644, 6746, -1565, 4505, 1302, 2083, 692, 620, 337, -3857, 647, 3727, 197, 4088, 3473, 1005, 3697, 939, 5791, 1234, -1764, 6385, 1048, -1709, -4374, 23, -568, 3606, 5114, 5827, -2541, 95, -5728, -5204, 3392, 453, 2308, 740, -1766, -2035, 3297, 315, -325, -868, 254, -1997, -3406, 1582, -622, -3976, -1196, 2562, 2582, 4649, 4100, 1156, 2274, -3868, -6495, -2700, -2609, 4589, 472, -1992, 1216, 2129, -1113, -2739, -4203, -3195, -737, 422, -5976, -3369, 3256, -4890, -1428, -248, -320, 3383, -4135, 1781, 433, -4675, 10355, -2982, 4818, -3529, -4758, -1736, -3321, 2181, -1861, -2598, -1804, 1089, -2363, 6468, -2571, 3574, 1207, 3014, -1794, 1381, 1151, -3666, 1859, 2504, -216, 6044, 2798, 325, -1569, 4034, 5870, 982, -934, 8308, 889, -1827, -5971, 622, 3930, 3565, 6665, -3378, -2456, -649, -5995, -4575, 5006, 1375, -4413, 1205, -993, -5506, 1691, 4404, -5104, -622, -1788, -6044, 4805, 2158, -304, -940, -491, -52, 1080, 4845, 836, 133, 4260, -7000, -5491, -4938, 3025, 3227, -1233, -1703, 3754, 3307, -446, -2625, -6048, -2831, -746, 84, -5095, -4677, 2026, -2461, 1820, -3844, -1731, 619, -3487, 1170, -190, 539, 1938, 1126, 7614, -2626, -1396, 4875, -3333, 2752, -549, -7110, 1310, 170, 3563, 3927, -2191, 2886, 6079, 4356, 855, -1015, 1421, -1458, 4584, -1167, -439, 4421, 5593, 1679, 1515, 6043, 5089, -501, -195, 4218, -498, 2444, -4293, -5419, 242, 5402, 5684, 2142, -3015, 4113, -1326, -5325, 7531, 357, -2583, 2560, -592, 1070, 455, 4090, -5677, 255, -1766, -3343, 4452, -1768, -2550, -1982, -2306, 3994, 6353, 3902, 29, -1558, -405, -2976, -8949, -862, 4177, 8256, -21, -1386, 4149, 1760, 2099, -945, -8937, -2667, -754, 1963, -2903, 2671, 2846, 283, 686, -2623, -4250, 1687, -2594, -1089, -2321, -4027, 4826, 973, 2877, -2315, -2674, -2334, -2119, 445, 1642, -4512, -187, 2796, -620, 2750, 95, 7429, 1138, 4687, -2460, -807, -3471, -2426, -2330, 4167, 537, 2244, 2890, 305, -243, -1367, 3354, 5367, -467, 5263, -3371, 831, -1234, 1755, 2285, 1924, 1552, -1601, -1384, -950, -7289, -4907, 4699, -227, -2494, 767, 1571, 672, 4372, -2721, -3007, -1034, 2931, -2640, -1685, -1848, -2619, -3547, 1434, -3744, 1986, 5040, -1914, 2229, 1440, -4669, -1874, -1898, 5017, 4346, -115, -5818, 135, -3553, 153, -722, -5258, -4272, -2431, 1677, -2275, -6999, 2902, 1520, 2885, -2567, -484, 6644, -9480, 464, 2493, -301, 4361, -3687, 4602, -883, 1062, 4099, -4579, 4439, 3185, 2030, -2679, 6235, 3459, 8295, -3935, 3371, 2239, 823, -2994, 1171, -2729, -4648, 3037, 3460, -1389, 2814, 3149, 2014, 742, 1227, 4860, -3643, -152, 8729, -2099, -2397, -1895, 1356, -1187, 6682, -2103, -7627, 3248, 3922, -1720, -5159, 3007, 2086, 2408, -1602, -219, 4603, 1104, 4814, -2953, 4665, -206, -7175, -1098, -1976, -1565, 3533, -945, -1371, -1546, 5233, -5801, -386, -2983, -3836, -6428, -1831, -4512, 7430, -2529, 237, 4435, 3213, -305, -769, -3578, 716, -3386, 1656, -1302, -4016, 3788, -1101, 1324, 632, 424, 3391, -9336, 865, -3384, -3378, 8631, -4071, 2026, -1035, -3573, -2859, -664, 4299, 974, 1756, -2654, 7156, -839, 6780, 2050, 3090, -3986, -209, -1651, -1688, -1188, -878, 761, 6959, -1389, 5784, 2080, 4515, 8623, 7427, 6619, 625, 3038, 5895, -1452, -33, -353, 1389, -5023, 3166, 1235, -6322, -2353, 388, -3556, -6745, 5852, -2719, -5746, -984, -3095, 3798, -619, 5948, -10480, 5998, 1051, -8788, 382, -358, -2481, 2270, -1046, -4314, -584, 4563, -2632, 682, 141, -3454, -5667, -6018, -628, 4395, -2210, -4510, 4135, 354, 571, 600, -6888, -78, -2131, 1062, -3375, -1189, 975, -351, 8933, 632, 2467, 391, -4455, 2347, -5654, -6478, 4830, -275, 6485, -4411, -4070, -1568, -1876, 4829, -544, 264, -1485, 2242, -563, 9052, -295, 4522, -1537, 84, 416, -2773, 1534, -2933, 2823, 6600, -4099, 9103, 4714, 2201, 3833, 4607, 6162, 3549, -1723, 9729, 1885, 3910, -5510, -2196, 85, 1341, 5111, 2569, -2493, 3497, -3560, -3423, 2014, -4000, -3844, -1979, 1549, -4228, 188, 5177, -2495, -1825, 1527, -5649, -1750, 6047, 399, -5280, -2919, -410, 995, 5725, 3949, -1142, 1699, -1912, -6450, -6747, -7614, 2617, 1003, -2717, -145, -1173, -141, -5148, -5740, -4835, -206, 2148, -4763, 530, 5542, -1675, -1121, -2236, -2737, 3598, 42, 9345, -4319, -5393, 8897, -4466, 102, 905, 714, -3618, -8505, 2382, 879, 1065, -815, 4811, -6114, 4772, -1467, -651, -1143, 380, -1674, 2985, 2467, -3387, -7096, 10711, -723, 2199, 535, -1186, 500, 4652, 4193, 3751, 2698, 7037, -47, -3311, -2598, 6232, 1004, 3852, -1249, -8920, 2651, 3598, -3947, -6586, 6282, 2560, 2344, 2762, -811, 1915, 4864, 68, -1641, -1366, 1413, -2323, -4089, 212, 1271, -2320, -3248, 2934, 976, 4739, -3451, 452, -255, -1701, -4928, -5309, -2613, 6371, -1599, -2628, 1810, 3486, 1239, -2146, -682, -3001, -4356, -3506, -6134, -2508, -838, -3542, 8774, -2843, -2372, 5533, -12528, 4353, -3495, -1494, 4835, -3401, -1674, -2208, -535, 2481, -6645, 2537, -2927, -1559, 2358, 107, 2305, 6530, 1019, 1767, 2119, 1665, 4931, -2334, -2372, -1830, 380, 7595, 110, 4881, 4669, -1596, 120, 1510, 5408, -371, 3335, 5710, 267, 7039, -2553, 761, 5431, 4159, 4844, -4043, 1711, 5147, 2780, -5004, 400, -3351, -5414, -1538, -559, 2638, 1546, 7583, 712, -4247, -1109, -1917, -4183, 288, -3651, -4065, 1323, 7636, 1325, 1965, 1321, -1894, 4971, -2638, -8958, -1646, 3458, 6611, -2255, -2165, 2787, 5695, -663, -4657, -3889, -5190, 2455, 5229, -5996, -5055, 3413, -4296, 8122, 1711, -1191, 6011, -13292, 6566, -6010, -5361, 2133, -4084, -2100, 7840, 500, -698, -2560, 5500, 264, 4235, -1477, 6573, 2821, 9783, -5756, 6318, -3134, -2005, -3133, -10, 1218, -3239, -2970, 10165, -6300, 5991, 3981, 4733, -1730, 2913, 4968, 228, 2475, 5962, -341, 2837, -199, 3642, -2912, 1017, 3060, -10892, -3906, 6223, -1232, -3698, -4471, -7114, -3609, -5044, -1958, 6216, -2487, 4044, -3575, 3075, 4639, -1777, -3258, 696, -2296, 1357, -4155, -3410, -883, 5229, -5355, 5982, -1050, -3271, -3300, -3691, -3001, 1955, -2110, -8120, -3378, 7465, -714, 1399, -4798, 43, 927, -207, -4541, -2338, 3826, -2325, -1100, -1533, -3165, 2736, -12372, 3780, -2088, -1062, -118, -3332, 7709, -4439, -2631, 2109, -8268, 642, 462, -1601, -1502, 2323, 4229, 3018, 1843, 4259, 555, 4451, -77, -1192, 355, -19, 4531, 5212, -5538, 2492, 2595, 1338, 5931, 3263, 3822, 7573, 2636, 2921, -2672, -670, 600, 754, -2104, 4284, -2125, -3873, 2668, 3908, -621, -8543, 2868, 4850, -5707, 14, 1492, 7354, -241, 2379, -6729, 44, 3603, -5768, 724, -1606, -3080, 2927, -1666, 802, -2687, 1752, -5273, -4388, 226, -2138, -1394, 1796, 55, 5460, -3174, -5140, 1632, -1149, 2593, 3096, -7426, -1408, -233, -2413, -4508, 3528, 1304, 135, 7040, -1383, 2747, 141, -5631, 2793, 1094, -3644, 3621, 1793, 3287, -2305, 2106, -4049, -7884, 5322, 281, 491, 1781, 1461, 2361, 3844, 2, 3857, 2768, 1420, 5292, -1951, -2336, -120, -1047, 8313, 1985, 3714, -433, 1241, -205, 654, 5034, 785, 2584, 3966, 3951, 846, -5624, 3572, 832, 3382, 590, -2257, 730, 4626, -3392, -5248, 5677, 2884, -1743, 1094, -2261, -208, 980, 5429, 1324, 2675, 341, -4470, -486, 2004, -4272, -1638, -1107, 5326, 3193, 3407, 1814, -28, 3002, -192, -7335, -475, 596, 7078, 1734, -2102, 972, 2884, -431, -3433, -6808, -4769, 2306, 1609, -4634, -481, 1182, -1212, 2323, -8303, -7843, 1203, -5038, -6553, 1023, -7241, 1170, -1634, 5287, -5079, -477, 1677, -5952, 4480, -449, -5277, 4521, 2002, -241, 5529, 4348, -214, 4638, 4361, 2123, -2007, -2022, -4683, 1794, 2767, -452, 4774, 244, -281, 4827, 1019, 3388, 972, 1024, 2603, -5269, -2857, -2395, -428, 4220, 7449, 1412, 6782, -6927, 3426, -378, -9585, 5550, 2778, 2, -3858, 965, 1723, 1990, -363, -3396, 3694, 19, 1902, -4048, -1317, -5066, -2640, -4740, 4328, -1575, 4127, -2919, 1417, 1485, -3717, -6682, 1459, 924, 6274, 1594, 3305, 1911, -11, -2408, -1999, -6407, -5044, 2491, 5808, -271, 3743, 1372, 1947, 4399, -6776, -5591, 5053, -9918, 1746, -5502, 655, 6032, -992, 5661, 5069, 1191, 5065, -2965, -865, 7485, 1405, 5312, 7970, 8491, 3373, 2813, 2843, -994, 2128, -5702, 6257, 5652, -4342, 4118, 9699, -5432, 3247, 1550, -2815, 2323, 3892, 3154, -4392, 4068, -960, -493, 1390, -1024, 5459, -2056, 3811, -961, -12827, -2815, 1402, -4138, -7263, -602, -707, -4419, -4031, 1106, 5863, -127, -1814, 701, 9077, -1769, -2018, -5876, -2301, -5475, -1301, -1294, -6146, -4442, 5083, -4606, 272, 740, 1298, -2426, -2758, -560, 3957, -1116, -7865, -3434, 2200, -2110, 549, -4447, -459, 431, 1356, -7338, -2637, 838, -2793, 4006, -4178, 229, 2725, -9580, -732, 1851, -920, 7304, 2912, 7002, -3322, -119, 1080, -1983, -116, 4118, -465, 804, 4323, 1655, 4123, -496, 3267, 414, 882, -259, -2944, -2533, -2590, 3571, 368, -226, 4096, 1819, -1019, 2532, 3155, 5795, 2561, 3761, 8203, -208, -487, -2057, 2175, 2777, 4414, 4405, -4364, -1003, 2508, -734, -5902, 6297, 549, 3750, -777, 4268, 2530, 827, 441, -6172, 5189, -570, -4094, 2682, 174, -3041, -3279, 2251, -986, 1862, 3508, -2005, -3063, -2576, -2562, -8802, -1141, -3617, 3727, -215, -1388, 2301, -1569, 688, -1947, -4220, -798, 1382, 2338, -4428, -55, 6106, -3161, 3450, -3832, -4484, -420, -5460, -2514, 539, 1760, 6904, -3158, 7393, -3857, 474, 167, -5475, 4855, 3241, -5753, 3256, 331, 1627, 3613, 3667, 3817, 527, 1437, 1402, -1279, -4834, -1581, -2740, 7374, -733, 2560, 3391, -865, 4381, 924, 3581, 2831, 3959, 2297, -2579, 2790, -1430, 3305, 1795, 2266, 129, 669, 387, 2601, -1349, -7720, 4763, -1263, -1381, -890, 1965, 3724, -276, 220, -3142, 2298, -135, -3268, -903, -991, -1340, 540, -146, 2196, -1046, 3188, -2492, -177, 1980, 5093, -7372, -2310, 731, 7483, 1637, -1151, 2478, -252, -3559, -1966, -9445, -1765, 3718, -1461, 4626, -540, -3406, -2124, 403, -6696, -1822, 0, -11759, -2026, -4679, 4052, 6556, -1577, 2098, 1999, -129, 2611, 52, 4641, 77, -3973, 2758, -560, 9838, 4421, 4017, 4920, -902, 2264, -1238, 3496, 2512, -2135, 280, 6317, -5768, 4748, 3110, -3228, 9046, 2671, 1977, -2558, -1276, -7, -431, -1040, 1725, -28, -7428, -221, 4197, -5628, -2326, -1317, -2073, -6930, 3984, -8539, -3806, -5981, -4501, 8692, -328, 8307, -2510, 9983, -5167, -6722, 1684, -1525, -360, -47, 1331, -4199, -5964, 4547, -6518, -5128, 7288, -4911, -2763, 30, 3295, 4713, -4066, -8574, -852, 4345, -3400, 2595, -11914, -2415, 344, -3563, -3702, -4245, 2291, -2742, 3766, 1380, -3584, 3969, -8203, -1245, -1868, -1495, 5875, -4024, 2927, -3972, -5162, 4372, -4064, 438, 127, -5495, -3419, 5522, 8472, 6014, -567, 6594, 4163, 3551, 123, -2788, -48, -4079, 3776, 2533, -1186, 2035, 5256, 843, -3450, -567, 5896, 3439, -869, 7432, -2014, -3380, 1029, -4693, 3792, 2258, 627, -2752, 1381, 4442, 282, -5504, -386, 1876, -3135, 916, -1758, 3331, 2662, 4754, -4614, -593, -673, -366, -594, -1668, 748, -1716, 2832, 458, 1551, 3330, -2008, 316, -908, -5467, -5378, -404, 5603, 5689, -3299, -2894, -237, -846, 2016, -368, -5431, -2151, -3968, -5995, -10170, -2628, 7095, -8917, 8554, -3992, -9183, 7308, -13062, 4564, 1369, -2364, 6677, -6557, 3452, -4751, 550, 4794, -11028, 1045, -88, 3315, 2827, 914, 3308, 3256, 1730, 4491, 1490, -3664, 12, -3176, -5295, 224, -442, 6890, -5238, 2757, 1611, -7, 4388, 1576, 4351, 4526, 6140, 7004, 190, 2125, 1023, 723, 3420, 3328, -3742, -8795, 3126, 4168, 1301, -3308, -68, 3024, 3245, -3811, 8548, 5472, -1762, 7623, -9238, 420, -771, -7162, -3608, 781, -1823, -1326, 2449, 1740, 340, 1177, -3926, -1464, -382, -3287, -9110, -3456, -5495, 3179, -4992, -7119, 2871, -400, 4747, -4827, -4553, 1029, 4358, 4363, -1595, 783, 2737, -9379, 4918, -2755, -4661, 1431, -4638, 3123, -3594, 622, 9057, -3073, 6086, 380, 1243, 1365, -4056, 826, 311, 3778, -2751, 6938, 1648, 4102, 4, 5897, 952, -1209, 2809, -1226, 2277, -545, -2705, 7789, -1678, 1153, 971, -2912, 7200, 3840, 4704, 999, 6007, 4277, -2158, 542, 3048, 3012, -475, 3770, -442, -5285, -1206, 3507, 701, -5456, 2434, 3281, -4144, 457, -456, 1649, 48, 1443, -3712, 6398, -533, -580, -293, -925, -821, -4379, -322, 2359, -652, 5096, 485, -1119, 1689, -261, -6821, -2753, 3336, 5505, -3785, -1898, 4305, 2288, 1945, -1739, -669, -1878, 4345, -260, -4453, 427, -1345, -4260, 4565, -9621, -1218, 2727, -6488, -3488, 4170, -532, 7056, 3573, 752, -1373, -1009, 1884, -1993, 3681, 1639, 3537, 1679, 463, -104, 8584, 408, 8278, 2683, 2045, 3071, 362, -2004, -3237, 719, 5217, 2623, 3535, 2736, 1977, 3262, 729, 4986, -668, 4784, 7360, 3264, 251, -1687, 3396, 3438, 2680, -958, -53, 910, 754, 530, -8152, 1780, 1780, 706, -2653, -2564, 548, -414, 6606, 113, 5574, -1639, -189, -1245, 2820, -3708, -3948, 784, 302, 1190, 5073, 49, -173, 1219, 2957, -12653, -1550, 3167, 6274, -1725, -3927, 3592, 2899, -476, -3449, -10166, -2956, 3405, 2599, -3025, 1057, 1993, 1584, 3032, -6533, -5152, 2022, -11382, 5459, -411, -5001, 34, -404, 6975, 135, -3171, 160, -9382, 7310, 1037, -3616, 286, 2264, 225, 6683, -3211, 6334, 4363, 5764, -1393, 2728, -2372, -4205, 1702, 1948, -1878, 3324, -261, 2000, 3334, -902, 5025, 4193, -949, 9734, 538, -811, -4335, -17, 339, 3062, -961, -650, -1468, 1876, -3808, -7769, 10889, 489, 7835, -2479, -929, 565, 3045, 3502, 583, 1695, -1243, -2057, -1944, -2995, 705, -1004, -3419, 2351, 3646, 3853, -870, -176, -4888, -7556, -4538, -1285, -9658, 5297, 3166, 2027, 7366, 2835, -2530, -3063, -6936, -268, -3673, -404, -5838, -5268, 5646, -1701, 4863, -3453, -3951, 3158, -5456, 2029, 2222, -3872, 10419, 3346, 3042, -6304, -2528, 89, -2023, -809, -908, 146, 1326, 844, -1470, 5687, -1223, 3104, 1103, 1923, 1253, -274, -1414, 146, -986, 1407, 3833, 3244, 5773, 2512, 6258, -420, 3924, 9530, 1785, 7791, -2394, -1632, -4035, 162, 4816, 588, 3981, 1493, -3588, 2152, -1838, -6190, 4261, 3375, 1911, 5210, 3934, -2672, 5420, 3735, -1746, -1453, 1674, -1323, 1417, 2830, 1567, -4016, 1883, 3292, 3655, 3379, 6718, 743, 3991, -4314, -8009, -105, 3162, 2865, -2342, -2320, 5587, -4034, -743, -2241, -3136, -4101, -2719, -537, -5098, -5714, 2490, -1105, 6828, -4871, -1565, 5168, -4757, 959, -1648, 82, 11721, 10, 2551, -3705, 893, 5432, -4806, 3270, 1701, -1925, 2840, 3748, 6049, 8042, -224, -1697, 1665, 1475, 2192, 8, -1606, -2101, 3876, 8451, -4140, 3262, 1776, -1765, 6932, 3223, 3610, -966, -703, 6508, -3589, 28, 4313, 3156, 1567, 3678, 2448, -11137, -1112, 3187, -2451, -4050, 5643, -752, 14, -2397, 1976, 1902, 3519, 7944, -6203, 4164, 1959, -6406, 743, -1139, -1424, -1361, 2540, -2215, 2786, 2621, -6503, -732, 1293, -276, -8129, -3765, -4475, 7691, -1803, 627, 2900, 2286, 2107, -574, -7650, -1036, -4009, -4347, -5510, -1745, -173, -2061, -708, -2583, -404, 2694, -5560, 1663, 971, 694, 7337, 51, 3517, -4537, -1099, -902, -6527, 2647, 1351, -6686, -2249, 3062, -3149, 1054, -4315, 8137, 3962, 1101, -402, -3297, -2722, -1942, 4214, 2588, 3715, 2411, 5464, -825, 8336, -244, 2919, 12030, -3119, 11844, -3910, -4452, -1939, -206, 5856, 3819, 2946, -56, -98, 1170, -2912, -4928, 6288, -353, 8149, 943, 2399, -3572, 4623, 860, -8468, 797, 4907, -3437, 1370, -3394, -736, -2531, 339, 1770, 5526, 2609, 2177, -3338, -1944, -3350, -6291, -1343, -2136, 5118, -2165, -1306, 11244, -3334, -2978, -2234, -8530, 1164, -2642, 650, -4640, -3088, 6238, 1976, 5970, 951, -130, 6516, -9992, 3033, 659, -2184, 9797, -3594, 208, 379, 465, -2300, -1542, 4167, 2073, 2382, 63, 5597, -1266, 5259, -4673, 6875, 235, -729, 1490, 39, 1042, 161, -5900, 7898, -2359, 5103, 1835, 4690, -980, 1354, 3479, 4747, 4067, 8025, -781, 6279, 2110, 3166, -212, 2341, -1108, -14087, 2727, 2388, -3423, -6992, 2514, -3589, -3890, 3722, -635, 5290, 1828, 5144, -6589, 4989, 3085, -7561, 736, -3290, -755, -120, 576, -2304, 101, 5285, -4029, 627, -3023, 1132, -5184, 158, 1010, 4027, -6217, -4013, 1949, -29, 1704, -618, -4695, -1689, 1674, 796, 29, 2411, 2652, 5020, 3435, -3871, -665, 547, -6287, 2218, -5027, -2071, 3135, 1650, 4222, -802, 2054, -220, -7039, 1981, 1086, -1764, 4393, 2104, -332, 4360, -285, 2071, 1357, 661, 2707, -323, 260, -4833, 5300, 5328, -4809, 4476, 775, 3729, 1957, 1035, 4131, 465, 2051, 3507, 4334, 2578, -3041, -110, -3596, 4683, 1911, -1230, 283, 3222, -7271, -3468, 5657, 1058, -709, -5485, -2241, 5783, -455, -553, 1782, 2986, -1897, -4549, -3399, 784, 576, 1839, -4925, 2274, -396, 2388, -347, 1075, -995, -1125, -6437, 865, -3965, 4295, 42, 3186, 3413, 3889, -5095, -193, -2838, -1135, -948, 2178, -2551, -57, 2926, 7, 4078, -2624, -675, 2885, -6569, 6073, -1683, -4799, 6791, 1240, 1369, 2856, -2055, -1307, -4821, 4974, 3273, 399, 700, 3654, -3762, 4593, 4299, -566, -312, 1857, -738, 5619, -91, -2841, -1389, 7728, -323, 6104, 4071, -240, 1751, 3998, 4351, 365, 5284, 3539, 653, 3210, -5693, 3328, -440, 4206, -492, -1663, -842, 5967, -3806, -4571, -272, 4669, -4574, 2795, -350, 802, 5242, 1498, 6464, -3167, 852, -952, -7297, 3664, -3012, -3674, -4420, 3558, -591, 3853, 2068, 3604, 5771, 4538, -3756, -6630, -2328, 7662, -1538, 51, -90, 5664, -3958, -3320, 1583, -3424, -2927, 2037, -3133, -3982, 2516, 807, -234, -1735, -1231, 3613, -13312, 1063, 773, -253, 1527, -3638, 7995, -3010, -35, 3081, -2772, 3883, 1186, -1675, 757, 3765, 3337, 4630, -2550, 6056, 3352, 3804, -1556, 618, -2192, 380, 1048, 3048, -1266, 113, 4386, 1163, 1014, 3761, 2795, 3948, 2435, 3415, -1758, 3692, -3624, -1409, -3891, 7523, 2248, -4043, 1119, 4409, -1977, -6124, 3177, 448, 1314, -3259, -745, 1267, -616, 2444, -5194, 6338, -1053, -6940, 4573, -2433, -609, 350, -161, -413, -2811, 3273, -2821, -1415, -914, -3628, -4064, 1039, -1261, 4760, -3304, -3699, 4389, 946, -467, -1993, -7706, -4049, -1873, 1009, -5106, -6224, -105, 1951, -354, -3107, 6185, 2629, -4645, -4304, 3867, -7573, 2194, -27, 9551, -5787, -1927, 1041, 3636, 6831, 3389, -1442, -1045, 7849, -3694, 7382, 2152, 2917, 23, 4400, -1695, -4657, -1941, -3644, 5164, 787, -2954, 6240, 3034, -149, 7564, 1994, 5114, 2916, 2990, 12220, -3962, 1194, -807, 854, 64, 9423, -306, -3523, -3391, 5079, -2788, -7514, 7853, 3577, -2166, -752, 3467, 1867, -691, 5995, -3820, 6816, 3641, -4784, -1028, 1157, -5564, 364, 636, -741, 785, 5440, -1807, 1674, -1954, -3432, -5631, -2296, 882, 4165, -874, -221, 109, -501, 3564, 2282, -7012, -4166, -902, 2496, -2370, -221, 3789, -1794, 2618, -1541, -2717, 2691, -3700, 2639, -1275, -2892, 1435, 977, 1029, -764, 487, -26, -6454, 1250, 355, 280, -5407, 5446, 556, 8973, -1540, 3302, 1980, 1180, 306, 622, -830, -4136, 4161, 8905, -7964, 5159, 4050, 1758, 212, 4447, 5367, -905, 4118, 7995, 1690, 1726, -1383, 1365, 386, 5808, -4312, -4330, 1908, 8235, -5303, -2646, -103, 2263, 163, -4587, 186, 2013, -823, 2555, -3485, 398, 2678, -3705, -7843, -133, 1665, -1330, -3322, -1904, -1941, 3915, -2690, 1255, -3032, -129, -3721, -2872, -7272, 3636, -2921, -4208, 341, 1695, -3140, -2105, 496, 1649, -939, -826, -4633, -2160, 2714, -3338, 651, -6106, -2547, 4831, -10346, 498, -29, 1529, 5264, 765, 4990, -2752, -1676, 8219, -3007, 3092, 549, -3678, -1731, -383, 5422, 3672, -1733, 5670, 2644, 4490, 712, 1762, 3082, -3760, 4098, 626, -4701, 4577, 4866, -1434, 6078, 1203, 1079, -1, 1547, 2380, 213, 2877, -1391, -2459, -182, 5772, 6173, -5387, -1014, 4236, -2932, -5127, 6355, 1277, -236, -2694, -4410, 2696, 1648, 4661, -3745, 4307, -1753, -8860, 5577, -2048, -2926, 352, -1896, 2099, 1561, 3594, -6493, -2762, 1260, -3565, -7965, 2090, 1240, 4815, -6490, -4624, -1600, -360, 2810, 162, -9923, -1362, 606, 796, -2807, -2256, 2616, 2088, 6895, -4140, -4268, 839, -5857, -1605, 134, -5710, 2192, -644, 5737, -2160, 1932, 1855, -3345, 829, 1886, -4377, 4706, 2566, 3967, 8027, 247, 753, -2405, 2937, 955, 911, 2565, -4569, 2939, 6284, -2851, 4645, 4250, 4152, -1025, -2132, 5459, 147, 4707, 2636, -2708, 2037, -6775, 3735, -2416, 6812, 4048, 1873, -3423, 6764, -3409, -5055, 2392, -3803, -888, -5590, -2570, 870, -3406, 113, 881, 6522, -7110, -6156, -3478, 1764, -3352, 1100, -2482, 2231, -4883, 8333, 509, -463, 1152, -406, -5724, 226, -4152, 5856, 608, -4292, -2015, 2859, -3938, -1535, -10762, -5300, -415, 3277, -2753, 1151, 3730, -9598, 4446, -1361, -4166, -1469, -4478, 1500, -4611, -7033, 5486, -2386, 11475, -4458, -4631, -173, 440, 1989, 1036, 2101, -4074, 4862, 3741, 8629, 4179, 5509, -3128, 3237, 2970, -53, 3761, 475, 4264, 6766, -4365, 4704, 2599, 87, 2624, 6595, 7676, -208, 6065, 1213, 4081, 4746, -1686, 1153, -5136, 1110, -1047, -1338, -4576, 3641, 1757, -8501, 2246, 4643, -5311, 575, -22, -2626, -672, 940, -5028, 3420, -2768, -4189, -2320, 961, -491, -76, 2008, 3748, -1808, 6989, 196, -2813, 1501, -3431, -3962, -812, -493, 3867, 373, 471, 3018, -2597, 1597, -2808, -1363, -4293, -3898, 2638, -4235, -2760, 6134, 2484, 5347, -4686, -1562, 5783, -10643, 2681, -1128, -1953, 8576, -3058, 5437, 2671, 1454, 899, -6292, 1922, 1452, -2599, 2806, 5074, 1199, 8192, -2344, 9177, -1184, 2797, -2197, -2469, 755, -2915, 1611, 8617, -2609, 3027, 2925, 756, 840, 1024, 4203, 1825, -1913, 7609, -680, 3187, -1636, 5231, -2308, 3298, 2535, -6800, 1818, 3595, -3610, -7746, 4541, -92, -2087, -2433, 580, 3502, -2526, 5251, -2073, 1279, 1278, -5777, -1644, 242, -3353, 3059, -2000, -49, -899, 4284, -4813, -299, -2147, 91, -5388, -3250, -6381, 6481, -1042, 658, 2456, 5699, -282, -2128, -8823, -2164, -495, 826, -2827, -4896, 4545, -2585, 9184, -5213, 3976, 814, -10430, -1275, -4476, -9729, -1391, -1378, 5420, -1912, -1781, 908, -1535, 1543, 1866, 2846, -424, 5863, 4206, 6338, -610, 6742, -3752, 3047, 3312, -1261, -921, -386, 1754, 7792, -2189, 9740, 1317, 3772, 5833, 2373, 7781, -2973, 4126, 8263, 3577, -114, -406, 1849, -303, 4698, -427, -4847, -1405, 4952, -1435, -8776, 3993, -5034, -2069, -5434, -2131, 1851, -260, 5304, -4776, 5241, 769, -1359, -4758, -520, -2758, -425, -2049, 2675, -8305, 7031, -6192, -4288, 893, 824, -6393, -5449, -2671, 5731, 1744, 4493, 7267, 5038, -1691, -183, -5934, -1940, -960, 1700, 739, -3483, 960, 5078, -40, -2937, 2746, 3146, -9913, -6460, -208, 1908, 8679, 1260, 6395, 1270, -3532, 3550, 3900, 3882, 4488, -1285, 1554, 5816, -1446, 4269, 2120, 4532, 2592, 5628, -274, 4064, 4568, -3845, 6107, 692, -804, 5506, 3651, 2181, 6452, 4991, 5319, -4409, 684, 3624, 358, 2579, -5300, -1035, -4948, 5687, 1697, -6792, 949, 62, -2207, -8528, 3432, -1391, 1401, 1425, -2173, 2627, 1979, 4449, -2636, 6411, -653, -6864, 668, -2202, -5491, -733, -3336, 812, 1435, 7642, -4144, 817, 2621, -325, -4544, -19, 636, 4901, -5000, 614, 1305, 2694, -2036, -1480, -5611, -5373, -2137, -184, -3703, -2675, -1169, -4367, -857, -2761, 1093, 2165, -9154, -3085, 1237, 1308, 9654, 1982, 5277, -1181, -2822, 1462, 2096, 5291, 67, -6963, 218, 1975, -1331, 2129, -467, 7482, -435, 5651, 4114, 1378, 2451, -2205, 4963, 1947, -2576, 5411, 3147, -4327, 3242, 3797, 3454, 189, -3436, 4984, 198, 3048, 619, -1159, -971, 4605, 3716, -624, -4251, -1052, -2257, -7216, 9567, -1660, -1089, 4005, 696, -3223, 2838, 3267, -8126, 1608, 2314, -7587, 7255, -1173, -3963, 1652, -2665, 2618, 7077, 6187, -3231, -2595, 910, -1284, -2103, 631, -1477, 6097, -3093, -163, 766, 2816, 538, 347, -7286, -3153, -6088, -3686, -6069, -2878, -1782, -3411, -809, -2372, -1856, 1015, -6770, -2140, 85, -772, 12508, -4617, 3921, -9920, -5233, 1475, -4723, 5205, -2422, -6354, -1230, 3646, -1521, 4804, -792, 1956, 1143, 2190, 1784, -2220, -3419, -2983, 2807, 2745, 1300, 5197, 3535, -1691, 2363, 1422, 2795, 3281, 919, 9856, -3626, 97, -655, -905, 6174, 8114, 3261, -3702, 1309, 2779, -5536, -5665, 5289, -1145, -969, 2238, 2091, 65, 2966, 7042, -8240, 775, 2713, -7654, 4299, -70, -2752, -2325, 1068, 1028, 3945, 5033, -3684, 552, 1239, -4260, -5653, -1102, -2266, 6305, -774, -3689, 1343, -284, 1462, -610, -6311, -2272, -3421, 417, -5573, -3597, 5771, -314, 3129, 1905, -1986, 6973, -2777, 1266, -2176, -4548, 12708, 1156, 2320, -6446, 1492, -334, -5727, 908, -3531, -1009, 1490, 4184, 2430, 7630, -4117, 5304, 1005, 2817, 1175, -4346, -1670, -2359, -688, 5331, 70, 1688, 1213, 939, 615, 127, 5299, 6952, -1625, 8096, -3439, 648, 1075, 5131, 1680, 2823, 1395, -5869, 2962, 2271, -1405, -492, 5323, 174, -2782, 3834, 4022, -1754, 974, 3359, -3891, -4159, 1294, -4973, 3163, 855, -857, -2624, -1192, -4529, 9206, 5429, -1595, 2346, -1449, -4074, -7391, -9795, -1755, 5895, -944, -3740, 4933, 3860, 2926, -472, -6104, -1564, 2760, 100, -980, -4713, 891, 6884, 2470, 698, 1638, 5516, -9218, 4025, -4687, 3112, 4057, -7891, 3708, 4193, 2416, 43, -3573, 1991, 2656, -831, -818, 3664, 8352, 5581, 1434, 2001, -1369, -1243, -6712, 2757, 4392, -359, 3, 6767, -7338, 3445, -132, 2011, -1770, 6689, 4249, 1246, 3998, 4312, -1094, -3809, 3057, 2429, -7591, 3266, -246, -7890, 4566, 9222, -897, -7762, 5572, 2318, 5635, -2312, 1802, 11097, 1103, 7290, -3096, 6892, -612, -3454, -4116, 4574, 3408, 8870, -757, -2296, -7166, 539, -5981, 2718, -4511, -6563, 152, -4065, -391, 3271, -2785, -7565, -934, 852, -132, 603, -3906, 4344, 1798, 2370, -4060, -2148, 3086, 395, 4985, -2713, 2827, 4249, -8497, 1584, -1980, -1989, 5730, 1899, 5908, 995, 2543, 1345, -2536, -3582, 3676, 1522, 799, 2103, 3652, 7642, 2108, 3201, -3006, 705, -1075, -728, 2165, -4158, 1112, 6502, -4810, 4072, 2299, 732, 1380, 1901, 6030, 694, 2472, 7729, -1932, -144, -1239, 4463, -3395, 2400, 2477, -7542, 2071, -740, -4523, -10651, 4705, -623, -135, -5237, 109, 6402, 905, 4407, -2918, 6467, -1072, -2684, -1739, -504, -3921, 5240, -13, -1814, -5095, 3199, -3859, -2848, 180, -1875, -6776, -1292, 2384, 2540, -361, -4011, 3414, 615, 331, -572, -6974, -1970, -1084, 1367, -6852, -7042, 4272, -1647, 6187, -4707, -444, 8775, -7109, -1964, 663, -6578, 8620, -2738, 3968, -5542, 3522, 4809, -3241, 3744, -1097, -2861, 1140, 1202, 2379, 6262, 1460, 6209, -3276, 2461, 3115, -5462, -4831, -32, -1401, 4469, 511, 3496, 2407, 5134, 5776, -732, 4487, 1429, 1937, 10499, -1229, 2325, 1039, 1631, 2719, 5322, 3237, -5106, -524, 5139, -1247, -6834, 5374, -453, 1830, -2923, 1, 774, -128, 9175, -8333, 4565, 3287, -3275, 7318, -1027, -5089, -342, -1723, 4023, 1498, 5871, -6545, -1164, 743, -5891, -12494, -104, 3845, 3365, -118, -2768, 1258, 1534, 4368, -3943, -12365, -5161, -3493, 603, -3618, -4497, -5256, -1153, 3923, -4698, 316, -448, -4493, -3403, 679, -6075, 10255, 386, 4020, -6204, -3608, 4151, -3503, 2134, -602, -5411, 1156, 5461, 4765, 4931, -274, 3085, 139, 1245, -2956, 602, 1437, -3661, 7565, 560, 2021, 2842, 7054, -2714, 8019, 4916, 5634, -333, 160, 1269, -3096, 7976, -5790, -2855, 2596, 2975, 9100, 6238, -5072, 5692, -6617, -5530, 4428, 1195, -757, -2409, 756, -1965, 601, 1637, -624, 2645, 462, -979, 660, 4681, -6297, -4743, -179, 1024, -2331, 5104, 4073, 3462, 5553, 2521, -6355, -2005, 3937, 4639, 3420, 3542, 2941, 3170, -2971, -5218, -6199, -4858, -5144, 464, -3905, -4472, 4107, 2735, 566, 901, 1760, 1411, -9188, 326, 2279, -4597, 10291, -1469, 1509, -508, -2826, -2560, -661, 3886, 361, -4405, -3651, 3439, -1096, 5396, -488, 2953, 1946, 3024, -473, -183, -941, -806, 2238, 4451, 381, 5126, 2514, 5278, 2771, 4104, 6292, 3803, 299, 9120, -3343, -2897, -6614, 811, -144, 1731, 3307, -3691, -3344, 2128, -7622, -5751, 8170, 1666, -1336, -124, -4046, 1877, 4446, 5750, -2778, 460, 750, -5101, -1251, -3634, -4936, 3137, -362, -1209, 770, 4333, -3380, 1267, 3158, -4822, -5114, -1689, 566, 6660, 635, -2239, 4365, -1126, 1055, 1250, -6864, -2672, 3898, -1408, -3194, -2925, -2467, 552, 4333, -9217, -146, -4785, -6306, 1288, -977, 2826, 3679, 3853, 3779, 2721, -1297, 5678, 2433, -506, 3529, -142, 1675, 1297, 5734, 6428, 488, 7914, 2000, 2390, -2004, 1750, 7669, -4352, 4491, 7895, -5167, 6034, 4500, -3385, 5422, 3945, 4783, -3641, -1014, 1734, 4016, -1874, 2391, 44, -4690, -748, 2063, -2327, -1604, -2331, 2115, -4444, 605, -5496, -2546, -3579, -2229, 5271, -3928, 7639, -3618, 7821, -1903, -5338, -4209, -219, 514, 602, -2172, -875, -296, 2237, -4401, -1109, -2298, -1053, -4708, 331, 1909, 1977, -4288, -8261, -2828, 3479, 1726, 3071, -7507, 2151, 1350, -1004, -9390, -2813, 1486, -10913, 8754, -4641, -8613, 2012, 523, 122, 1049, -3589, 9261, -659, 2832, -7650, 638, -1298, -2925, 1734, 298, -5789, 3242, 3036, -4861, 727, 476, 5196, 4233, 638, 4373, -8597, -3054, 670, 2552, 3432, 83, 2682, 310, -3829, 168, -4284, 3915, 4424, -2548, 9578, -1800, -1604, 927, 1554, 3773, 3118, 4457, 3668, -5389, -1917, 1118, -4365, 9068, -921, 1937, -3715, 3465, -3582, 143, -827, -9324, 255, -800, 605, 3484, -1946, -2986, -6755, 1319, 1533, 4128, 3886, 348, -102, 1111, -5839, -10991, -2037, 1262, 3498, 761, -49, 3754, -335, 1721, -2292, -5598, -4073, 463, 2804, -5851, -3689, 5839, -1584, 2965, -2807, -4952, 4376, -4836, 2588, -625, -6271, 6709, 283, 7808, -3393, 262, 3608, -4979, -46, 2701, -3209, 5410, 3614, 2946, 11792, 5754, -385, 722, 2443, -798, 2211, 1095, 299, 4943, 4933, -605, 1298, 3687, 3193, 2864, 3602, 7574, 2623, 3798, 3299, -737, 1439, -5764, -404, 232, 5612, 5121, 768, -3039, 4691, -2928, -8863, 5342, 1822, -1270, -2020, -1483, -2884, -774, 2215, -3501, 5282, -4308, -780, 743, 3053, -1866, 628, 372, 7951, -1169, 823, 2340, -1814, 1534, -6581, -7220, -144, 1945, 3619, 1810, -3451, 505, 2991, 312, -6736, -7317, -5560, -2648, 966, -2474, -5740, 16, 5127, 2766, -2867, 8134, 6465, -10792, -2255, 141, -4886, 3669, -1806, 2311, 499, -2192, 881, 411, 3420, 2315, 133, 2112, 3814, -1411, 9324, 4220, 3037, -2609, 2460, -990, -3898, 552, -3578, 4517, 3313, -3933, 8938, 975, 5182, 839, 2086, 7773, -1128, 2291, 7799, -2760, 1673, -1399, 2040, -1341, 5111, 3022, 1463, -3855, 6069, -47, -9853, -658, -3312, -1465, -5921, 2185, 10618, 250, 6244, -1148, 3517, 4502, -1566, -2956, 760, -4037, 749, -2120, -1496, -9255, 1655, -3175, 46, -1166, -941, -4194, -194, 338, 2649, 1754, 388, 684, 4217, -82, 1405, -5831, -2530, -470, 2526, -3252, -8529, 2921, -3419, 3324, -4605, 921, 6370, -5216, -3633, 5399, -1106, 12609, 3333, 2416, -1076, -2978, 4647, -1020, 2355, -157, -4107, -1381, 1928, 1208, 3305, -335, 6918, 2838, 3467, 719, -646, 2617, -2333, 2707, 532, 28, 4678, 3555, 1850, 7803, 2633, 4516, -143, -2340, 7984, -1005, 1411, -1258, 597, -252, 688, 5412, -767, -2612, 783, 244, -5205, 4016, -5605, 3256, -589, -1301, 2654, -781, 7546, -7378, 3578, 525, -7719, 6176, -4407, -3855, -195, -1582, 1222, 6028, 5156, -1019, -1014, -924, -1009, -9276, -5048, 818, 6402, -4698, -316, 5918, 5570, 1050, -2412, -9794, -1218, -1230, -3163, -6366, -3608, -4378, -5771, 4698, -3315, -3664, 174, -4256, -3448, 3151, -4119, 7955, 3277, 2886, -4718, -1034, 4735, -2213, -1258, -1038, 5734, -809, 6527, 10603, 4481, -5383, 4190, 3340, 3361, 461, -1238, 231, -5575, 3411, 5708, -4825, 5898, 2270, -3003, 7242, 1068, 5819, -7166, 847, 6064, 2557, 2707, 1446, 1628, 4722, 4788, 1716, -8191, -3021, -3163, -1707, -3168, 336, -5252, -4609, -3958, -1900, -297, -167, 8294, -4287, 3897, -1674, -3453, 2868, 85, -3129, -7254, -2609, -4007, 1246, 4657, -5197, 262, -488, -3796, -8200, -2587, 1831, 2483, -3523, -224, 526, 5018, -219, -1565, -5167, -2978, -5622, -705, -4188, -4724, 6024, -3005, 3235, -543, -3185, 6460, -6142, 4167, -739, -6348, 4598, -1405, 3632, -851, 2769, -19, -5561, 1986, -2236, -4802, 3374, 2377, -2150, 5868, -3190, 2928, -4287, 4814, 341, 205, -2695, 1611, -1892, 3854, 4577, -288, 5565, 2932, -6366, -603, 5225, 4876, -2147, 6098, -757, -1655, -629, -472, 2398, 1562, 2934, -8549, -2468, 3370, 1877, -6587, 2336, -3710, -1976, 2475, 1799, 327, 3673, 3671, -7548, -5180, 782, -3130, 2023, -4041, 482, -2363, -1671, 2857, 8235, 5864, -461, -2037, -133, -2134, -8714, -2632, 1175, 6169, -579, 1910, 2535, 1682, 3112, -1838, -9209, -4164, -1385, -130, -2321, -4917, 4412, 3567, 1458, -1621, 1027, 5845, -5132, 141, 476, -4827, 5750, 4090, 5808, -4173, -62, 2202, -2730, 419, 834, 637, 2118, 3414, -1765, 6485, -5838, -2386, -2403, 802, 2653, 451, -2212, -2696, 447, 5212, -446, 2898, 3384, 7028, 26, -1531, 4834, 1492, 1841, 7877, -223, 1159, 1284, 2819, 867, 4096, 1391, -5134, -1772, 4123, -2966, -4991, 2759, 1621, 2428, -481, 2960, -1026, -1024, 2301, -5028, 1543, 620, -5131, -2617, 1775, 2503, 3009, -445, 1608, 2437, 4326, 68, 1601, -3677, -4680, -9149, -2868, -1538, 2386, -1328, 1473, 3513, 1444, 562, -3214, -7065, -2095, 1553, 2765, 3143, -2191, 1005, -2169, -2670, -8322, -3121, 1363, -5074, -4378, -2115, -4064, 5338, 1542, 1623, -4015, -2823, 765, -1595, 2499, 1946, 15, 2145, 3885, -4645, 8560, 4548, 3547, -1380, 2049, 375, 975, 1075, -5051, 4386, 6155, -282, 8758, 1022, 1062, 3371, 1596, 5619, 640, -883, 4065, 922, -2013, -3623, 981, -993, 3849, 818, 4, -2841, 670, -1505, -10649, 868, 1030, -1995, 5325, -1433, 678, 5320, 1791, -8259, 2731, 2259, -2016, -5513, 3609, -1734, -160, 158, 182, -5174, 8134, -492, -3493, 3358, -2577, -3378, -2789, -4483, 4956, -225, -3280, 1610, 4263, -1622, 1084, -4934, -1909, -1681, 81, -1876, -2847, 1426, 290, 5942, -3827, -1812, 5242, -9413, 4396, -5399, -6218, 808, -5104, 2957, -2078, -1115, 56, -11174, 4769, 292, 3983, -175, 5011, 1648, 7644, -551, 2617, -1579, -834, 134, 843, -4314, -2697, -878, 8505, -1477, 3179, 986, 4619, -1945, 3711, 7648, 1672, 2635, 6052, 1922, 341, -3770, 2677, -1281, 5026, -3738, -7003, 1749, 3097, -1315, -4205, -5170, 2818, -272, -2560, 470, 1625, -153, 2294, -2811, 3567, 3186, -5629, -5766, 2382, -454, -252, -2177, 463, -2516, 4532, -3029, 981, 1014, -3588, -3903, -3168, -5372, 6033, 1908, 1025, 1304, 6566, -2985, -2377, -2718, -2852, -440, -579, -2807, -2976, -838, -1462, 3649, -4130, -1279, 5570, -10483, -765, -2229, 915, 4344, -140, 2652, -1399, -1196, 5508, -4541, 1903, 2196, -1001, -1570, 8421, 5771, 6955, 1312, 6133, -1570, 4489, 1640, 22, 6766, -3744, 6064, 5702, -2591, 4594, 3800, -1040, 3992, 1576, 5756, -4848, 1499, 5130, -2843, 2096, -4460, 32, -3896, 7330, 3365, -10270, 2296, 3788, 12, -6086, 1167, 6, -2804, -2839, -4226, 5573, -2105, 4312, -2932, 9171, -1758, -3512, 3571, -2871, -1929, -3083, -3715, -1619, -1056, 4991, -4080, -532, 1338, 245, -7817, 1441, 2401, 5615, -8448, -2922, -818, 3073, -1234, 1788, -10843, -5156, 2338, 2244, -657, -3359, 86, 3702, 6837, 1756, 1616, 3687, -9937, 1609, 2345, -4515, -5297, -1819, 5094, -529, 3713, -2447, -6412, 2243, 2427, 745, 2864, 3318, -1790, 3558, 2241, 3015, -1937, -105, -249, -2091, 2708, -506, -1949, -1389, -5465, 3419, -1564, 5660, 3848, -2147, 3276, 2898, 2898, 7353, -2909, 8800, 1377, 3695, -3351, 4617, 116, -1909, -1421, 10012, -823, -5065, -1163, 6343, -2329, -2755, 6118, 10039, 1378, 5554, -2358, 2384, 3864, -3397, -7237, 3356, -2612, 4283, -812, -375, -834, -1875, -636, 247, -4666, 1250, -2234, -853, -561, 2508, -5182, -4127, 2496, 1211, 798, 1135, -5316, -1696, 1162, -1355, -2556, -943, 1854, 4179, 3075, -2100, -5363, 2927, -14420, -1098, 697, 4227, 5159, -317, 5651, 2539, -1411, 3803, -6188, 3806, -3183, 633, 913, 2117, 6173, 5771, 1064, 4166, 4448, 1018, 3617, -1126, 1394, -4833, -1590, 1561, -480, 2373, 1954, -1465, 6314, 2251, 2638, 1199, 532, 3858, 105, 2150, 541, 1306, -518, 4779, 1134, -5332, 3498, 1336, -548, -6935, 3624, 1006, -2854, -2677, -276, 2613, -222, 4994, -3195, 475, -1378, -5715, 1179, -2397, -3399, -3374, -1791, 348, 4305, 1414, -5829, 1100, 2814, -1776, -6177, -3963, -953, 4590, -778, -5393, 4973, 4038, -2656, -2725, -9956, -1258, -2670, 889, -6016, -3053, 312, -2887, -967, -7929, -5389, 8660, -13314, 1292, -533, -2833, 5733, -1594, 951, -5743, -1218, 4792, -3094, 3149, -764, 1102, -1306, 3577, 1710, 6096, -4917, 4749, 251, -1134, -514, -440, -1841, -1983, 737, 4659, -987, 6084, 3740, 824, 6011, 3450, 4097, -766, -1375, 6874, -404, -977, 767, 1760, -1846, 7395, -2528, -8270, 2123, 4754, -2050, -5594, -1965, -1683, -2512, 2493, -2574, 2761, 1637, 3027, -9143, -1317, 6372, -4841, -497, 1728, -7462, -3046, -552, -2127, 1250, 6910, -6217, 1908, 1375, -4369, -5413, -1174, 288, 2207, -970, -2298, 5537, 3102, 1201, -416, -7460, -1656, -3172, 759, -1116, -9765, -1389, 7083, 2262, 2422, 5809, 3307, -11618, 458, 1131, -2993, 9216, -2585, 3397, 3391, -1736, 443, 360, 965, -1283, 829, -1450, 8185, 3064, 9293, -4929, 5391, -4786, -613, -2675, 2206, 5334, -5384, 7233, 4172, -1622, 3526, 7212, 3771, 4642, 5237, 7106, -5043, 648, 5206, -2568, 1494, -1949, 3774, -3931, 3896, 2347, -7751, 721, 4787, -1998, -3437, 4342, 785, -3230, -4721, -1162, 6014, -2256, 9619, 887, 4117, 692, -7875, -6592, 875, -772, 4423, -2908, -3383, 1688, 2445, -237, 3776, -1549, -3215, -4077, -3363, -1246, 4474, -3032, -3732, 4008, 5385, -682, 591, -6284, 943, -4071, 5593, 2828, -5789, 3705, 2879, 2261, -2350, 982, -717, -4780, -5527, -769, -8477, 5916, 2757, -831, -1120, -1063, -3597, 1682, 846, 731, 3443, 2704, 6868, 184, 7037, 2423, 3148, 495, 4677, -121, -1830, -184, -4902, 3556, 3034, 337, 6414, 5558, 290, 9585, 2924, 8309, 404, -691, 3273, -410, -367, -2695, 2262, 1636, 4618, 2016, 3954, -6579, -2484, -3187, -8352, 6402, 3161, -5024, -2517, -4334, -253, 841, 2537, -48, 3129, 886, -2552, -3784, 919, -6122, -461, -5336, 1637, 1640, 5096, -2362, 20, 3881, -1967, -6077, -1202, -504, 6278, -2116, -339, 2479, 7409, -4443, 774, -4317, -2183, -2481, -303, -6423, 746, -3196, -2710, 2403, -8717, -3102, -2691, -3379, 948, 1782, 1060, 2610, 6703, 2270, -2601, -1970, 2126, -4892, 4727, 1107, -1173, -1192, -1618, 3525, 1360, -1852, 8532, 6892, 6302, 2200, -1384, 2303, -3463, 1912, 3110, 970, 5600, 5129, -1694, 7622, 1974, 1700, -1409, 1248, -4297, 542, 6558, -4081, -4593, -137, 6877, 4669, -914, -2773, 3110, 983, -2223, 4386, -445, 2146, 429, -4643, -2454, -42, 2980, -587, 4853, 35, -3406, 4830, -2764, -5497, -4163, -5278, 2309, 3735, 5395, 1542, 438, 3473, 195, -10228, -374, 2494, 4551, -3263, -767, -1160, 713, -2959, -2760, -7498, -4914, -1253, 5924, -3917, 3177, 6118, 1895, 2664, -1008, -3985, -4021, -8379, 3213, -2062, 920, 3332, -3562, 5958, 1527, 1201, -3249, -4644, 2356, 3607, 3240, -1952, 3681, 2290, 6260, 2493, -213, -1415, 1933, -545, 4434, 4084, -3579, -2070, 5914, -5079, 6495, -1593, -2535, -395, 5453, 5578, 699, 3253, 1107, -2111, -1943, -225, 4913, -3521, 3332, 2574, -10320, 314, 5082, -3965, -5996, 4946, 1053, -5119, -1090, -617, 8362, 1116, 866, 1619, 1618, -4855, -6813, -2560, -866, -2797, 85, -3169, 1097, -3085, 3799, -6137, -591, 2060, -15, -3007, -778, -2592, 5380, -1909, -3706, -3551, 2310, -2392, 737, -428, 1396, -5431, -1123, -1413, -5975, 1278, 4277, 1875, 181, 3075, 2426, -10233, -1265, -2264, -477, 8583, 1484, 5750, -3083, -1493, 883, -4084, 3069, -362, -8518, 98, 4597, 5702, 10561, -663, 8440, 1494, 5056, 3701, -1634, 2631, -559, 10754, 2762, 662, 5194, 4693, -1853, 1312, 5029, 5726, 1850, -2956, 1566, -1539, 2202, -2311, 2196, -4645, 7376, 5875, -1580, 662, 6078, -5202, -9295, 3626, -425, -4810, -1189, -1282, 1080, -1120, 6429, -2911, 4713, -2300, -6903, 3508, -2928, -222, 3529, -1401, 1487, 335, 5953, -552, 1746, -1921, -549, -4169, -1208, -3727, 8093, 2622, -5870, 4207, 1210, -1672, -42, -10825, -2055, -4936, 1408, -2196, -2192, 4666, -1847, 3978, -1230, -602, 4217, -6126, 372, -1023, -2621, 6312, 4041, 1492, 1874, -1070, -1519, -1191, -2169, 1614, 5100, 1718, 5183, -101, 5623, 747, 6760, -2269, 4370, 62, 1144, 1196, -2662, 5365, 7116, -1097, 5548, 3127, 2263, 4498, 5538, 7587, 5024, 6177, -1470, 536, 2847, -1560, 3347, -96, 3320, -221, -4110, -788, 2962, -646, -6888, 5672, 1877, -6238, 2072, -104, 2786, 957, 2289, -105, 3013, -1129, -5648, -848, 2213, -5929, -2608, -3317, -3282, -2418, 7673, -856, 91, 265, 1813, -4441, -5101, -2275, 7421, -3221, -3405, -3993, 4348, -1534, -391, -1843, 72, -2588, 2899, -3928, -956, 371, 1309, 2433, -10952, -2675, 2773, -3147, -5581, -678, -4871, 13481, 519, 151, -608, 1149, -498, -3118, 1696, 562, -4724, 2703, 2870, 722, 7741, 1284, 11687, 7251, 4361, 769, 1183, -1295, -5400, 4196, 3286, 1719, 6600, 5431, -2907, 405, 1706, 4430, -3280, -919, 211, 1176, 1215, -6426, -3976, 366, 6308, -553, 7761, -193, -1052, -563, -7466, 262, -948, -2629, 5555, -5071, -597, 287, 2961, -3648, 4406, -1989, -3341, -2338, 1733, -6996, -1365, -5526, 2376, 1274, 6867, 386, -1086, 769, 2013, -6088, -3474, -1057, 7566, 1930, -4544, 2324, 2537, -4600, -1819, -6395, -3832, 915, 2092, -7152, -554, 7122, 1056, 4567, -1465, -6321, 2636, -11896, 5039, -1860, -3177, 10588, -3029, 6034, 6019, 3773, 1730, -5108, 3128, 1270, 1755, 3179, 4255, 5068, 4745, 5248, 1517, 1180, 91, -3517, 327, 4369, -1669, -967, 13222, -4737, 4536, 1525, -669, 5438, 6004, 3751, 1418, 4009, 3821, 835, 4589, 1679, 2775, 31, -986, 13, -4842, 1040, 3045, -3338, -8255, 6324, -2560, -4378, -3724, 530, 4900, -832, 5681, -627, 3931, -579, -4866, -3489, 3157, -3520, 2000, -2176, 3149, -2323, 1621, -4278, 729, 1566, 232, -4862, -4952, -3239, 5932, -650, -4747, -1390, 7509, -1065, -2906, -4873, -812, 3209, -520, 5507, -2259, -2286, -2180, 1160, -7599, 3643, -3341, -6870, -6024, 792, 4436, -1278, 2263, 9800, -3064, -3669, 5291, -1976, 2080, 1355, -3469, 2101, 1813, 7150, 4345, -1237, 13876, 4665, 1514, 134, -4968, 2838, -3740, 7747, 3376, -3874, 3802, 4481, 4427, 9901, 2863, 2759, 4633, 1020, -167, -51, 8675, 825, -6353, -5856, 2710, -160, 6634, 1048, 8765, -449, -6602, -3409, -2329, 494, -6276, 3393, 4855, -3152, 8152, -943, 7131, -603, -2422, -4956, 561, 391, -2913, 3348, -1113, -12113, 5432, 7802, -1135, 286, -1349, -2310, 5252, -1326, 1215, -4170, -916, 9466, 3255, -4670, -2086, -6551, -1095, -4616, 1858, -3722, -1933, 5898, -6754, -1228, 1990, -1048, 898, -7325, 104, -1293, -6133, 593, -2264, 6229, -3657, -5018, -942, -3702, 4133, -87, 950, -703, 3088, 3213, 7196, 733, 154, -9875, 2996, -2762, 1029, 2794, -1359, 2645, 1462, -2641, 3592, 5117, 3688, 1355, 4759, 7910, 2065, 6503, 1462, 232, 4707, -804, 3179, -469, 5943, -1315, -7669, -4777, 9361, 1486, -7933, 5653, 4233, -1572, 4203, 5949, 2133, 6279, 5943, -8753, 684, 1745, -8451, -3232, 5372, -1994, 3399, -1462, -706, 2253, 5450, -4990, 2440, 194, -8682, 1435, 461, -2464, 3789, -3299, -1126, -2172, -914, 3070, 593, -1627, -1224, -5444, 1344, 310, -3934, 2803, 4413, 5359, 406, 2059, 5898, -4498, -800, -625, 2297, 3841, 2455, 8047, -3287, 336, 3898, 2224, 3345, 2222, -152, -1491, 2813, -1234, 5008, 1635, 2364, -2335, 4896, 1166, 666, 5461, -2114, 8715, 3383, -1572, 5788, 5833, 2129, 4909, 4434, 2925, 6995, -35, 4412, 52, 6412, -4286, 2391, -4637, 8826, 4190, -5396, -537, 4677, -3741, -8123, 5774, 4693, -3977, 2701, -2457, -4142, 3125, 3081, -5981, 5046, 862, -11661, 2857, 4174, -3279, 1917, -2143, -2100, 1159, 9599, -647, -354, -891, -152, -3368, -1360, -9245, 3585, -6845, -3433, -948, -3878, -3105, 181, -10140, -4949, -194, 2288, -228, -1679, -564, 1373, 3780, -4721, 157, 5011, -6049, 1881, -7133, -7268, 2545, -2328, 633, 4824, 1379, 815, -2610, 4850, 3652, 3806, 3375, 1552, 2746, 8366, 663, 4379, 255, 2123, -2875, 3208, 2030, -2000, -76, 9409, -1479, 6400, 912, 7520, 1806, 1439, 5611, -2003, 2516, -1183, 1080, 3944, -4867, 1426, -6375, 3587, -3519, 1152, -3591, 2741, 1733, -5782, -4519, -3071, -3330, 2604, -2310, 6256, -116, 3964, -1803, 3908, 141, -4226, -4277, 144, -4031, 2883, -5344, -2877, -2585, 6722, 542, 1192, -908, -3622, -2051, -2022, 127, 3937, -269, -5402, 120, 7378, 377, 1547, -4279, -4232, -4928, -2567, -7339, -6145, 5888, -3925, 1485, 1594, -793, 2497, -3281, 2834, -2834, -5528, 12826, -5709, 434, -2804, -2921, 719, -1144, 2613, -1454, -9205, -1314, 4042, -273, 6186, -532, 3682, 118, 659, -2521, -3708, 1159, 1147, 3136, 4741, 822, 3467, 5163, 3283, -4141, 5006, 4704, 6263, 765, 8939, -3723, 1334, -2322, -1245, 4796, 863, 5840, -5996, 737, 4888, -2144, -5958, 10060, -2932, -4327, 5344, 925, 2938, 2535, 4565, -7033, -1768, 154, -5026, 4927, -2403, -1745, 726, 1984, 1699, 4337, 5666, -2596, -275, -31, -5575, -6226, 156, 4967, 6635, -2041, -4622, -4293, 551, 6239, 337, -4689, -3200, -677, 1065, -4822, 532, 3446, 592, 6343, -7065, -4825, 4389, -10069, 4658, -2673, -1631, 3583, -1982, 7520, 37, -2396, 3529, -4479, 2452, 499, 4016, 3554, 2899, 9218, 4711, 1744, 999, 6784, -1913, -2046, 1847, 2481, -2856, 3135, 7813, -8774, 6009, 932, 647, 3779, 3589, 3373, -121, 5021, 5877, 20, 2309, -1933, 814, -2784, 3128, -1001, -4928, 1096, 6059, -1697, -4531, 682, 4407, 2510, -3728, 4357, 3352, -3759, 240, -1059, -334, -197, -2956, -5637, 5632, -253, -1743, 464, -537, -1825, 553, -4846, -1961, 3085, -4745, -1858, -4208, -4956, 5094, -666, -240, 1130, 2713, -2774, -3484, -1794, -284, 1398, 2623, -1035, -426, 283, 1995, 3775, -194, -1579, 4404, -12210, 4319, -5890, -2430, 3726, -6675, 1742, 3949, 2081, -1142, -641, 7436, -3968, 4351, -1141, 1333, 825, 8477, 4133, 4639, 231, 169, -848, -401, 1133, -4242, -3325, 9178, -3677, 7068, 3512, -370, 3465, 4292, 4116, 2120, -1303, 4434, 4021, 731, -1894, 1792, -4054, 1805, 877, -5303, 1670, 3833, 684, -4065, 3008, -2264, -1319, 705, -2646, 6055, -2389, 5703, -1464, 1495, 1341, -4209, -3036, 1956, -1719, -767, -4351, 1877, -3117, 5937, -4086, -1898, 6272, -3546, -4896, -9822, -4483, 4543, -793, -9917, -1584, 4855, -184, -737, -7742, -2482, -2002, 2530, -583, 1496, 2930, -770, 459, -3651, -1069, -290, -2735, 643, 1060, -1382, 4994, 660, 3017, 632, -1442, -2029, -6739, -355, 6, -431, -1332, 1191, 630, 7080, 3578, 4414, 923, 2492, -2447, -377, -288, -6547, 3375, 5351, -1995, 6736, 4883, 1610, 4323, 5337, 6634, 2805, 4408, 3596, 739, 3035, -5358, 435, -22, 1341, -1585, -1696, 171, 3420, -5485, -6444, 1227, -1605, -846, -1121, -1038, 5989, 171, 4271, -570, 2282, 1305, -6245, -2175, -532, -3139, -1616, -1192, -207, -3250, 6581, -1589, -203, 2370, 3920, -3776, -1312, -321, 5472, -949, -5039, 3154, -313, -4096, -613, -3680, -151, -5026, -1993, -234, -5290, -1427, 869, 5046, -1562, 1486, 9509, -13266, -4468, 4770, -4864, 6898, 116, 942, -2860, -2519, 1894, -277, 1728, -3020, -5366, 1056, 3739, 115, 8558, -5861, 10326, -2788, 2883, 7010, -2947, 6388, 1046, 7126, 4080, 1290, 8475, 2448, 4681, 3366, -895, 3409, -1960, -421, 5453, -1574, 6424, -1386, -1915, 2411, 9879, 1254, -1546, -4125, 8403, 189, -7836, 2816, -3013, -7641, 4272, -4810, -933, 1979, 7841, -5620, -749, 3629, -1573, 1991, 1625, -8714, 3253, -5790, 3857, -1724, 7475, -825, -1210, -1940, -2056, -4153, 2925, -1336, 3690, -5844, -1615, 640, 5678, 3325, 1824, -10341, -5090, -3369, 344, -1502, -5425, 2573, 3521, 3889, -1777, 698, 7123, -7622, 2107, 2281, -2991, 5204, 5429, 3179, -2455, -1738, 3592, -2388, 13, 1579, 1791, 1398, 3432, 5294, 7926, -1963, -1240, -2502, 1957, 574, 916, 4236, -2996, 3060, 6993, -2716, 6621, 3612, 5417, 3249, 2641, 5166, 1894, -446, 6649, -3253, 7022, -2892, 1169, -2160, 2466, 3331, -4151, -2965, 3715, -3197, -6932, 4418, -2313, -2287, -941, -93, 3380, 707, 4740, -4761, 4148, 102, -7264, 1513, 2894, -2039, 2110, 583, -1339, -281, 3404, -2371, -1284, 1747, -617, -6107, -4248, -3498, 4724, -5658, -1877, 814, 5647, 574, 696, -9985, -1572, -5717, 4296, -1430, -1997, 6403, 3459, 4572, 4609, -439, 4387, -4494, -2579, -3509, -6560, 501, -8088, 5788, -1295, -2507, -461, -3280, 4628, -2539, 1320, -4501, 6179, 7549, 11808, -2697, 5605, -2063, 3012, -5429, -853, 3530, -5654, -3387, 5770, -3577, 6400, 5953, 2414, -837, 678, 6162, 3646, 915, 7284, -2038, 6913, -2059, 6843, 2893, 2134, 1482, -8631, -170, 9091, -8031, -6646, 1352, 3639, -3290, -2920, -1935, -3209, -160, 4793, 1008, 1120, 1826, -4151, -5536, 5306, 406, 14, -1980, -3986, -1915, 6900, -588, 5087, 3172, -2786, -3852, -6972, -7490, 5703, -2053, -435, 388, 980, -5063, -3301, -7167, -2155, -1336, -2258, -1613, -3828, 1765, 2475, 1247, -1997, 1578, -184, -3773, -319, 2951, 3752, 8419, 1584, 3378, -1059, 4227, 6018, -594, 4177, -2793, -7750, 2544, 296, 7630, 5468, 637, 7818, 5254, 4923, 2287, 1237, 6009, -2697, 3466, 1974, -2236, 4720, 3513, -2963, 2871, 3190, 3968, -2834, -4675, 7210, 588, 163, -2930, -6959, -1104, 2437, 8547, -3303, 220, 2891, -802, -4658, 10462, -3371, -2341, -1106, -5533, 5340, 1744, 6362, -5910, 1796, -2948, -3981, 9318, -5191, 2145, 46, -3589, 4322, 4744, 2405, -3106, -6953, 468, -5037, -9861, -1623, 3313, 8076, -7268, -8375, 5419, -1685, 2071, -173, -12265, -1743, -203, 3142, -1684, 2067, 3905, -282, -577, 870, -1002, -5606, -5974, -2429, -351, -813, 6762, 4800, 7101, -5664, -4417, -689, -6545, 2480, 1960, -3299, 1970, 1720, 2801, 5429, -1182, 6080, 660, 3048, 1917, -2658, -2653, -4917, -2548, 5351, -316, 194, 2940, 5034, 9381, -812, 6467, 5759, 4578, 1791, 116, 4931, -4457, 504, 328, 3082, -479, -426, 860, 1102, -7228, -2958, 3589, -10, -3939, 2244, -392, 803, 975, -169, 0, 875, 277, -7533, 2179, 28, -3266, -1832, 1391, -1119, 3010, 4189, 154, 702, 1551, -1600, -5520, -3766, -2265, 6136, -1309, -4887, 4443, 1418, -245, 1667, -5251, -857, -2429, 2369, -3355, 500, 4375, -929, 2492, 116, -1393, 2865, -6040, 1252, -4404, -2310, 3650, -7187, 732, -1, 2602, -98, -5766, 3213, 2217, 1713, -667, 1898, -971, 4781, 1667, 157, -232, 1379, -783, 226, 203, -4174, 301, 7259, -4057, 6928, 3498, 1356, -519, 1830, 4766, 832, 3523, 2811, -294, 55, -4892, 2208, -1971, 2999, -542, -5930, -1034, 3585, -1331, -4245, 3631, 1115, 455, -391, -1443, 7611, 296, 1964, 296, 3992, -679, -6492, -4680, -2417, -3049, 2527, -7675, 1050, -2476, 6460, -3959, 856, 2095, -886, -7203, -1795, -338, 7124, -3563, -3198, -6433, 523, 34, -1416, -2998, -3239, -129, 3235, -4539, -5748, 5872, -3864, 1849, -2422, 673, 5630, -314, 652, 1147, -2158, 6659, -3213, 6795, -665, 1807, 5120, 1281, -139, 1612, -1794, -630, 1921, -3663, 2268, -1201, 5916, -1121, 2936, -745, -1891, 2105, 582, -1236, 1377, 1625, 906, 1935, 408, 26, -540, 2245, 2113, -2667, 7637, -6118, -3692, 476, 267, -2829, 1953, 2616, -6927, -1665, 1552, -3149, -7774, 8027, 1243, 2650, -4915, 3767, 3946, 2267, 6817, -7475, 4102, 736, -3882, 5872, -5565, -3123, -101, 582, 426, 8311, 6971, -4498, 1692, 1736, -6380, -8767, 14, 5090, 4075, -4211, -4132, 3454, -682, 6916, -769, -9140, -4982, -2427, -166, -4691, -5486, -991, -3471, -1527, -7689, 1065, 4705, -2459, 900, 2140, -8130, 4600, 1145, 7473, -4993, 1191, 9915, -1658, 4430, -1654, -9706, 3911, 257, 4738, 6883, 4819, 973, -911, 7092, 838, -2996, 378, -741, 5284, 2112, -1086, 4693, 2567, 1750, 2431, 3125, 4681, 4479, 595, 6906, -5642, 2822, -2933, -2916, 89, 4879, 3503, 2916, -5774, 7534, -5701, -11516, 12100, 4917, 775, -3567, 2950, 2346, 3781, 7279, -3933, 1245, 2075, -1353, 4295, 70, -3915, 2910, -1241, 7179, 33, 2906, -7123, -2339, 1958, -3549, -5899, 527, 2171, 7720, -1940, -2942, 1920, 4195, 4417, 885, -10969, -3899, -6904, -2523, -5893, -4461, 5374, -825, 4922, 1534, -7, 5129, -9011, 3472, -3410, -6263, 4697, -4000, 1712, -8302, -355, -2677, -4407, -306, -939, 2202, -4969, 3143, -3981, 8121, -7602, 5025, -7155, 1852, 1846, -4396, -1076, -954, -2117, 10948, 764, 3047, 5262, 5319, -3649, -2293, 6248, 10308, -130, 11476, -2736, 4286, -718, 7021, 5635, 5928, 1860, -4759, 2091, 8340, -1677, -6930, 3994, 1545, -3630, 1082, 1907, 3986, -1036, 3152, -721, -884, 2897, -3749, -3558, 740, -151, 1483, 435, -767, -1156, 7753, -381, -604, -2351, -665, -5688, -3418, 10, 6387, -54, -369, 1039, 1689, 2428, 301, -6865, -3610, 5754, 3131, -1386, -345, 3591, 2695, 2082, -8841, -5225, 1201, -8053, 2621, -4959, 1729, 2857, 2320, 7511, 2792, -3208, 4149, -6273, 1541, 2329, -3033, 2671, 2724, 8062, 7413, 3200, 2596, 4524, 6012, -357, 3085, 5625, -4105, 591, 4434, -6247, 4443, 1162, 1187, 4254, 3460, 2887, -3139, 1603, 370, 2776, 1068, -2698, -1209, -6804, 2585, 1970, -2884, -1998, -27, -8175, -6659, -299, -168, -1246, -2861, -4424, 379, -276, 3730, -1605, 8509, -2814, -4307, -274, -151, 2063, 310, -3130, 2040, -4299, 2175, -3929, 1998, 3831, -2254, -3727, 2143, 754, 2791, -711, -3732, -1695, 5086, -3070, -58, -6215, -3480, -4599, 4069, -5493, -7127, 2695, 3347, -3255, 3697, 5207, 3058, -4825, -451, -3341, -9153, 4555, -1006, 4669, -202, -3088, -2574, -2615, 2512, 1545, -1763, -439, 6614, -4422, 4844, -2051, 2575, -6344, 3369, -5329, 337, 657, -2679, -175, 4710, -753, 3733, 4626, 6085, -456, 3896, 9011, 3672, 236, 6449, -3478, 38, -3009, 3634, -1719, 2821, 2891, -7607, -2138, 2385, -5067, -4660, 4810, -2677, -914, 1049, -316, 2984, 4133, 3666, -3739, 3002, 2165, -8151, 2398, 809, -2990, 1232, -2693, -1725, 4653, 5866, -1986, 3918, 12, -3228, -4626, -5535, -311, 4457, -3412, 537, 2403, 3487, 760, 2140, -6206, -2284, 1955, -2565, -2901, 1469, 4357, -3087, 3594, -4204, 46, -1704, -8552, -2787, -4253, -1401, 2930, -1772, 3639, 2657, 2574, -447, -5469, 3111, 666, 1470, 3044, 3813, 1775, 3573, 4092, 4522, 1498, -321, -337, 389, 2238, -1054, -1596, 4798, -2220, 5150, -1980, 3517, 1936, 2009, 5079, 861, 6417, 1739, 1935, 4702, -42, 1237, -3658, 3994, 2765, -1327, 2677, 2069, 794, -5028, 1542, 1011, 767, -1720, -1576, 6765, -401, 2460, -4034, 6700, -2673, -6711, 3240, 1302, -252, 1726, -2864, 1031, -329, 1978, -6254, 0, -1773, -2005, -5827, 1465, 2765, 4623, -4242, -4274, 104, 1765, -1839, -1418, -2928, -1559, -3092, -1151, -4199, -3232, 2883, -6542, -989, -3270, 1175, 194, 395, -1149, 10, -9353, 3316, 4707, 2493, -3211, -209, 3383, -3757, -1060, 1862, -3068, -3487, 4291, -2165, 4279, -600, 3358, 1255, 2371, -157, -2236, 3700, -3093, 5469, 4992, 463, 3053, 3946, -4648, 17, 40, 3408, 5348, -4389, 4954, -3930, 258, 530, 554, -669, 3550, 1540, 6071, -3491, 5685, 831, -8388, 4281, 1270, -3364, -1930, -830, 3829, 2967, 2799, -622, -3539, -1328, -1665, -6392, -3280, -5807, 1580, 839, 4806, 4482, 4770, 1424, 1001, -1201, -2720, -5505, -3443, 5547, 5749, -686, 3382, 5991, 914, 1219, -2413, -4900, -7470, -896, 1065, -5070, -4994, 3746, -2136, 5506, -5190, -3470, 605, -5610, 1139, 425, -4798, 6785, 3687, 2996, 880, 4137, 557, -6451, 3283, -3853, -2512, 3827, 912, 2755, 8036, -2117, 7321, 4168, 852, 4167, -3212, -3286, -1597, -1895, 6069, -4138, 3265, 519, 1196, -872, -324, 5604, -221, 2559, 3267, 172, 3356, 263, 4828, -1389, 4565, 2, -2559, -1101, 4666, 223, -5531, 2229, -327, -3220, -2386, 1368, 3764, -849, 5145, -45, -2572, 821, -1707, -221, -1987, -1861, -1917, -4465, 1160, -439, 2422, -4299, 1396, -950, -2862, -7253, -4525, 436, 4034, -875, -4333, 7680, 8927, -2441, -4045, -5196, -941, -2453, -1874, 834, -6933, 2848, 6838, 9577, 3724, 4420, 5775, -3960, 2606, -4207, -4431, 2548, 658, 2377, -3965, 1608, -6575, -7999, -121, -1190, 1937, 4035, 6724, 1656, 8254, -3531, 232, -1526, -1974, 6706, -180, 4702, -1114, 6924, 6761, -2700, 6910, 4222, 6848, -3261, -1204, 6666, -4367, -599, 1492, 3463, 3921, -5121, 1845, -4408, 5919, -4263, 825, 59, 8043, -2176, -2347, -4325, -55, -525, 288, -2766, -2897, -1871, 7726, -1693, 3152, 0, -5300, -6094, 11156, 961, -432, -3694, 3106, 624, 3905, 4431, 5793, -2275, -563, -5637, -5132, -5788, 2209, -1313, -2270, -154, 8722, -4973, -4314, -6936, -4222, -5685, 3410, 829, -2048, 2281, 5920, -3674, -997, 2475, 2271, -7041, -7364, 2315, -2991, -1461, -729, 3411, -3585, -1709, 4218, -417, 3262, 193, -1489, -1956, 4503, 361, 4352, 1218, 1070, -2333, 5374, -555, -4781, -1419, -3482, 5441, 362, -1169, 6467, 1646, 5013, 6740, 1040, 6103, 3522, -1698, 6724, -2569, -1903, -2134, 5462, -6532, 4386, -3879, -661, -2480, 3595, -4116, -7970, 10316, 6000, -1953, -636, -577, 5462, 2066, 5755, -8982, 2351, 5730, -5790, -2776, -3181, -7769, 5190, -7303, -5602, 727, 3851, -8580, 732, -2238, -2977, -382, 1247, -4233, 7696, 768, 2679, -1124, 2049, -495, 2576, -8164, -583, -3596, -3578, -3960, -5851, 2777, -1352, 2612, -1051, 4148, 3476, -7220, -174, 0, -4461, 7079, -730, -957, -265, 76, -4036, -2825, 1318, 143, -1668, 1504, 4967, -407, 6737, -2390, 8009, -3714, 3806, -351, 2076, 3082, -270, 3064, 5702, 242, 4352, 3799, -447, 1243, 2793, 5562, 2263, 1340, 2415, 3744, 668, -341, 3646, -840, 3745, -2638, -3602, 2906, 3724, 1886, -6241, 4000, -1653, 1371, 1049, -120, -404, 3578, 5551, -3616, -32, 1916, -5633, -1127, 2716, -1397, 1403, -3026, 201, 2643, 6533, -1949, 2266, -3991, -494, -4557, -2258, -3053, 6212, -1241, -3369, 1325, 2712, -213, -1058, -2927, -2601, 875, -1065, -5036, -2189, 4391, -4932, 2330, -431, -3259, -374, -10301, 3810, -5147, 789, 11662, -4299, 7536, -2800, -2814, 2380, -6105, 2147, 2538, -2735, -3033, 2236, 2275, 5797, 1695, 5728, -1018, 264, -573, -1078, 112, 175, -811, 9295, -1928, 2691, 2200, 1204, 6637, 4861, 3074, 4869, 3342, 5134, -2538, 3973, -959, 2480, -398, 3278, 1768, -2813, 2147, 3912, -5354, -7175, 1379, -736, -3936, 903, 290, 2645, -70, 892, -2993, 3233, 545, -4943, 1471, 621, 1920, 2036, 2378, 1375, -4293, 4531, -118, 683, 637, 3743, -3248, 469, 158, 6424, 1507, -4548, 5706, 2435, -835, -424, -3745, -3095, -96, -2192, -4830, -2264, 127, 1396, 4090, -4407, 592, -435, -3257, -1773, -1406, -756, 6134, 2597, 4971, -4387, -1827, 149, -1628, 3476, 2798, -5507, -396, 1945, -2209, 2989, 2755, 7219, 3640, 2584, -312, -2660, -3027, -2449, 2052, 5606, -331, 4198, 1819, 4041, 6626, -2385, 3647, 7053, -3599, 10710, -1416, 234, -1536, 1966, 3218, 2840, 2323, -1005, -41, -1387, -4332, -4220, 5486, 1508, 3830, 1514, 888, -2258, 3759, 1030, -4628, 2079, 4248, -3532, 792, -3586, -3877, -1031, 1093, -1577, 6026, 2698, 1637, 549, 1408, -2998, -8027, -4097, 1681, 4070, -1551, -124, 4889, -1131, -2765, -252, -6176, -3033, -2165, 1877, -3405, -1067, 5848, -4096, 4937, -1994, -2775, 4763, -8399, 1625, -634, -2364, 2842, -597, 9204, -1967, -838, 4953, -2590, 1120, 964, -827, -3518, 4767, 3750, 8366, 581, 6791, -2328, 2644, -296, -3250, -1277, -2801, 2317, 6863, -2530, 3753, 2892, 4219, 1589, 1599, 6489, 4462, 6614, 5749, -3600, 3823, -1429, 1221, -932, 5337, -266, -6930, 1660, 7771, -1414, -6016, 1197, 1541, -2480, -2188, 1722, 4424, -3321, 2343, -3153, 3431, 1646, -3504, -699, -2630, -150, -118, 1179, -818, -3002, 5409, -2270, 1095, -747, -1843, -3852, -634, -192, 4819, -2168, -20, 3086, 2217, -1189, -12, -3851, 431, 3353, 3633, 654, 1929, 348, -1903, 3888, 61, -2573, -3091, 1650, 321, -4348, -6027, 1806, 1303, 8163, -2524, 1554, -3518, -2305, 279, 4897, -1047, 5347, 590, 4544, 4168, -110, 7817, -1649, 3766, -813, 1088, 5476, -505, 2476, 3698, -1862, 4877, 2098, 5038, 6248, 1953, 6848, -1848, 6733, -7474, 5022, 8791, -3108, -4129, -7591, 2734, 2900, 2786, -5654, 5155, -1601, -3874, -2058, -2740, -4171, -1873, -303, 443, -1047, 3384, 2723, 6119, -4154, -4134, -204, 6368, -2634, -1173, -4429, 3790, -3987, 4273, 6593, 1398, 2933, -2051, -4831, 2421, 42, 1073, -3625, -5243, -1116, 6333, 0, 663, -3460, -3397, -2519, 1058, -3106, -5299, 1854, 5270, -3549, 5206, 4505, 2879, -9935, -2722, -4396, -8649, 4827, -2476, 2712, -395, -6338, -5209, -3035, 2693, 1043, 1857, 2404, 7342, -5410, 5240, -524, 3153, -2903, 694, -496, 1044, 2752, -4352, 1099, 4981, -2530, 4314, 2692, 5156, 203, 2235, 8113, 676, 1950, 4094, 114, 2748, 861, 5462, 39, 6697, -1308, -2569, 1109, 2733, -2331, -8630, 5321, 4442, 2908, 3651, 1159, 6514, 1872, 820, -2806, -1802, 3458, -6048, -4285, -1380, -1260, 2669, -3079, 913, 3572, 4714, -1805, 1552, -3916, -1558, -2619, -4854, -3649, 4791, -2544, -2380, 4579, 738, 3845, 2336, -91, -1288, -2042, 1646, -2920, -1370, 1939, -2532, 289, -4924, 562, 52, -1636, -6427, -2326, -433, 3391, 62, 8089, -743, -2893, 5913, 954, 4646, 400, -1364, -315, 4362, 3303, 6195, 1652, 3167, 4113, 3890, -786, -2305, 1652, -5382, 2071, 5865, -2344, 4170, 2862, 518, 3599, 3311, 2588, -3007, 1461, 7288, -105, 1294, -1177, 1289, 213, 6302, 2217, -5362, -771, -656, -7824, -7264, 3464, 2260, 760, -1999, -2036, -1071, -1093, 3578, -2681, 6589, -517, -3578, 2272, -3170, -301, -1670, -3321, -2115, 3674, 6447, -4439, 3848, 2201, -1443, -8564, -1778, 533, 5887, -3662, 3248, -2136, 2773, -3180, -2723, -6462, -4960, -418, -1443, -4532, -2189, -3173, -6038, 3218, -4964, 268, -1418, -4709, 1395, -1819, 1443, 314, -894, 6059, -1821, -6092, 1022, -4134, 4418, 1573, -5326, 1888, 1476, 2052, 2809, 649, 10598, 4273, 658, 1546, -1615, 2759, -641, 4054, 371, -1971, 6231, 843, -1571, 4010, 4550, 4216, -2388, 751, 520, -98, 6208, -1260, -8204, -3004, 4475, 6432, -1682, -1221, 3528, -784, -2951, 2728, -4880, -1804, -1093, 562, 868, 140, 2679, -7498, 2392, -212, -4649, 5201, -2132, -2105, -5304, -109, 3271, 1336, -905, 722, -1023, 1175, -3974, -5373, 299, 3842, 3155, -4089, -4299, 1863, 1663, -34, -2020, -4446, -213, -807, -736, -4476, -2913, 7126, -2188, 6618, -1164, 2535, 5651, -9306, 1671, 2645, -5894, 6080, -500, 7099, -5996, -2775, 2703, -6732, 2587, -1094, -555, 2005, 4396, 3921, 9610, -5308, 7576, -1356, 1627, 2243, -4096, 472, -84, 6386, 5615, -2239, 4047, 4443, 5216, 3192, -1801, 4794, 4865, 1305, 9683, -2019, -84, 460, 5797, 5138, 4679, 344, -643, 2051, 8437, -2091, -5234, 2330, 5631, -3612, -4411, 1405, 1420, 156, 6820, 1755, -1417, 3385, -3105, -6956, -11, -2755, 3544, -689, 452, 3155, 4936, 1576, 2400, -6163, -961, -6573, -4123, -5684, 9391, 5584, 174, 3169, 4425, 4222, -985, -9136, -490, 3466, 2438, -294, -1752, -347, 4141, 2606, -5667, 3685, 1692, -11137, -4392, 2101, 6100, 4257, 6723, 5788, 4851, -508, 1807, -2457, 1049, 3812, -6478, 2371, 1269, 5114, 4567, 752, 11665, 4140, 3995, -328, 438, 6594, -5240, 9386, 3087, -2341, 6792, 4981, 960, 9347, 4209, 3202, -1182, 403, -38, 848, -187, -3794, -4426, -3296, 4327, 3517, 4730, -1733, 284, -1759, -6764, 3439, -5443, 317, -6142, -5838, 3856, -412, 4381, 509, 7616, -2155, -6817, 2406, 1910, -914, 1785, -6038, -703, -1618, 4198, 639, 252, -1080, 3147, -6026, 262, -3173, 5306, -3019, -1942, 2426, 2353, -6918, 492, -10974, 203, 26, 3104, -2411, -651, 4745, 1589, 4592, -439, 1060, 3198, -7158, 5201, -3657, -687, 6352, -3636, 3824, 2225, 1806, 33, -3626, 1026, 2150, 3213, -2099, 4489, 1307, 4625, 1262, 3810, -2607, 449, 220, 302, 3604, -1203, -2250, 6832, -1670, 5309, 855, 1879, 319, 3088, 6207, 919, 3760, 5664, -2832, 1330, -782, 4120, -3196, 4133, -455, -10514, 5544, 2335, -5139, -6993, 1472, -3047, -2635, -577, 933, 5478, 950, 4699, -5975, 2791, 1148, -4953, -2986, -156, 97, -1036, -2595, -1014, -3059, 3938, -5786, 1337, 3991, -3228, -1647, -340, -3949, 5176, -4668, -7995, 2648, 3787, -1959, 1916, -3447, -2951, -4551, -2147, -3631, -6961, 1520, 345, -4349, -626, 3026, 2629, -4892, -816, 2033, 2591, 5529, 2056, 3337, -5286, -2562, 5832, 1277, 2643, 2250, -7106, -3532, 3224, 3280, 5725, -453, 5557, 250, 6442, 2173, -3210, 5093, -2521, 9113, 1085, 734, 2338, 6141, 2241, 10487, 6145, 2697, 5630, -29, 6137, -3732, -77, -2067, -5148, 1262, 9208, 3799, -2124, -877, 7532, -5745, -6054, 8883, 3037, 2399, -3406, 732, 2804, 3318, 6032, -3504, 5284, 2423, -5678, 5295, -6352, -1749, 501, 344, 2469, 3873, 5069, -1986, -545, 632, -2192, -6120, 410, 361, 6438, -4636, -3337, 1382, -4397, 3817, 1511, -12073, -3709, 2479, 4382, 489, -5077, 2785, 5106, 4177, -4256, 2429, -1953, -7868, -1063, -932, 335, -331, -1657, 6532, 721, -1189, 2364, -2743, 905, 4712, 1227, 981, 4513, 5711, 8286, -4054, 9309, -978, -2065, -1752, 3251, 4776, -3634, 4078, 9415, -7258, 5535, 4450, 5078, 1557, 4697, 5036, -68, 1793, -1963, -2952, 2758, -399, 1677, -5607, 5924, -1767, -830, 3083, 8744, -4335, -7689, 961, -1719, 747, -8791, -290, 9402, -3553, 4935, 2097, 6866, -2209, -4679, -8033, 632, -1863, 4548, -2927, -2644, -9870, 4640, -3658, 4260, -1625, 2567, -1808, -3470, -8328, 4763, -1333, -2501, 689, 7551, -3046, 1877, -5955, 1151, -6097, -2481, -4551, -709, 707, 3382, -320, -3220, 1483, 2581, -8177, -1017, 711, -1014, 5091, 4891, 4984, -4455, -6992, 3099, -4793, 2200, 1028, -3203, -3314, 3751, 3120, 6052, -1063, 912, -1374, 5416, 2915, -2405, 853, -6457, 10673, 5363, -2289, 9401, 6825, 2918, 5021, 4273, 4133, 1600, -1926, 3557, 616, 3010, -5369, 928, -2284, 7020, 2026, -4308, -4187, 5059, -4625, -5342, 6884, -690, -653, -339, -3026, -5285, -505, 2765, -5632, 1977, 1432, -11432, 2679, -1298, -3900, 1495, -3456, -1169, 1938, 8433, 213, -399, 2119, 1580, -6347, -4287, -8848, 3961, -2077, 2299, -311, -3129, -5575, -3018, -13156, -5053, -4379, 5142, 1457, -7099, 5223, 6273, -2461, 3080, 4809, 5957, -6329, -138, 1235, -7587, 8372, 4248, -2768, 2860, -2066, -4805, 1214, 2437, 1004, 2987, 2531, 5049, -7318, 6600, -4870, -780, -3247, 850, -1565, 6203, 3628, -4343, 710, 4894, 212, 7283, 5071, 5808, 1248, 5475, 7104, 2753, 73, 5211, 1940, 1191, -7123, 7332, 920, 1665, -197, -6327, -4232, 2153, -2813, -7169, 6928, -2630, -1033, 4438, -6163, 3449, 5229, 374, -1286, -1028, 580, -7170, -2258, 581, -1878, -284, -3707, -1670, 5242, 9133, -1181, 2203, -4738, 3899, -7592, -9303, -6930, 6523, -410, -6808, 2430, 2983, -1277, -235, -4631, 1100, -1980, -740, -4953, 135, 1831, -811, 2364, -8436, -1892, -881, -7315, -1354, -715, 4157, 5790, -585, 3505, -1526, 642, 4329, 1979, 3472, 1662, 2295, 2398, 2557, 1905, 4830, 4337, 4719, 4512, 1249, 885, -1599, 8556, -695, 3874, 2117, 394, 5990, 775, -1025, 6421, 5365, 2651, -1, 1378, 4311, -3347, 613, -1615, -1844, 516, 5474, 2676, -1165, 2354, 210, -1573, -7030, 6782, 2993, 1855, -4235, 1077, 5265, 1679, 647, -2506, 3669, -370, -4263, -117, -761, -1308, -532, -1500, 626, 3240, 1795, -6898, -2467, 1932, -2230, -5966, 469, -336, 7430, -5636, -5090, 3605, -2723, -277, 511, -7894, -1537, -1521, -4615, -4497, -8404, 1202, -364, 7763, -851, -2094, 6096, -9987, 2007, -2318, -1983, 5813, -2541, -546, 2746, 3291, 6835, -2841, 3950, -3739, 1486, 3487, -43, 8263, 9126, -1791, 638, 25, -254, 1905, -57, 2851, -2964, 1877, 6034, -7048, 4614, 6321, 2626, 659, 729, 1831, -5963, 3025, 3074, 2000, 5786, -2631, -2052, -3517, 4702, 439, -10541, 338, 4817, 1349, -3208, -1143, -2019, 1021, -6182, 1048, 5213, -2976, 10621, -1179, 4148, -2856, -6111, 2709, -187, -2446, 2533, -5409, 1626, -569, 5084, -5885, -528, 3283, -2666, -7945, -2616, 894, 2966, -6160, -10350, -6536, 7117, 2740, -3115, -9572, -4394, -806, -1414, -4649, -1494, 1503, -5629, 1349, -1074, 2137, 6055, -8965, -498, -3713, 626, 1371, -2893, -8, 1397, -2279, 1564, -6190, 44, -190, 2867, -3292, -132, 1795, 3648, -1493, 7991, 1314, 799, -673, 525, 542, -6090, 6785, 3309, -7767, 6349, 4699, -2908, 2929, 5099, 1675, 1455, 285, 830, 5408, 879, 601, 2091, -2460, 6625, -2731, -986, 4152, 4163, -1483, -7617, 2929, 3698, 261, -359, -1830, 3617, 59, 8188, -4839, -3637, -200, -7804, -6273, -1310, -4231, 8025, -4986, 340, 2084, 5504, -3771, 1703, -2565, 1934, -3568, -4309, -6127, 4496, -2322, -7415, 3282, -2524, -1416, -1559, -2477, 1455, -853, 5797, 1573, 752, 5608, 4099, -1047, -222, -600, 5752, -7910, 5376, -3798, -632, 6042, -4147, 2750, -389, -1816, -4798, -6135, 3317, 3994, 1724, 1961, 4953, -2922, 6970, -900, -364, -2595, -1630, -2845, 4136, 5340, -2292, -2125, 5606, -2531, 5598, 3916, 398, -169, 5933, 4922, 2636, 3820, 2159, -938, 4297, -4746, 2251, -3676, 5851, 872, -4509, 1051, 7100, -2910, -7665, -1510, 1443, -2002, -8, -126, 6137, 5368, 112, 1382, -2323, -775, -5906, -5837, 5287, 1237, -748, -2086, 982, -1435, 3249, 2072, 2413, 296, 1981, -3328, -4978, -7379, 2655, -3597, -4467, 2692, 1943, -1776, -2598, -4036, 20, -3966, -10, -3327, -8293, 5256, 4636, 4007, 7206, 1683, 6569, -6985, -2111, 2921, -10103, 9154, -4874, -1692, -1285, 1890, -3227, -2152, 3470, -2241, 1691, -731, 5964, -3053, 7788, 2506, 380, -4746, 3461, -6, 1932, -3816, -1814, 687, 7142, 1554, 4792, 3830, 8724, -5454, -1664, 7248, 3835, 4602, 9894, -1029, -1889, -2856, 6654, 2867, 4041, -3939, -4105, -1278, 7059, 1603, -7373, 7342, 2928, -2231, 1171, 137, 4620, 3758, 6273, -3131, 2252, 2368, -5531, 1945, 1500, -4526, 3024, -4307, 586, -644, 8413, -5415, -2653, -804, -3499, -5114, -3647, -1515, 8042, -1322, -6902, -6271, 595, 1056, -166, -1635, -5398, 1365, -1840, -6360, -3570, 376, -4367, 8949, 1074, 3152, -1610, -2721, -2829, -1052, -8257, 2638, 2199, 6234, -655, 670, -972, -3407, 2809, 3413, -915, 1767, 4013, 1115, 4478, 3380, 5219, 3727, -1092, 1849, -5503, 455, -306, 1792, 7815, 148, 5160, -872, 998, 5582, 1622, 6022, 3811, 4952, 4212, -1111, 4469, -1665, -1083, 2688, 4750, 1676, 4215, 196, 6393, -226, -4210, -320, -1280, -2344, -2595, 2461, 2771, 842, 459, 2709, 1408, 4, 919, -5933, 1681, -6081, -3295, 3399, 4901, -4128, 3004, 4859, 3200, 2352, -989, -7993, -5716, 331, 5268, 1774, -352, 4442, 4373, -1708, -723, -451, -6236, -5322, 4685, -298, 4016, 1813, 3245, -763, -4197, -760, -200, -4496, 117, -3680, -1112, 5509, -808, 7784, -595, 278, 2886, -3557, 2352, 3797, -2989, 1607, 4917, -1434, 5162, -1448, 6298, -2737, 4003, -2947, -947, 1667, -1527, 1434, 8375, 542, 1487, 1971, 1225, 1319, -1539, 5218, 7241, -1169, 7671, -4007, 137, -4475, 3943, -1939, 2937, 2357, -6831, 222, 1418, -7908, -7242, 4932, 2546, -101, 1370, 1107, -1388, 4256, -1216, -1892, 2826, 3399, -2804, -1144, 719, -2248, -3242, -1249, -4191, 495, 3512, -1229, -662, 2932, -2073, -2592, -549, -5555, 6208, -3095, -949, 5213, 1930, -1231, 717, -6211, -1465, -2232, -1309, -6518, -515, 2463, -2694, 4308, 163, -3872, 3068, -9978, 3731, -1533, -462, 6192, -4651, 4739, -2417, -287, 991, -8651, 2719, -751, 806, 438, 3039, -963, 5578, 1560, 3128, 3468, 2497, -1178, -744, -760, -4190, 1636, 8115, -6073, 5416, 1820, -680, 5090, 5186, 4558, 516, 3517, 6334, 6, 6977, -3506, -1081, 1397, 4144, 2098, -8986, 1396, 2241, -2919, -4226, 3153, -1538, -1677, -3259, -456, 1851, 64, 4848, -3753, 3939, 298, -6078, -1019, -691, -3143, -2253, -3070, 1583, -2717, 3959, -1074, -752, -114, -1572, -7512, -1715, -7572, 3783, -4908, -8773, 1461, -494, 70, -2452, -2134, -1845, 2747, 3088, -4932, -2821, 1474, -7247, 3772, -4410, -3962, -511, -3543, -1959, -3679, -428, 5134, -2691, 4115, -2521, 993, 1834, -2661, 3348, 1605, -4441, 3686, -1809, 746, 868, -3303, 9392, 3133, 2359, 3495, -2418, -3750, 643, -1483, 3072, -1041, -549, 3056, -150, 3089, 205, 3798, 921, 2384, 1924, 979, 1551, -1386, -278, 2711, 3332, 5739, 10, -4482, 1475, -205, -2367, 4341, 1753, 1717, -2331, 510, 1750, -1369, 746, -867, 6347, 805, -3668, 3878, -5428, -2414, -808, -1308, 3654, 3638, 2710, 608, 960, 341, -2097, -9136, -1915, 4568, 5307, -1126, -2639, 1834, 1855, -387, -555, -5039, -1788, -3786, 500, -1000, -5562, 6068, 4329, 4151, 1695, 769, 5485, -6680, -2756, -1568, -8451, 1546, -6438, 2989, -3840, 1792, -346, -3158, 2447, -1601, -3499, 3410, 6936, -2081, 8465, -2388, 2517, 180, 356, 3509, 1955, 2861, -350, 2072, 2738, 100, 4259, 5489, 4689, -1318, 638, 8050, 68, 1634, 8244, -2503, 2456, -5501, -1255, 1685, 7777, 1889, -1372, 1801, 6333, 1108, -6955, 2982, 2996, 599, -480, -832, 2711, 303, 2590, -4681, 2882, -936, 251, -3268, -1517, 1445, -4924, -5766, 4043, 1739, 3537, 1357, -1055, -3683, -436, -9435, -971, 531, 7808, -1147, -3889, 5017, 204, 322, -3439, -10046, -4033, 283, 873, -3315, -242, 2968, -3617, 3354, -3573, -899, 875, -5467, 1839, -4992, -2816, 5912, -988, 4856, 821, 1250, 3126, -1394, 3594, 2755, -1422, 1560, 2958, 813, 2307, 4048, 1021, -1862, 1552, 1024, 2969, -838, -2239, 710, 8607, 160, 4042, 671, -181, 2279, 2665, 3912, 612, 3184, 5442, -2624, -4300, -2385, 1242, -556, 2485, 1605, -8405, -503, 305, -3031, -6898, 6643, -834, -2171, 640, 510, 2595, 811, 1839, -3217, 3825, -1612, -2594, 1054, -2691, -2268, -1611, -1738, -321, 579, 4511, -4979, -1447, 3992, -3256, -6366, -2964, 685, 6538, -4482, -4997, 58, 2779, -1935, 569, -7650, -2591, -3339, 2218, -7984, -2021, 1078, -3047, 2792, -2050, -2783, 329, -2447, 1485, -1564, -5809, 6075, 2170, 1156, -3475, -2251, -3606, -1476, 216, 1572, 2600, 446, 1308, -3229, 6475, -1560, 3697, -172, 4877, 3524, -6416, -1798, -197, -1155, 7138, -36, 6933, 1734, 3026, 1420, 731, 5222, 5259, -1611, 3578, 113, 1170, -1186, 3727, 151, 3055, 1364, 3517, -6892, -38, -1038, -4386, 6731, -1364, -2624, 2072, -877, -4228, 3068, 598, -1517, 609, 3405, -2927, 1989, 912, -4050, -1321, -2782, 678, -14, 3412, 2406, 2999, 3692, -286, -8070, -3748, 6162, 2941, 3025, 5797, 617, 4475, -1821, -3261, -2058, -7582, -1893, -2227, -8981, -4562, 1183, -2326, 2785, -5623, 2342, 2262, -6702, -1496, 464, -3776, 4881, 1682, 6162, -5011, -5828, 2225, -3392, 4107, 1007, -7785, 303, 4482, 3018, 7624, -2020, 7459, 259, 5663, 2098, -5598, -4094, -2917, 7049, 4757, -2325, 4891, 3115, 4381, 6874, 1799, 5871, 3532, 524, 8513, -1014, -999, -2974, 3248, -239, 5651, 3339, -4319, -972, 2248, -4897, -7363, 10067, 1122, 4855, -1021, 808, -789, -1380, 5655, -8266, 3606, 4712, -6405, 5781, -5585, -3317, -270, -302, -1350, 4118, 5560, -5621, 15, -1202, -1331, -6480, -641, -2953, 6684, -1077, 1015, 4553, 612, 1609, 1696, -11581, -333, 3591, -1190, 371, -334, -103, -2081, 4207, -3456, -5282, -1021, -2463, -1702, -3500, 2180, 2864, 5467, 11409, -1840, -2868, 4116, -5003, 259, 2729, -5289, 1492, 2352, 3650, 5482, -410, 5523, 3614, 3894, 1898, 1122, 2970, -1887, 7650, 3961, -3067, 2201, 2778, 6654, 9881, -357, 3253, 3818, 3463, 1045, 1098, 6845, -1373, -1246, -1231, 2635, 2151, -2594, -362, 2354, -4485, -3615, 2543, 703, 2894, -4130, 2402, -2629, -2300, -514, -5082, 9706, 224, -4726, 2029, -4458, 1331, -69, 2999, 611, -2079, 3025, 827, -2141, -264, -3091, -4379, 2948, 1546, 1697, -2432, 1758, 1856, 2770, -2842, 281, -4715, 1232, -3641, 2222, -4239, -4909, 10224, -4213, 4668, -274, -148, 5864, -7846, 151, -2958, -7257, 4679, 350, 5025, 985, 799, -1969, -3669, 3291, 1626, -3061, 839, 3916, -7761, 2104, 1489, 3857, -5159, -401, -286, 1432, -7657, -282, 1183, 919, -1829, 718, 3279, 3941, -2813, -1521, 5682, 5947, 2512, 8428, -2769, 449, -363, 5142, 3606, 3468, 4199, -4926, -2433, 2718, -2871, -3944, 6679, 6512, -1117, 4897, 3221, 1615, 2697, -1166, -4212, -834, 3042, -6242, -122, -1047, -4057, 359, -718, 363, 7877, 3709, 244, 890, -1946, 1769, -5064, -3921, 870, 6481, 86, -1189, 1097, 228, -605, -314, -2929, -160, -6281, 103, -11861, -6669, 840, -5249, 4384, -2768, -2112, 5306, -7939, 1226, 706, -7351, 8470, -1481, -2936, -2643, -1548, -222, -5265, 2677, -1086, -582, -2947, 4529, -2964, 6762, 44, 5968, -2274, 1146, -1555, -1577, -4631, -1948, -954, 4741, 3519, 1502, 3469, 1787, -2132, 1747, 4829, 3733, 371, 9953, -61, -4153, -4877, 4291, 4201, 2128, 1751, 455, -730, 3566, -1266, -5333, 2335, -727, 6188, 4889, 943, 765, 2494, 1252, -7634, -294, 4205, -2134, 5462, 40, -1613, -3211, -2845, -861, 2620, 3130, -412, 2225, -208, 1933, -9583, -2843, 313, 5155, -1506, 372, -22, 845, 669, -3116, -2162, -4227, -6038, -321, -2824, -5229, 3328, 3276, 3590, -1892, 2916, 8065, -7538, 1753, -38, -1350, 8884, -3133, 4823, -156, -1004, 5199, -377, 4059, 105, -2027, -648, 3265, -296, 5552, -1193, 3398, -268, 1756, -1302, -2409, 3129, -2832, 4308, 4172, -647, 6036, 1906, -235, -1998, 1326, 2477, 5465, -3322, 11566, -4258, 6914, -1302, 7566, 600, 6297, 3224, -7487, -178, 3577, -739, -9214, 8848, 5207, -1416, 1986, 4285, 1483, 1508, 5667, -2206, -1601, 3424, -7610, 2155, -1299, -4793, 3552, -2314, -2517, 4741, 5256, -5727, -470, -2390, -1095, -2675, -2300, -8162, 7044, -2220, -2515, 2856, 1459, 1292, 463, -5938, -4026, -2571, -542, -7163, -3033, 5317, 1713, 3134, -3599, -2988, 876, -11938, 4195, -2195, 57, 6237, 3790, 8859, -1456, -1475, 1233, -3865, 2922, 1174, -2441, 2838, 3734, 5120, 6670, 2285, 6196, -738, 3484, -253, 5, 696, -2668, 6712, 5752, -4884, 3215, 4900, 520, 2542, 5162, 5675, 3112, 4756, 3656, 4147, 3763, -692, 5399, -873, 5197, 2612, -9544, 2521, 5094, -5726, -6449, 2196, 4094, -2807, -2593, 2506, 3297, 698, 5023, 402, 3275, 2070, -9242, 171, 448, -1671, 477, -1220, -264, 1189, 5592, -6323, 2495, -229, -750, -3012, -2328, -4896, 4374, -301, -2568, 87, 4365, -2172, 441, -4626, 771, 933, 1518, -3880, -2665, 655, -1785, 5837, -3792, 1161, 2204, -8108, 365, -822, -2993, 8559, 3042, 2686, -663, -243, -102, 1560, 1778, 1148, 4517, 413, 1738, 1444, 4596, -1723, 10189, 985, 2553, 3960, -2806, 2169, -926, -491, 10850, -1932, 5434, 3249, 131, 6476, -313, 3184, 667, 960, 4620, -692, 1046, 4223, 2459, 189, 3653, 164, 4445, -4787, 2287, 322, -7306, 3115, -3603, -6019, -6, -1007, 3559, -807, 5710, 1697, 2999, 976, -2293, -525, 892, -3203, -278, -1431, 3214, -3177, 5777, 2687, -629, 1453, -2138, -7487, -1331, 5813, 4472, -3216, -7681, 2039, 3169, 3045, 1118, -3362, -6057, -1157, -200, -6578, -4619, 1837, 73, 2940, -4840, 2453, 2385, -4411, -3187, 1721, -1344, 4442, -2223, 114, -2323, -1657, 7110, -2782, 2449, -277, -3965, 1792, 2157, 3686, 1740, 2688, 1741, 4015, 4410, 1865, -3512, -1726, -4825, -671, 2312, -1265, 3959, 4302, -1254, 6104, 2097, 4498, -2993, -1228, 6990, 627, -724, -2322, 820, 1996, 2047, -333, -1026, -380, -1541, -2167, -7251, 11070, -3577, -334, 927, -3106, 3212, 529, 7710, -9309, 1140, -666, -5502, 2571, -4780, -4465, -198, -3890, 1603, 7770, 2657, -6293, -2510, 659, 3974, -10089, -3450, 4336, 8734, -2025, -89, 2311, 1541, 154, -992, -10228, -3713, -729, -3633, -1555, -1401, 1123, 2254, -2601, -1730, 1737, -2278, -2753, -1773, 496, 2052, 8220, 2853, 743, -3166, -663, 213, -2817, 1833, 1491, 2693, 681, 4474, 733, 3064, -243, -42, 365, 1146, 460, 1380, 3350, -4215, -1219, 5446, 1412, 4337, 2873, 982, 7492, 4180, 2759, 1333, 1997, 4632, -2152, 608, 597, 252, 2370, 4506, 215, -2419, 1255, 745, -3131, -5001, 3862, 2108, -376, -3103, 494, 3499, 3342, 1535, -2038, 2553, 862, -3603, -2558, -348, -816, -160, -3038, -945, 1922, 2544, 20, 1787, -1498, 2322, -8540, -4453, 820, 4822, -2587, -411, 6237, -1267, -3610, -3401, -5616, -1987, -1348, -243, -6092, -5229, 6322, -1793, 3278, 1087, -3463, 3115, -8027, 3202, -1279, -4145, 12441, -605, 2365, 848, -450, 170, -3307, 4438, 3971, -37, -1584, 6405, 3615, 8735, 3751, -600, -4805, -429, -830, 3859, 4624, -3769, 3916, 8884, -4341, 6359, 6516, 2581, 729, 2604, 4197, 1099, 2598, 3636, -1122, 5769, -3571, 355, -2727, 2148, 2411, -5552, -1234, 4630, -4126, -7193, 3018, 1216, -3931, -1822, -1311, 1800, 2656, 4721, -2545, 5820, -380, -7311, 306, 4916, -2166, 3778, 136, 2632, 1028, 2996, -4735, 2867, 6000, 895, -5016, -2357, -2041, 3398, -5514, -4681, -2444, 1327, -3058, -1020, -7023, -3238, -1478, -1100, -5157, -1904, 1255, -4573, 1299, -2051, 2626, 3490, -6166, 1715, 271, -6173, 7477, -537, -1612, -1006, -3531, -4243, -3892, 5734, 2350, -1736, -3826, 3390, -8129, 2883, 709, 1832, 6178, 825, -667, 960, -5506, -2114, 2683, 6331, 3616, 3761, 1616, 3287, 4001, 2310, 7039, 7939, 4567, 8247, -1058, -3560, -5464, 3433, 6309, 3163, -3974, -1374, 2106, 6209, -2507, -7534, 3603, 328, 6606, 1904, -3246, 836, 7244, 74, -2199, -4466, 3335, 491, -1165, -3035, -5854, -3861, 720, 205, 4135, 4296, -756, -1296, -2588, 4248, -7247, -3419, -5035, 4667, 1123, -1278, 4963, -607, -454, -2490, -2083, 2073, -2399, 300, -8555, -5283, 4343, -4125, -1091, -6906, -157, -348, -5348, 1756, -577, -2453, 3047, 1192, -1194, -1753, 1400, 720, 541, 5662, 2834, 6, 385, 1907, -5729, 3695, 4314, 2062, 3535, 7504, 4116, 2530, -6967, -2378, -5947, 5414, 4702, 2415, 264, 2609, 4255, 2494, 4568, 2619, 1885, 6260, 1284, -2879, -4401, 4296, 5207, 2589, 2878, 1001, -2771, -1735, -4328, -8108, 5242, 3554, 2146, 5726, -256, -2598, 6388, 809, -916, 1677, 2893, 1372, 3840, -6195, -1591, -3551, -3451, 3240, 3841, 1033, -2684, 932, 627, 3500, -10159, -2821, 2214, 8703, 282, -1654, 3351, 1730, -1956, -2501, -5360, -3778, 715, -1403, -4046, -1253, 2011, -3141, 8429, -1283, -2312, 6260, -4848, 5045, -8712, -1725, 8978, -5518, 3093, -4016, -2010, 2427, -7664, 655, 1934, -1938, -1203, -137, 5576, 6309, 828, 6050, -1702, 694, 2258, -2047, 1108, -737, 1165, 9589, -4565, 3827, 1972, 1172, 2783, 2496, 3683, 4690, 2921, 3213, -786, 226, -1951, 857, -2373, 2074, -231, -6993, 3215, 4705, -2926, -3758, 1966, 1886, -2475, -1668, 547, 3528, -44, 4774, -1211, 3342, 294, -7051, 2088, -164, 232, -296, -943, -347, -227, 6302, -3046, 361, 1336, -1689, -6169, -2144, 511, 5685, -3629, -6399, -4657, 1569, 2311, -335, -3723, -2370, -1276, -1773, -7836, -382, -1707, -4297, 4565, -8821, -3710, -44, -6705, -242, 2670, 22, 8031, 2670, 4945, -2507, -205, 3414, -4201, 3021, 3833, -4812, 3069, 1415, 3051, 2982, 1719, 6366, 5215, 3146, 1471, -1778, -3449, -1945, 2744, 3535, -1150, 4002, 558, -5094, 7688, 668, 4118, 3533, 2234, 3000, 46, -1465, -1576, 231, 3169, 4334, 5566, -1452, -1925, 1180, -2038, -7171, 8588, -2463, 5150, -3841, -92, 3405, 1966, 4079, -2573, 3773, -1056, -1994, 1657, -5230, -2728, -1665, 2846, 3389, 2108, 1905, -3598, -145, 1383, -5167, -9746, -621, 4924, 5417, -180, -679, 6599, -3739, 770, -1974, -6570, -326, -153, 3458, -5454, -2802, 4930, 75, 3889, -4329, -1348, 1710, -7673, 1444, -104, -2420, 4206, -2540, 3845, -2503, -1703, 488, -4167, 2710, 2353, -2119, 3082, 3520, 4559, 5324, -3688, 5648, 3562, 2765, -1549, 889, 3107, -216, -397, 3338, -974, 2144, 3833, -1019, -419, 2090, 6239, -3200, 2873, 1403, -725, 1767, -1728, 3247, -317, 5713, 1251, -6427, 2019, 6094, 1324, -7430, 4334, 2503, -377, -1905, -2481, 4909, -1288, 5658, -24, 186, 628, 42, -523, -387, -4285, 1258, -4730, 1094, 1387, 2268, -5506, 903, -1135, 3137, -6500, -3770, 1175, 6174, 975, -4068, 3065, 2562, -5, -851, -6928, -417, 978, 804, -4921, -700, 5595, 4225, 6063, 4760, 1407, 6763, -5899, 4944, -606, -7407, 2070, 888, 6480, 2014, -382, -10366, -8377, -4097, 925, 7163, 2886, 8593, 3924, 5768, 5757, -64, -2248, 1069, -3097, 2100, 5205, -1643, 199, 5530, 885, 4454, -887, 1593, -51, 3592, 9958, -2813, 7108, 1177, -761, -4132, 27, 6942, -5723, 1728, -6249, -9592, 1535, 3636, -1750, -7752, -809, 1981, 1335, -5559, -343, 5844, 284, 2780, 1112, 5698, -3632, -4080, -1982, 7634, -5040, -4281, 509, -887, -2383, 2012, -437, 1383, -598, 2614, -6382, -2851, -5653, 3591, 2671, -9338, 155, 419, -1744, -1208, -89, -1328, -4557, -2046, -6364, -4675, 794, -2559, 5027, -3493, 1416, 958, -5875, 2544, -3986, -2439, 2358, 2980, 8334, -4836, -1126, 1039, -4724, 3062, 2819, 1101, 532, 3538, -216, 6392, 1833, 2525, -1231, 2848, 1122, -2042, -1080, -632, 4202, 7685, 1162, 960, 5905, -2385, 7674, 2988, 5629, 2749, 1637, 3547, 2513, 6378, -2279, 2102, 100, 6483, -1001, -4632, 4913, 1950, -1094, -6034, 4510, 4910, -1146, -1033, 1967, -2440, 4386, 5959, 958, 3160, 2061, -6322, -656, 3498, -6179, -3414, 364, 3778, 6534, 5383, -1292, 3882, 2597, 278, -7760, -1634, -5999, 6783, 1427, 5713, 2082, 8361, -2507, -562, -4293, -4644, -3792, -784, -1841, -7015, 674, 3368, -4505, -1566, 5039, 415, -8081, -6503, 7362, -2706, 1459, 2365, 11012, -5328, -4365, 6260, -1237, 3568, -329, -8380, 2787, 3476, 5539, 6367, -468, 4591, -1915, 7971, -1503, -897, 1698, -5182, 10261, 402, -2567, 5786, 6148, 2553, 8402, 1676, 3121, 8233, -225, 5667, -2987, 3419, -4261, 1481, 2563, 8539, 4054, 1789, -3496, 7162, -8020, -6123, 6699, 3151, -3053, -4848, 1680, -400, 1417, 6534, 797, 1469, 3924, -8109, 1390, -114, -5057, 3289, -1606, -971, 1860, 6622, -1989, 5039, -207, -1886, -1814, -1044, -9446, 7171, 185, -2137, 2575, -209, -2597, 2775, -13507, -4593, -3369, 1565, -5223, 8, 5818, -4640, 3419, -3829, 1552, -3514, -7003, -4318, 405, -3041, 2045, 1868, 2468, -329, -795, -90, -3336, 4257, -599, 837, 3071, 481, 2959, 4081, 3032, 6845, 649, 572, 5032, -4577, -3225, -1452, -159, 4224, 1359, 1164, 711, 4999, 2772, 2428, 5121, -2001, 2502, 413, 488, 1816, -145, 1529, 976, 3930, -832, 3210, -3560, 3769, -4106, -1787, 5355, 5904, -1023, 276, 4182, 333, 54, 4343, -3473, 271, 593, -3769, 1102, -761, -250, 410, -1137, 2417, 7632, 960, 2704, 862, 366, 2656, -7115, -513, -552, 4626, -2335, 19, -899, 4747, 889, -2913, -4867, -429, -5393, -158, -7517, 1578, 4494, -2810, -4580, -6525, 135, -1307, -10133, 1695, -2117, -177, 5454, 1190, 6179, -1033, -790, 5460, -1925, 3325, 1770, -1575, -2070, 3507, 2332, 4364, 7067, 1695, 1036, 3548, 369, -970, 1752, -2172, 4716, 8854, -1614, 4583, 4499, -39, 4950, 5010, 1952, 5998, 3361, 2044, -4217, 2275, 1705, -16, -581, 5898, 935, -7940, 4156, 4058, -4924, -8546, 6689, -392, -2943, -1015, -2736, 3145, -141, 1412, -4137, 2316, -518, -3409, -896, -5851, -2726, 1908, -2438, 1103, 219, 2723, -8010, -1568, 1440, -361, -5444, 520, -82, 7200, -3044, -1347, -791, 1963, 875, 680, -7817, -642, -3018, 4238, -2847, -1615, 4841, 4779, 2754, 530, -1876, 600, -10582, 1237, 2262, -1107, 7103, 381, 7108, 1801, 345, 677, -1360, 5759, 2698, -1860, -1330, 4862, 2457, 7633, 667, 4070, 525, 1793, 1257, -782, 1790, -2427, 1630, 6367, -3875, 6189, 4074, 5700, 1937, 2783, 4435, 1726, -32, 3984, -1910, 5306, -2945, 2182, 753, 5015, 2629, -4378, -861, 5414, -11168, -8612, 7714, 2943, -1120, -2453, -2108, -50, 515, 2259, -1874, 5218, 1506, -5212, -2254, -4258, -1429, 3684, -1330, -974, -1589, 4553, -3767, 2619, 1363, -366, -4747, -1127, -5500, 4755, 3, -1531, 2013, 1336, -2600, -2540, -8872, -2348}; +#ifdef SHIFT + static Q15_T expected[N * HOUT * WOUT * COUT] = {-728, 951, -3885, -4321, -420, -5448, -709, 193, 1170, 2126, 1185, -1412, 2387, -4604, 11103, 1499, 2697, -8036, -4338, -854, -3071, 2685, 1918, -3378, -1704, 2687, -5541, 4147, -4462, 2597, -779, 1398, 4187, -1286, -2799, -4568, 2094, 3007, 2599, 660, 2383, 3850, 6036, -2451, 5684, 4884, -2916, 8477, 655, -2826, -3657, -1934, 4592, 918, 2712, 3407, -1289, -1709, -2892, -2935, 6714, -1474, 2632, 3508, 1108, 836, 1180, 2956, -6079, 1571, 2753, -5196, 5335, -4435, -3784, -2691, 2283, 2826, 8313, 5380, 1597, 1246, 1078, -4993, -8975, -2992, 3196, 5735, 860, 989, -404, -52, 4847, 586, -5091, -3753, 1484, 402, -6200, -6125, 6499, -3794, 5487, -1776, 316, 1743, -7304, 2761, -1467, -2496, 3171, 506, 9364, -5255, -800, -2093, -7909, 1945, 4920, 4233, -343, 5962, -2306, 5520, -1130, 3977, -3532, -929, 1422, -2511, -4972, -352, 3029, 9067, -2618, 2115, 3764, 3493, 57, 3380, 6259, 6504, 616, 5296, -478, 439, -944, 6392, -950, 6174, -3677, -1603, 4029, 4441, -1474, -7239, 526, -90, -1534, -375, 3868, 2256, 2320, 3349, -3422, 732, 2579, -6356, -5090, 1879, -3171, 1348, -620, 1467, -3110, 6878, -600, 2397, -348, 2881, -3683, -2946, -4740, 6337, 4035, 4615, 6567, 6675, -719, -1138, -4067, -4196, 1164, -175, -4460, -5179, 5352, -4042, 5668, -520, -1017, 5029, -8405, 460, -2025, -2849, 3345, -7191, 5469, -4764, -4002, 359, -6999, -1539, 1756, 857, -2674, 6278, 3213, 7871, -1400, 7160, -2811, -360, 3, -893, -176, -3105, 2571, 9365, -4327, 3704, 3111, 2961, -1097, -314, 5589, 2492, -523, 5422, -210, 764, -804, 3338, 782, 2257, -2779, -3606, 4515, 5546, 758, -8774, 1380, 2157, 2573, -2683, 1479, 4090, -2496, 3205, -5728, 4143, -1161, -4671, -5073, -222, -1270, 1499, 2801, 150, -4006, 6272, -2095, -457, -153, -131, -5030, -6366, -4953, 6584, 655, -2183, 1557, 2578, 1264, -939, -5261, 1023, -965, 1914, -1432, -8761, 8510, 708, 12378, 7214, 5859, 1145, -7311, -798, -1316, -8892, -126, -6546, 1878, 132, -2369, -7157, -5165, 203, 3328, 3972, -5672, 7857, -2592, 11270, -3948, 7480, -11855, -1418, 1666, -1246, -1647, -1970, -944, 7778, -6194, 5690, 4777, 10351, -5673, -2698, 8197, 1333, 1188, 5885, 2703, -190, -3894, 7817, -1820, 5530, -4181, -4289, 4004, 10598, 300, -5919, -2965, 2701, -3360, -3386, -2330, 5513, -2264, 7212, -1285, -1461, 1032, -3817, -10289, -309, -2197, 6068, -3334, -1201, -6480, 10435, -1865, 6213, -1725, 3640, -3088, -5130, -4826, 3770, 2359, 3446, -2671, 3864, 122, -995, -3456, -3029, -1771, 424, -2728, -5276, 3533, 286, 8373, 1674, 1938, 5051, -6937, 1095, 4514, -7983, 5614, 1981, 3180, -748, -563, -4333, -1273, -644, -729, 2534, 718, 3074, -844, 6908, -3275, 4868, -6310, 936, 4005, -375, -2163, -2206, -2716, 8606, 566, 7123, 2211, 13686, 4004, 572, 7873, 1355, 6622, 4350, -1563, 3835, -4166, 3257, 2462, -383, -370, -1117, -6104, 5573, -2976, -7408, 3438, -2778, -6113, -724, 404, 2392, 1750, 6728, -2179, 345, -222, -3419, -1923, 4262, -2831, -288, 474, 1019, 400, 6495, 2659, 1265, 2220, -1718, -8073, -4370, 904, 4658, -4579, -6561, 865, 1392, 901, -993, -8476, -2563, -4234, -1059, -3452, -3341, 1020, -2683, 3624, -835, -174, 4709, -10496, 1430, -744, -5256, 5807, 1479, 572, -6796, -2739, -3042, -4856, 234, -1183, 763, -1477, 4755, -4421, 6333, -6540, 1916, -3542, 293, 992, -1431, -2647, -2922, -388, 5906, 1271, 3938, 3082, 3705, 2197, 1874, 8163, 7285, -1556, 10631, -656, 920, -1692, 725, 5450, 3513, 3835, -2184, 914, 2818, -445, -6533, 6909, -3320, 1248, 3324, 1685, 1561, 4219, 2118, -7803, -804, 3945, -3008, -2584, 3012, -2683, -2576, 542, 2519, 3796, 5860, -347, -2436, -1719, -4384, -6443, -3330, -633, 5199, 1534, -1182, 2514, 2026, 1572, -1559, -3265, -1124, -5179, -4181, -2254, -9273, -88, -814, 4659, 450, -579, 6270, -6536, -2368, 2769, -8343, 5872, 1219, 1484, -9062, -4857, 276, -5586, -869, -1017, -3366, 253, 5104, -2651, 9883, -5108, 833, -5683, 1111, 5445, -492, -2389, -317, 6833, 2174, 4725, 4073, 5309, 6492, 3676, -2727, 4813, 4601, -2628, 7867, -2847, -2978, -5224, -2237, 3683, 4551, 1656, 3809, -4922, 8175, 108, -4253, 1224, 1524, -635, 1727, 718, -1697, 4508, 5992, -4598, -1263, 2554, -1476, -2368, 2937, -5096, -3031, 1034, 5733, 6494, 6074, 6596, 189, 301, -227, -10634, -176, -1525, 4728, 4679, -182, 598, 1276, 3675, -810, -10342, -3735, -1333, -1221, -5686, -3859, 2544, -6018, 2902, -2652, -1301, 205, -4177, -2527, 5763, 2770, 9974, 1389, 4387, -6029, -6032, 170, -2429, 2272, 1192, -3585, -1941, 1444, -5727, 127, -2629, 6726, 6469, 173, 4554, -4415, -4381, -3005, 4913, 1877, 3577, 2844, 3726, 531, 6116, 2111, 3331, 6690, -1232, 5895, -2875, 2653, -5823, -87, 7150, 3932, 1507, 5060, -745, -277, -2113, -5422, 9680, 3397, 555, 6100, 1861, -5521, 2833, 448, -6990, -2590, 1835, -2379, 1184, -3759, -5960, -4739, 2145, 1015, 5270, 4757, 4727, 771, 1750, 1720, -7737, -1388, -753, 5492, -230, -1719, 8300, -1631, -2459, -2949, -4399, -2163, -1118, -1248, -5335, -3964, 3451, -566, 6689, 2726, -512, 6455, -9163, 6051, -1152, -3285, 9311, -1850, 1122, 171, -3204, -2298, -4587, 3847, 1225, 1077, -1924, 5702, 880, 5746, -2768, 2928, -3358, -1138, 554, 2308, 298, -3974, -417, 8647, -2953, 6377, 5009, 4148, -3863, 1436, 5702, 394, 864, 5940, 1584, 5880, -1193, 5702, 3069, 1884, -2678, -11217, 2700, 3942, -2380, -4278, 3865, -3130, -2894, 3358, 2171, -140, 1391, 3562, -5275, -2233, 2103, -6726, -5310, -62, -1081, -14, -1154, -1981, 2895, 5764, -3011, 1591, 2046, -2440, -3687, -5979, -2978, 4748, -2002, -2954, -1084, 6252, -876, -2119, -2704, -1101, -4782, -1028, -3885, -5913, 6436, -3399, 6159, 1361, -1180, 4510, -2101, 3437, 20, -4799, 7997, -307, 826, -6817, -4990, -2144, -1727, 2408, -264, -2270, -6422, 5436, -4056, 8147, -4324, 2281, -2566, 1300, 2751, -778, -3085, -1796, -1698, 7199, 319, 3965, 2954, 7397, -2045, 2112, 4251, 7835, -3217, 11888, -1395, 2273, -2757, 608, 2902, -2024, 2352, -3602, 78, 4501, -3349, -5888, 5851, -369, 1486, 5543, 2009, -4988, 2153, 2974, -10796, 867, 4620, -2608, 2566, -3277, -200, -653, 3676, -1286, 4867, 7311, 1702, 1456, -449, -933, -6969, -3527, 1525, 4465, 1151, 2866, 1487, -3096, 3246, -2750, -5198, -2899, -1454, -744, -5137, -4476, 2902, -2282, 6677, 1613, 1920, 4809, -6523, 816, 2594, -3574, 5936, -3036, 5330, -1206, -893, -1720, -280, 1269, 1188, -3612, -1572, 2966, -4149, 4113, -1746, 7861, -1451, 1306, 24, -1573, -4131, -274, -1347, 5559, 1396, 5403, 2966, 6429, 3260, 917, 5423, 5208, 3153, 4571, -3772, 1226, -1282, -152, 2324, 2023, 1634, 1174, -2395, 7353, 1627, -5515, 7472, -2715, -3474, 2897, -533, 2828, 882, 5450, -3207, 912, 2564, -931, 2009, 2397, -4086, 585, 1568, 2450, 601, 6312, 2349, 320, 448, -3233, -4416, -2010, 7058, 5817, -1532, -3556, 2330, -470, 2050, -820, -7427, -2394, -894, 1224, -3102, -3899, 4438, -4211, 6493, 3451, -2728, 6233, -1552, -291, -1095, -7341, 7624, 2509, 5002, -4931, 544, -3810, -3716, -2126, -1036, -5450, 265, 4819, -2576, 8278, -2779, 1819, -6261, 265, 4278, 2454, -1085, -2397, 5532, 5304, 201, 3615, 4933, 5815, -2566, -778, 7144, 4790, -1005, 8463, 600, -425, -3430, -795, 2007, 570, 1277, 1255, -2977, 4025, -1531, -6081, 4024, 102, -217, 139, -577, -5176, 971, -655, -7737, -646, 826, -1976, -760, 3034, -2501, -1460, 743, 3822, 5514, 7374, 4190, 889, -1477, -1957, -8869, -2293, -2621, 4222, 2964, -263, 685, 508, 173, -3123, -6330, -2311, -1710, -1289, -8392, -5678, 3573, -5417, 4222, 567, 2059, 9353, -7165, -952, -828, -5290, 10231, 755, 2549, -6363, -5769, -2026, -6083, 4155, 58, -5283, -2633, 3238, -2993, 6523, -1621, 6359, 2186, 3239, 2030, -2767, -6594, -3261, 8946, 1049, -6, 4477, 6038, 1581, 2780, 932, 6316, 3590, -2253, 7850, -1104, -1281, -4172, -412, 2441, 4057, 3739, 2014, 787, 2545, -488, -3324, 6024, -407, 143, 4110, -470, -696, 218, 6573, -3883, -937, 2201, -3757, 5634, 731, -6086, -3038, -1126, 2296, 7445, 6567, 2363, 1865, 1328, -912, -7003, -380, -663, 8096, 2408, -854, 2770, 2135, -488, -1468, -7959, -3236, -1901, 754, -5986, -10043, 8010, 478, 4982, 2682, 889, 7032, -7060, 2677, 3545, -3844, 1626, -1453, 2419, -4585, -2062, -1611, -9041, 377, 2965, 5263, -2729, 5727, 2016, 6478, -2697, 4851, -5397, 199, 1572, 424, -2402, -1924, 2094, 3930, -956, 3667, 3123, 5596, -4288, 709, 6462, 28, -2672, 6242, 709, -2439, -4348, 1954, 453, 2400, -4095, -5696, 4010, 7159, 63, -4513, -817, 3585, 2220, 2191, 5862, 2498, 407, 4287, -4781, 1156, 3687, -6988, -756, -31, -1028, 1291, -656, 2318, 2358, 4878, 1534, 2412, 432, 2789, -7081, -5320, -4111, 6329, 1371, -1831, 3265, 1884, 952, -2143, -4647, -834, -978, -3444, -5521, -4638, 533, -3063, 3543, 741, 2963, 328, -7506, -446, -819, -2682, 4591, -528, 6696, -8646, -6581, -2919, -8467, 730, 1051, -4392, -5128, 1320, -3386, 2736, -141, 5979, 406, 931, 3788, -3338, -5754, -2144, 5015, 3371, 971, 4494, 5997, 5398, 6220, -228, 3837, 1840, -534, 3652, 245, 6021, -7908, -2821, 4613, 5292, 320, 8382, 1350, 5237, -5508, -3992, 3234, 1926, -2614, 354, 140, -4199, -117, 2289, -4613, -3882, 1042, -5046, 321, 2447, -1284, 492, -510, 859, -815, 4298, 5448, -185, 3753, 1875, -4951, -2436, -2140, 4044, 2128, 2824, 5027, 2297, -2274, -5072, -8439, -3402, -616, -589, -3043, -3963, 2989, -3717, 7148, -2609, -218, 4182, -5744, 1612, -1887, -3492, 133, 1991, 10808, -6420, -4491, 2713, -5232, -1126, 4198, 3050, -2143, 4105, 875, 6928, -3450, 5329, -1562, 1537, 679, -1889, 1054, -2469, 6057, 7084, -1596, 3477, 846, 5482, 3579, 2198, 8678, 5263, 191, 6235, 717, 2855, -1219, 1810, 24, 4424, 1744, 279, 3107, 6722, -770, -5668, 4048, 3190, 986, -291, 2405, 428, -1064, 4511, -3803, 3682, 1337, -3728, -4034, 4131, -4554, 130, 4626, 3608, 2578, 7751, 344, 854, -2197, -5827, -3816, -2497, -1956, 5839, 2626, 3366, 4431, 5963, 1370, -928, -5489, -1010, -1232, 1964, -4798, -2490, 3330, -3567, 5049, -2020, -3291, 3219, -8839, 1204, -4717, -901, 630, 889, 4707, -3403, -3878, 1098, -6590, -157, 1136, -2032, -1434, 5413, 183, 3797, -1870, 7715, -3017, 2215, -170, -1734, -1684, -1623, 2726, 5775, -184, 715, 1169, 3211, -1488, 1148, 4811, 6366, -1534, 2946, -2688, 2934, 164, 3737, -524, 3148, 5543, -2092, 424, 3562, -1484, -4843, 5020, 1686, 1289, -1095, 3523, -398, -179, -1250, -6077, 3110, 3900, -1683, 328, -740, -2978, 63, 1325, -805, 2289, 4439, -35, 5871, 802, -4525, -4015, -407, 866, 4754, 3246, 132, 2889, 788, -1249, -960, -3405, -2532, -195, 863, -5510, -4532, 1752, -5775, 4327, 24, -3286, 3373, -5417, -686, 3979, -3006, 8012, -5309, 4200, -5996, -1986, 246, -3660, 1168, 786, -4216, -1536, 7046, -2670, 2918, -2639, 4463, -1911, -738, 846, -5207, -1045, -1742, 1060, 2994, 1283, 3180, 936, 3490, -758, -1972, 5253, 5658, -1718, 9868, -3401, 852, 196, 547, 2631, 1179, 2766, -3430, -1243, 2870, -1035, -7078, 4810, -1697, 2114, -93, 3155, 8, 3354, 1265, -11975, 4342, 4198, -2908, 1911, -1442, -3705, -735, 2818, 1512, 3530, 2874, -55, 945, 536, -3268, -5206, 1922, 2000, 2917, -1433, 2906, 1847, 1169, 3333, -1007, -5988, -804, 780, -22, -9506, -6962, 6120, -2363, 5382, 5428, -1994, 8878, -10382, 6640, 378, -5504, 7165, -4722, 1381, -1581, -1751, -4425, -5866, -2491, 2006, 5641, -2663, 10215, -312, 7485, -764, 6150, -7901, -406, -2791, -826, 1138, -1472, 828, 7988, -1154, 706, 2882, 5802, -205, 3045, 7271, 2814, 3450, 6540, 185, 187, 394, 7669, 619, 3448, -4409, -12407, 4510, 5431, -349, -6387, 2898, 4953, -1264, 504, 4533, 2572, 1481, 3114, -9196, 767, 3996, -3692, -1326, 2623, -1677, -110, 2043, -2881, 2421, 4640, -1268, 3664, -1340, 535, -3544, -2192, -1721, 2141, -3649, -3517, 2365, 3080, 3435, 1236, -411, 172, -3390, -112, -7098, -6188, -308, -2697, -1190, -193, 3391, 3251, -11842, -3761, 2202, 2585, 7272, 4059, 4143, -2285, -6043, 2067, 1795, 2252, 3392, -2370, -4716, 4835, 773, 5436, -146, 12835, -1367, 5837, 2342, -361, -699, -2209, 8384, 2455, 202, 1134, 5826, 4419, 10141, 3765, 1870, 3299, 8, 1805, -1410, -255, -1240, -3167, -434, 5285, 1620, -5610, 2908, 1312, -3357, -7231, 8554, 415, -1837, -86, -2740, 2103, 280, 5275, -5429, 7835, 3097, -9045, 11713, -6683, -7717, -14, 2529, -1792, 6766, 7386, -2947, 1822, 1862, 74, -7165, 4632, 1538, 5534, -4591, -6094, 244, -2810, 1168, 2481, -9217, -2043, -312, 6, -920, -1390, -3280, -4126, 5806, -9019, -1279, -1020, -5279, -1608, 635, 2716, 11803, 4602, 4915, -2301, -443, 5551, -4325, 3903, 147, -4583, 3110, 4426, 2240, 4830, 187, 7672, 5813, 707, 3354, -996, 2051, -2842, 7219, 4275, -314, 4465, 3165, -2122, 10201, 1221, 5218, 566, 990, 3601, -2425, 1868, -2322, -2498, 2504, 4454, 6882, 5363, 61, 1163, -2188, -4297, 3373, -4862, 4263, 731, 86, 3093, -1181, 3041, -2626, 4879, -2030, -624, 1148, -2395, -702, -7323, -2155, 1339, -872, 2249, 2218, -2892, -1301, 1193, -9583, 344, -2744, 7273, -2520, -2767, 2334, 4580, -2221, -1796, -5346, -1190, 2611, 3678, -3460, -1740, 3781, -737, 2157, -1030, -782, 1229, -7962, -680, -4111, -4805, 3309, -2964, 5043, -1110, 384, 1124, -3360, 5195, 1171, -2401, 1393, 4589, 4912, 11097, 2538, 6523, -14, 2522, 2050, -1933, -953, -2867, 4185, 8599, -6390, 6514, 4461, 1298, 504, 985, 6109, 2388, 927, 4433, -2602, 1954, 629, 3163, 468, 4549, 2415, -1420, -3599, 6691, -2352, -6042, 5747, 284, -1392, -2314, -1198, 4896, -2459, 3787, -1665, 4805, -53, 1129, -6508, -1857, 1150, 2987, -2442, 1055, -4083, 3489, -3961, 739, 628, -2803, -5991, -5892, -4531, 7829, -91, -2868, 2694, 1840, -1108, 1118, -9943, -819, -5564, 2693, -53, -5549, -919, 10015, -898, 3093, 7661, 2537, -9777, 1512, -542, -7459, -3667, 1064, 518, 2767, -4005, -1535, -140, 4740, 1600, 7744, -2250, 4847, 2056, 12079, -3855, 6187, -6547, 2794, 250, 4461, 2015, -4438, 1473, 2887, -3165, 4241, 6678, 10851, -1133, 3008, 7584, -869, 1496, 3505, 2730, 3082, -6436, 6804, -3686, 7895, -5293, -1634, -2028, 7378, -6388, -6053, -3551, 4692, 76, -1733, -1769, -1398, -742, 6776, 4806, -1084, 2283, -6245, -6239, 3795, -388, 6268, -4901, -920, -378, 4355, 2291, 7822, 672, 10, -1188, -3046, -5786, 1510, -1227, 1478, 5572, 7116, -4527, -1253, -6329, -3775, -2920, 2470, -107, -8093, 3604, 1318, -1989, -1139, 5720, 1912, 2258, -4121, 564, -11920, -133, 5245, 4941, -7087, -2549, 3498, -1349, -568, 3667, 2486, 1989, 6777, 2231, 7710, -655, -1838, -5011, 2452, 820, -1212, 3541, -4275, 7756, 4339, -1070, 8292, 4449, 7553, 4592, -776, 6766, 3288, 2873, 3269, -3160, 4368, -1797, 3580, -1396, 6144, -3110, 3934, -7006, 8413, -5400, -8583, 51, 3704, -2229, -2873, 271, -544, 1585, 2510, -1483, 3250, 1098, -4314, -5295, 5742, -3257, 3215, -1454, 229, 121, 6416, 1979, 6619, -2581, 1054, -6656, -2805, -4557, 3031, -1443, 2163, -1416, 5960, -2135, 665, -6230, -4634, 1266, 1213, 1492, -3119, -4626, -2572, 922, -5149, 2646, 3370, -4791, -7396, 1543, -3308, 7967, 2134, 4395, -1743, -2335, 3814, -1522, 1652, 501, -5096, 4216, 4674, 4317, 5960, -4204, 6037, 465, 4263, 2930, 1243, 7638, -2580, 8543, 3011, -2145, 7629, 3445, -4121, 10099, 5360, 4750, -5263, -2225, 284, 2908, 1901, -308, -5590, -1351, 7533, 4661, 7193, -7284, 5068, -2781, -7244, 6111, -5115, -1923, -1855, -7495, -3528, 3287, 5132, -3623, 7209, -2036, -3152, 1234, 4053, -3671, 24, -4972, 4189, 1139, 7674, 2676, 729, -3744, 881, -6478, -2306, 2880, 4998, -1416, 2471, 4405, 5347, -2256, -2841, -11026, -3691, 2154, 2077, -1292, -1457, 4344, -87, 1780, -5322, -569, 3855, -9925, -1678, 5299, -1528, 5455, -343, 3091, -3193, -2659, 4242, -8230, 2295, 3290, 2011, 2799, 3416, 4292, 3913, 1270, 3059, 2972, 1869, -952, 106, 4973, -3510, 1206, 2096, -3232, 4900, 2103, 899, 6844, 537, 3744, 2766, 5758, 2312, -1101, 6460, -1301, 1687, 4952, 5449, -4077, -1508, -45, 9795, 395, -5907, -2103, 3418, -1306, -2170, -183, 6375, 1521, 5080, 473, -494, -190, -4330, -8152, 1516, -718, -443, 796, 2011, 1021, 2799, -582, 848, -2502, 4008, -6758, -2743, -1850, 5429, -4416, -2021, 4725, 953, -419, -1941, -5990, 759, 2933, 3158, -3389, 188, 2064, -7338, 3517, -3438, -4454, 1746, -3049, -636, -629, -532, 4189, -1832, 9911, -2637, -1742, -85, -1968, 174, 2222, -2050, -414, 2853, 5347, 3684, -872, 7839, -420, 2314, -1570, -1595, 110, 1016, 2037, 2642, -2060, 3944, 1118, 897, 4331, 6071, 4705, 3422, 4376, 2899, 713, 1450, -1687, 1545, -2621, 4017, 1752, 2678, -1641, 3164, -3098, -6957, 1612, 3330, -1380, -1504, 2749, 666, 897, 2382, -4764, 2180, 1843, -2568, 671, 4721, -3660, 2836, 977, -195, -4882, 5975, -830, 3555, -465, -3112, -93, -785, 1724, 3453, 5738, 1121, 5109, -104, -879, -1678, -4308, -2144, -1109, 2290, -3748, -4858, 6841, -1039, 5777, -3695, -4336, 3602, -6307, 61, -8851, -6897, 2616, -1601, 3626, -1413, 598, -1866, -7721, 1334, 6778, 6100, 2351, 6724, -3471, 6547, 1521, 2085, -189, 139, -839, 2297, -2500, 1257, -2197, 11209, -5150, 1698, -2955, 1353, -629, 3939, 7376, 2532, 5444, 4787, 1819, 773, -3278, 10277, -3625, 7362, -3990, -5622, 1019, 5694, -757, -7296, -4057, 3804, 1323, -391, 958, 2985, 1871, -5378, -2035, 866, -356, -190, -9606, 4374, 2001, 1001, 581, 2207, -8113, 3616, -3966, -85, -885, 1585, -3389, -9393, -4120, 6733, 78, 5164, 9045, 5723, -3880, -3471, 2514, -1994, 3171, 3437, -2020, -325, 5637, 2036, 956, -2498, -159, 1403, -8794, -762, -7933, -2058, 3364, -1886, 5900, 2749, 1162, 1102, -3797, 2252, 2682, 1826, 3612, 2240, 3855, 5710, 4678, 2989, -1755, 94, -206, 1198, 2975, -1404, 421, 7394, -2784, 1977, 563, 1399, 1604, 6245, 5711, -1049, 5716, 900, -2916, -325, -384, 5436, -4322, 2797, -801, -8412, 1531, 2523, -4491, -6877, 1591, 3315, -2529, -4017, 2875, 8123, 603, 1871, -1073, 5047, -1899, -6237, -7213, -394, 3819, 2432, 331, -1325, -2699, 2850, -6558, 1409, 2472, -3654, -1505, -2614, -2009, 6093, -2965, -5831, 242, 3148, -1703, 1020, -4712, -1664, -2269, 3251, -3314, -3802, -181, -4101, 3515, -7958, -2663, 2307, -4325, 1664, 446, -1915, 4080, -581, 3101, 832, 3674, 7588, -1317, 6664, 2383, -1063, -57, 3220, -40, 4895, 855, 5077, 1802, 2834, 1394, -2524, -1082, 1719, 1406, 3810, 2000, 4335, 4666, 3093, 6404, 1935, 3442, 6328, 1667, 1303, -2263, 3290, -1577, -2867, -699, 4624, 4259, 3143, -3301, 9048, -905, -7079, 7703, 1716, -1197, -1603, -338, 762, 1612, 8893, -5945, 5932, 2756, -2271, 3107, -609, -3046, -3087, 1221, 900, 682, 3737, -1885, -449, 3923, -165, -8200, -469, 4073, 4585, -2171, 4060, -1610, 4055, -491, -3992, -9056, -4719, -1629, -6, -4856, -5189, -903, 834, 3800, -3531, 101, 4765, -7950, -1422, 1493, 352, 3791, -5936, 2552, -1158, 2278, 9471, -2014, 3276, -3145, 1858, 756, 3713, 3910, 4759, 5661, 5667, -308, 1597, 686, -4324, -2251, -285, 2436, 1428, 1593, 2804, 2429, 1359, 3781, 966, 3766, 5371, 39, 6478, -3900, -2258, -939, -2229, -30, 4017, 396, -3321, 3259, 2966, -1394, -7233, 5632, 3073, 1926, -4842, 6691, 2960, -723, 8151, -11368, 6112, 1745, -3791, 3959, -1382, -2079, -1377, 241, 642, 5178, 746, -3420, -914, 4230, -3253, -7595, -2017, -1502, 4555, -4351, -5972, 151, 2363, 3103, -2840, -9199, -2884, -1378, -715, -2974, -2089, 1782, -4713, -2373, -3057, 2741, -992, -4804, -5034, 3009, 3755, 632, 4692, 9713, -1756, -686, 5463, -2306, -2287, -743, -4600, 738, 787, 4332, 1324, -1030, 9761, 1210, 5764, 3948, -6282, 3969, 18, 10548, -4327, 1642, 3202, 4695, 1561, 2097, 4298, 3050, 6041, -192, 186, -2404, 794, -1245, -5770, -3489, 8658, 6489, 1640, 1280, 2274, -1536, -7621, 5251, -588, -2776, -2469, 2827, 2906, -1173, 6545, -7185, 3504, -2151, -5482, 6104, -7877, -1411, 3937, -4143, 2046, 3162, 3213, -3399, 1168, -971, -5738, -2655, 6097, 6364, 6844, -2846, 939, 4371, 2328, 1238, 1935, -8402, -3932, 946, -1692, -3043, -3285, 3615, -6404, 2927, -3322, -2069, 606, -9602, -354, -946, -2053, 7445, 2166, 11021, -3468, -127, 7093, -4135, 3600, -262, -2674, -1909, 4310, 8413, 5537, 6067, 5702, 235, 718, 4608, -3720, 2130, -198, 7376, 3666, -10626, 5024, -299, -2587, 11516, 1493, 1656, -3156, -1586, 5897, -420, 6468, 3138, -2567, -5820, 5753, 149, -8004, -528, 6949, 244, -6656, 5197, 1755, 435, -6691, 3153, 2365, -986, 3611, -7174, 6067, -1875, -7142, 4850, -5903, -4764, -1288, 2744, 2530, 228, 3605, -4730, -4580, 4143, -3274, -7025, -1023, -5695, 2762, -2347, -1624, 4912, 1092, 2282, 416, -6188, -2393, -3784, 673, -8825, -5738, 5834, -4880, 6203, -991, -3329, 11806, -14571, 5359, -1468, -5526, 4814, -6849, 2347, -4221, -1646, -636, -6338, 3171, -665, 3307, -1084, 6448, -2392, 8229, -2579, 6571, -5211, -1139, 723, -2986, -2366, 8, -946, 5376, -1217, 4828, 987, 4622, -668, 1301, 8483, 6775, 4261, 8951, -1972, 471, -915, 3857, -847, 4895, 1216, -9868, 2143, 8434, 2035, -6270, -770, -404, 2013, -1337, 4178, 4981, -685, 5397, -8459, 2515, 4111, -4114, 2978, 2820, -2375, -3197, -393, 2126, 1126, 4386, -3924, 1906, 294, -3334, -5938, -2805, -2176, 2944, -1402, -4790, 1057, 3045, 3332, -1228, -7007, 463, -1318, 1833, -1760, -2143, 5001, 1068, -901, -3731, 124, 4642, -8191, -3657, 4031, -4547, -712, 2013, 7409, -3232, -1019, 4796, -2134, -452, 3688, 730, -759, 6580, 907, 4402, -6755, 7816, -2919, 3454, 1709, -1487, -697, -3071, 2520, 3409, 48, 4318, 2361, 6181, 4104, -3178, 6081, 4535, 1712, 6314, -3388, 117, 762, 3850, 1914, 7600, -887, -2500, -1024, 6493, -5481, -8009, 3109, 1698, -1776, -3219, 4350, 3649, 1261, 6181, -4880, 2093, 5110, -2474, -2908, -5104, -4133, 378, -2338, -3586, 2592, 5269, -5529, 3428, -4563, -3956, -1343, 346, -1988, 4165, -1167, -1171, 2099, 2440, 3797, 2272, -10012, -1132, 3938, -2112, -2156, -3627, -530, -3535, 1809, -3982, 911, 609, -9709, -2263, -513, -269, 8385, -7485, -1476, 576, -229, 2488, -3360, 2891, 2989, -451, -545, 2651, 2179, 6244, 660, 6973, 1890, -774, 701, 3208, -859, -878, -1151, 8499, -4338, 3027, 2874, 6556, 3694, -1591, 664, -5979, 3686, 1848, 245, 880, -1622, -3577, -575, 2049, -3688, -5022, 828, 4464, 759, -4228, -604, -4579, 2064, -6610, -3825, 7809, 1189, 9492, -2068, 7515, -4027, -6197, -2391, -5319, -3234, 3634, 396, -639, -3920, 3646, -6394, -2087, 641, -2264, -8541, -1220, 1777, 3351, -5070, -8077, -1691, 1738, 3104, -825, -7491, -743, 905, -1259, -3826, -2019, 1158, -2197, 3664, -2453, -1171, 3744, -8298, -1569, -2708, 471, 7762, 1389, 2728, 213, -288, 2315, -4536, 904, 555, 100, -693, 1241, 4262, 6476, -1071, 6403, 8, 2657, 1826, -274, 2154, -3946, 4139, 2908, -1601, 5973, 4405, 2419, 6795, 5079, 4561, -354, 2659, 1195, 363, 6290, -3193, -982, -2188, 4031, 3923, -5278, -1732, 3549, 1204, -3080, 2785, 896, -355, -2604, -938, 1833, -994, 3821, -2526, 5634, -2261, -7264, 2904, -53, -1557, -662, -123, 206, 1568, 5369, -700, 220, 2103, -89, -8435, -1385, -2005, 5412, -3472, -3949, 2475, -135, -978, -1553, -8979, -1303, -2668, 359, -3980, -8845, 3446, -1338, 272, -571, 4933, 3906, -8499, 842, -1180, -871, 1352, -238, 5032, 225, -260, 115, 1392, 2746, 4084, -1393, -3989, 5249, -1826, 7778, -3999, 11782, -6616, 3659, -2268, -1322, -604, -296, 4913, 1153, -2092, 6290, 5538, 4029, 3612, 1405, 6791, 6043, -2578, 6829, 824, -1057, -1826, 2647, -4712, 5411, 3277, -6799, 896, 5283, -1748, -9480, 6550, -854, 3046, -1565, -40, 1474, 1290, 7106, -10871, 5535, 4156, -9415, 5653, -1042, -1273, 3306, -781, -1987, 1330, 7699, -7387, -1260, -4367, -368, -2735, -1846, -4676, 2930, -452, -3088, 2876, 3036, -61, 1921, -10164, 2537, 172, 3242, -4407, -4220, 3247, 2516, 1309, 3396, 684, 2065, -6907, 6, -4638, -2611, 3642, -4610, 3164, 2593, -3734, -1511, -4633, 2755, 2453, -2221, -788, 4101, -1475, 5857, -3079, 8160, -1188, 973, -1282, 1053, 854, -5350, 688, 3656, -6068, 3089, 3531, 5486, -1136, 2602, 5851, -1205, 93, 3649, -1994, 3388, -1960, 3478, -3571, 4358, 1069, -5085, 1393, 450, -6128, -5355, 5768, 1412, -509, 643, 554, 6315, -423, 3916, -2839, 911, 970, -5395, 394, -4243, -2052, 3962, -5263, -3214, -411, 3657, -5505, 5319, -844, -1437, -2136, -121, -2615, 3997, -4719, -4238, 4156, 3349, 219, 2113, -3377, 1024, -5421, 2601, -4252, -3419, 1968, 1791, 3228, -945, 2614, 8364, -6796, -1446, -1545, -3013, 4070, -2711, 1658, -1766, -655, -1482, 1702, 515, 1943, 2233, -955, 5358, -2018, 4936, -4015, 7877, -4442, 2350, 383, -1100, 3295, -2592, -866, 4316, 2649, 1980, 2025, 1679, 1948, 1462, 7653, 818, 1544, 7474, -1711, 1092, 1624, 3560, -2016, 8495, -125, -5748, -530, 2176, 1535, -8282, 3350, 3316, -27, -240, 69, 1299, -2478, 3426, -6041, 3799, 2893, -3930, 1259, -104, -5985, 2287, -1167, 403, 4864, 4799, -840, 3341, -1922, -3691, -5764, -3636, 3511, 2372, -4615, -3042, 2895, 1292, 720, 2800, -7384, -2716, -206, -230, -2791, -4427, -1896, -78, 4675, -1475, 2596, 3230, -12439, -587, 506, 4278, 6488, 4065, 7127, 2012, -5303, 1001, -1835, -676, 1094, -1180, -1527, 3655, 2990, 6636, -1250, 12855, -4230, 1534, -2081, -796, 2889, -3045, 7734, -43, -495, 4947, 6612, 6030, 9091, 4544, 6644, 2893, 4113, 2237, 450, 3935, -2144, 526, -240, 1333, 3722, -5088, -68, 3243, 174, -2924, 2625, -1884, -2549, -1243, 1123, 4567, 1493, 11302, -3259, 4430, 2686, -9445, 294, 3267, -1365, -770, 170, -4887, 4633, 2627, 1149, 906, -713, -658, -4310, -1326, -2214, 4114, -2978, -2174, 1100, -507, -84, 760, -6166, 1702, -676, 2581, -2166, -406, 6092, 4315, 3505, -378, -2669, 1688, -5995, 1702, -2074, -8725, 5260, 2545, 6118, -1460, -391, -4576, -4015, -1922, 1514, -84, 2242, 5058, -2119, 8991, -1748, 3673, -4802, 4675, 764, -171, 1570, -1321, 1709, 6863, -3271, 6466, 3100, 9620, -691, -1653, 8153, 4189, 404, 6012, 278, 1866, -1593, 8647, -4551, -251, 3133, -2463, -4620, 5125, -6377, -6453, 2801, -2663, -2018, -2964, 69, 773, 1959, 4382, -1922, 2818, -87, -4416, -7248, 3152, -1690, -229, -2610, -1037, -968, 5507, -1132, -527, 1519, -1995, -3692, -2648, -2258, 4780, 1535, -574, 1666, 4613, -743, -357, -8141, -3407, -475, 2925, -3205, -2262, 3738, 1145, 2705, -3274, 2946, 3466, -8798, -48, -2216, -4142, -2645, -198, 2634, 3487, -1222, -2525, -3786, 4736, 1394, -5446, 1774, 594, -2934, 3757, -2012, 4903, 712, 3725, 438, -3059, -4580, -1528, -4327, 5620, 2126, 5422, 2239, 7539, -1052, 2550, 7978, 1095, 5368, 4328, -1892, 4248, -5743, 3912, -1904, 2313, 1733, 216, -2170, 3101, -4794, -8741, 6895, -3445, -4467, 2541, -1906, 2676, 1900, 3394, -2576, -673, 1533, -2278, 93, -1148, -4619, 1234, -5828, -730, -1243, 4739, -2361, 2979, -225, 2078, -4814, -2064, 4380, 6866, 864, 1232, 1899, 8218, -1756, -2322, -7944, -3689, -3448, 992, -1628, -5154, -1330, 4888, 2400, -1926, 3090, 5065, -5682, -561, -5430, -3506, 3393, 5902, 5620, 366, -2623, 2012, 821, 1693, -563, -3277, -200, 3528, 1927, 10729, 6878, 3835, -2275, 9306, 4010, 3591, 5059, -4107, 10911, 2681, -4858, 10049, 6915, 1423, 5164, 6844, 7268, -4576, -2321, -604, 2687, 5698, -8211, 680, -8441, 7096, 7222, 137, -8112, 2287, -7772, -7086, 6468, -2324, -5473, -1536, -7651, -6759, -194, 3602, -2775, 6485, -2268, -10609, 6451, 3636, -3486, 986, -9242, 4100, 1432, 7092, 256, -330, 5474, -852, -4308, -779, -8204, 4152, -4271, -3524, -3880, 6215, -7590, 24, -9892, -8834, -3973, -2898, -3913, -5968, -340, 5604, 3549, 781, 6614, 6210, -9152, 1070, -5358, -3006, 3567, -1378, 458, -1037, -2164, 2552, 1750, 1779, -192, 3662, -3954, 4688, 2222, 9068, 4519, 3487, -2491, 142, -2918, -1630, 4881, -2556, 6686, 5987, -1026, 3975, 5412, 2137, 78, 4291, 4687, 2707, -3799, 9473, -950, 205, -376, 4487, -672, 5127, -659, -9029, 2897, 3399, 1013, -6786, 5677, 5641, 5804, -1805, -50, 4771, -261, 3673, -5068, 3094, 2437, -5465, -1889, -2039, -1603, 4930, -1165, -3605, 6881, 5040, -3143, 1592, -1645, -225, -7534, -6567, -2969, 5020, -1266, -6065, 2027, -3746, 2734, 3031, -6859, -3607, 692, -1333, -2201, -1533, -739, 1610, -753, 2231, 7359, 4541, -6773, 1728, 3344, -3752, 4955, 5920, 2710, 5146, -1637, -700, 1815, 965, 1012, 410, -2626, 892, -3029, 5269, 445, 3172, -2853, -734, 37, 2088, 2652, -6447, 4781, 590, -3882, 6232, 3229, 959, 3383, 2979, 3336, -1600, -1526, 8909, -1304, 905, 888, -442, -1877, 5301, 4493, -1603, -2295, 1488, -2945, -5225, 8342, 3630, 4526, -3893, 1056, 4014, 2128, 3056, -388, -3325, 2248, -5978, -56, 398, -5638, 6505, -2861, -351, 3438, 2401, -2414, 814, 90, -1868, -3990, -7885, -1715, 3313, -2510, -4417, 8174, -2238, -1179, 1699, -6406, -3052, -3246, -1538, -1410, -4079, 2775, 63, 5805, 718, 3667, 9308, -7674, -624, -2267, -7221, -895, -5752, -3055, -5967, -976, -3574, -5665, -984, -184, 3189, 1923, 220, 118, 7272, -6634, 3031, -4987, -401, 3826, -2674, -2426, -1640, -232, 7692, -2258, 6244, 2890, 7679, -3941, -3672, 6640, 2931, 4338, 4553, -882, 1813, -1739, 2070, 1484, 3220, -3765, -894, -1382, 5584, 2082, -6019, -1205, -1270, 808, -1133, 663, 6253, 1806, 7615, -920, 893, 141, -1347, -5093, 3943, -3748, 990, -1020, 1085, -2806, 5296, 1914, 4790, -410, -3504, -8495, -1786, 2810, 3955, -719, -3503, -2567, 4039, 2483, -2330, -6042, -1290, -5238, -1531, -2814, 606, 3937, 1787, 1797, 1356, -3313, 2432, -13121, 4030, -2140, -1810, -1209, -4623, 2742, 928, 3766, -552, -7865, 3515, 217, 6233, -1877, 4720, 4045, 6915, -434, 3961, -4186, -1066, -1853, 3019, -182, -3168, -657, 8225, -5636, 3764, 3539, 3670, -3772, 3490, 6623, 4015, 5672, 5524, 2056, -1158, 1530, 2159, -717, 5134, -6473, -9789, 4853, 8851, -1664, -5939, -2611, 2604, -1371, -1841, 542, 5637, 1322, 6966, -3843, -334, 2818, -5907, -9673, 3981, 905, 4671, -1968, 1767, -15, 1678, -1917, 1547, -1483, -2156, -3889, -1343, -4709, 3280, -2092, -3179, 4467, -1449, -1714, -3637, -3695, 1168, 1691, -229, 1239, 103, 1246, 1028, -157, -7899, -3835, 2964, -5414, -3700, -2265, 501, 4996, 1860, 306, -651, 2887, 4414, -2413, 617, -863, 2809, 1417, 3329, 4928, 4650, 1198, 2764, 3179, 1470, -1531, 5035, 3128, -3462, 1316, 6948, -2884, 3924, 888, -5, 5549, 5876, 2181, -971, 4645, 3487, 24, 1586, 3215, 2370, -1147, 5662, -2302, -6162, 2731, 2685, -501, -5228, 298, 5234, 334, -2877, -1451, 6405, 1013, 2305, -2149, 5191, -105, -2284, -2608, 1163, -2149, 1299, -3140, -4517, -1365, 3946, -4903, 1468, -3381, 610, -5749, -2550, -2843, 4958, -4164, -3899, 3852, 1663, -3027, -114, -4928, 1017, 1599, 1422, -2244, -2511, 758, 2154, 1871, -4449, -1658, 483, -9540, 1391, -3003, 4015, 1420, 2383, 6130, 564, 481, 2442, -4126, 3708, 4137, -5995, 1830, 732, -280, 324, -3455, 7591, 7875, 5374, -2168, 292, -2563, -2611, 2456, 3497, -3160, 2039, 3948, -2051, 5458, 743, 3087, 4478, -2101, 2830, -607, 4229, -3657, 1832, -656, 6443, 7453, -2027, -1595, 90, -3203, -5317, 9888, -928, -2997, -701, -3239, 981, 681, 4140, -3679, 2215, 1144, -6386, 6052, -2043, -3187, -1529, -285, -2873, 1179, 5264, -7689, -3991, -452, -3294, -1921, -1248, 186, 5009, -2175, -1320, 4278, 4523, -3377, 431, -9135, -861, -349, 3413, -2805, -532, 182, -1847, -309, -5811, -6522, 2248, -5570, -2143, -3053, 2387, -138, -3849, 5597, -457, -851, 7758, -5776, 4793, 656, -4375, -906, 2094, 2034, 4157, -1850, 5067, 3101, 8019, -4651, 4531, 6405, -4154, 3417, 3265, -805, 3672, 2528, 2577, 6685, 3721, 4995, 1729, 1865, 3528, 595, 1987, -2758, -2974, 1853, 886, 5786, -9479, -2274, 3449, -2625, -4180, 1208, -1778, -208, -3191, -2202, -3002, 1545, 3313, -7012, 8839, 461, -7702, 1183, 1248, -993, -4116, 636, 819, -1093, 5737, 23, -3469, 1710, -4278, -4921, 2933, -5173, 3397, -6996, 439, 755, 622, -2265, -3784, -10846, 477, 2968, 4804, 135, 940, 4247, -4938, 4409, -5344, -5286, -2399, -8084, -1946, -3796, -302, 3, 2956, 9363, -481, -2217, 2447, -5292, 2995, 2607, -4123, 189, -280, 3042, 756, 1083, 5686, 3103, 1316, 120, -1962, -1885, -1637, 854, -76, -3006, 1509, 763, -3793, 9722, 2428, 2791, 1703, 783, 368, -2042, 856, -3058, -4829, -3062, 5834, 5292, 3303, -3595, 2924, -2870, -2394, -1201, 3074, -2498, -2685, -25, 311, 722, -4493, -4685, 541, 40, -4333, 147, -1227, -1780, -3424, 1112, -869, 34, 3269, -360, 877, 3232, -2730, -2372, -854, 420, 3340, 2805, 118, 6611, -1364, -2517, 368, -5943, -1864, -414, 2881, -5153, -304, 5272, -222, -763, -3366, -4115, -252, -4593, -2444, 4130, -2247, 7854, -898, -376, -1428, 2882, -430, -3130, 3327, 4360, 1254, 1616, 1862, -960, -1267, 3249, 2450, 3953, 3198, 532, 271, -747, -1898, -417, 3355, 3979, 2172, 1474, 82, 9736, 1508, 3757, 3617, 3657, 860, 1810, -6475, -3978, 3979, 3917, 6556, -1583, 1903, 336, 143, -2049, -6422, 5404, 1350, -2442, 3281, -328, 3495, 3956, 1023, -4720, 1534, -13, -2891, -2783, -2135, -3369, 646, -4085, 3365, 1982, 833, -4918, 19, 2295, -1526, -4454, -2007, 6214, 5818, -3918, -5616, 1775, 568, -1190, 1094, -4390, -432, -2238, -224, -2180, -5335, -84, 1714, -2520, -2114, -1394, 724, -8857, 3618, 2212, 611, 3260, -2195, 2609, -26, 1363, 4549, -2165, -764, 3567, 3612, -2265, 4615, 7023, 6780, -3193, 5827, -4564, 1432, -5438, 4031, 4725, -1707, 2839, 5961, -3350, 4857, 5098, 3478, 2619, 4424, 7520, 2898, 2149, 3446, 558, 1223, 563, -606, -2077, 2795, -4155, -8592, 3678, 3219, -2897, -8173, 3611, 552, -336, -1789, -791, 6386, 3370, 4552, -5088, 4596, -234, -6125, -3989, 3648, 352, 5382, -1335, -1312, -2597, 2660, -3703, 671, -2246, -464, -3426, -2481, -2677, 4550, -4041, -3122, 2070, 5164, -1079, -317, -5339, 2082, 473, 2855, -5170, -4165, 3527, 1032, 1682, -2195, 2133, 5938, -17676, 3425, 566, -2889, 1821, 2336, 7119, 4466, -3288, 2380, -22, -69, 613, 1412, 495, 3302, 4794, 7838, 1791, 6326, -1861, 4951, -761, -1399, 5759, -3166, 4837, 1574, -7272, 7164, 1572, 1045, 3426, 5059, 9867, -233, 5472, 1365, -2263, 2222, -472, 5139, -6044, 5680, 2401, -7436, -1886, 1830, 235, -10141, 5806, -1460, -3897, -6713, 820, 8094, -2265, 8560, -4596, 1559, -1271, -5371, -261, -550, -2622, 2763, -3276, -3514, -2691, 2861, -9615, 277, -698, -5136, 935, -3935, -7393, 2535, -2293, -8553, 1918, 3292, 2004, 5446, -9969, 1475, -1113, 3636, -2729, 613, 5571, -116, 2018, -1660, -5030, -1705, -1898, 2546, -3474, -7533, 5930, -989, 1666, -6045, -2414, -2663, -10278, 1579, 309, -3570, -344, 3613, -3814, 7021, -3179, 3508, 555, 731, 1427, -1385, -1947, -2777, 1711, 7272, -643, 3316, 3073, 4987, 1273, -2677, 8007, 8859, 3610, 8900, -868, -1453, -7278, 7400, 2052, 3910, 509, 5782, -383, 3063, -7235, -3461, 3056, 218, -2459, 2382, 240, 1872, -318, 386, -639, -2461, 1020, -3182, -6274, 469, 481, -469, -4801, -640, -176, 4220, 1930, 2904, -2393, -2201, -1981, -3640, -4659, 5982, 2223, 1692, -1533, 5520, -3389, -750, -1715, -3211, 922, 1707, -1606, 3923, 984, -1714, 2530, -3533, 8, -4334, -8056, -1628, 2230, 197, 5157, 95, 8720, 804, -3119, 2627, -1156, 4328, 1339, -1307, 2466, 2668, 3828, 5310, 3957, 5652, 5244, 3023, -1908, -464, 1098, -3488, -408, 4945, -846, 3756, 3291, -652, 8273, 5385, 5222, -2756, 3787, 1631, -1294, 1870, -3223, -3759, 370, 6355, 3427, 1787, -1209, 1965, -4412, -3529, 5246, -397, -2632, 89, -3354, 767, -1057, 3334, 695, 1491, -1957, -2498, -225, 489, -3686, -3332, -3017, 64, -679, 2487, -1544, -2353, 2638, -800, -3627, -2641, -374, 6316, -4657, -5484, 4197, 701, -219, -559, -7613, -4073, -2276, -2987, -8833, -985, 123, -2464, 5893, 686, 603, 4278, -6562, -376, 1620, -2151, 11534, -117, -2109, -3954, -338, -3945, -7896, 2634, -1442, -1255, -405, 457, 256, 3455, 88, 6461, 5709, 1285, 277, -1325, -3820, -4463, -1469, 2554, -1495, 2562, 4030, -4096, 3162, -221, 5282, 2329, 2302, 6567, 78, -494, -3722, 4097, 4261, 451, 1905, -4194, 1570, -1477, -777, -3092, 5015, -3422, 2408, 2772, -2401, 7671, 2704, 4214, -437, 1530, -2787, -4955, 2325, -2078, -3381, -2095, 546, -521, 3993, 2281, -356, -1914, 1311, 725, -10274, -3273, 4930, 8265, -1850, -5110, 1447, -2981, 2912, -435, -4723, -806, 2896, 4021, -3571, -2347, 1528, -7216, 3435, -21, -527, 475, 1823, -606, 1652, -8937, 2871, 5551, 1183, -2200, 2512, -5718, -2412, 4571, -738, 1248, -384, 3082, -929, 6100, -247, 5426, 3274, 2912, 1602, -1532, -2265, -2082, -1079, 2512, -106, 5532, 3991, 5305, 6029, 2688, 8797, -5546, 3343, 5475, 6278, 5395, -2837, -2399, 159, 2880, -1148, 1529, -6346, -824, -1413, -1759, 651, 1786, 721, 1043, -223, -2763, -238, 4134, -4421, -808, 3877, -463, 1847, 1730, -4256, -3668, -5391, -402, 2913, 5858, 2258, 971, 75, -2999, -7000, -2373, -2000, 2380, -37, 384, 5189, 5610, -2690, -2617, -2804, -5585, 2346, 2942, -2873, -1086, 4657, -420, 2480, -3890, -2632, 866, -5323, 2368, -967, -1089, 6332, -427, 5501, -176, 1245, -4013, -7273, -301, 3458, 1688, 4446, 3466, -556, 3839, 908, 3406, -2948, 514, -690, 2926, 1398, -1918, -968, 5719, 1050, 3630, 1508, 1075, 1249, 2445, 7096, 4426, 3651, 2497, 832, -2063, -757, 5488, -1182, 645, -1432, -3469, 2834, 2241, -464, -9663, 1825, 1549, 184, 4134, 4296, 4531, 3158, -304, -3152, 641, 121, -5171, -5441, 5596, -357, -34, -1192, 2055, -796, 4576, -1448, 96, -321, -34, -3204, -2954, -1060, 7047, -617, -1536, 3150, 4502, -3220, -2335, -1826, -590, -2221, 4003, -4854, -1522, 3246, -684, 3295, -2274, -5860, 2097, -3637, 4449, -506, 465, 9739, 1347, 8905, -1103, 1797, 3221, -4176, 1631, 4104, -6766, -157, 1673, 3630, 7771, -1958, 5194, 833, 5494, -2095, 229, 2595, -2062, 1094, 7462, -788, 1478, 1863, -1635, 8244, 3965, 5132, 6606, 2379, 7274, -2328, 2058, -2206, 2800, -71, 2205, 6050, -9803, -2035, 4712, -7432, -1868, 4826, 1767, -4267, -1894, 2205, -3170, 1630, 601, 1085, 5182, 3542, -5462, 465, 1162, -1827, -2991, 4446, 2371, 2336, 4040, -779, -1103, 3480, -3072, -3478, -780, -4637, 7410, 72, -5987, 5013, -2212, -1413, -534, -8253, -1533, -2673, 1113, -3515, -2311, 721, 3136, 8604, -120, -7181, 674, -4742, 2005, -1787, -4742, 8550, -4915, 7369, -7103, -316, 1998, -4642, -57, 3013, -4974, -1399, 2415, -3415, 6329, -6154, 4399, 3446, 3222, 2113, -198, -978, 678, -759, 6116, 2282, 966, -599, 2257, 2009, 1116, 6265, 10068, 1412, 9392, -3925, 757, -6334, 2252, 2428, 3615, 1487, -3743, 2340, 5329, -4383, -5881, 5723, 968, -4183, 1523, 981, -1066, 2652, -1337, -437, 678, 304, -723, -4384, 18, -1997, -5161, 3867, 4029, -2002, 4963, -317, -3125, -211, -4054, -2722, 1149, -2229, 7379, 551, 358, 6878, 1080, -1180, 1177, -1529, -2755, -3964, -117, -4424, -2882, 9902, -2905, 4558, -3808, -4907, -857, -989, -2363, 4770, -4802, 6673, -3724, 6499, -6152, 160, 2609, -1544, 1730, 2349, 695, 484, 3233, 232, 3917, -923, 3132, 1011, 112, -1179, -2430, -2998, 9, -2359, 4580, 2024, 1935, 4047, 7474, 4034, 1218, 4237, 8457, 5608, 7145, -1430, 3902, -1971, -3724, 3955, 1717, -182, -1911, 3105, 6263, -1473, -5893, 7673, 3453, 2608, 1560, 2335, -3166, 1737, 9595, -8857, 5423, -1426, -3083, -1434, 2163, -1832, -1497, 4056, 2419, 1230, 4416, -1149, 434, 1116, -804, -7993, 2287, 3440, 3804, -866, 2437, 1802, -1230, 1513, -3783, -6433, -1973, -619, 3, -7474, -4140, 6675, -4317, 6340, -1503, -2601, 5751, -6409, 4152, -1203, -3793, 10575, -5984, 2795, -4623, -2443, -1497, -5197, 1598, 2373, 2512, -2, 3889, -4049, 5843, 803, 3442, -3187, 365, 1440, -1693, -224, -2444, 409, 6379, -302, 3901, 3463, 4667, 2127, 3258, 7068, 4741, 5926, 4505, -1727, 552, -5878, 3077, -2112, 1621, -40, -4291, 2519, 3929, -700, -8342, 2118, -833, -6, -3, 2263, 3690, 1310, 6650, -5457, 3355, -85, -5085, -182, 2239, -2435, -2685, -2742, 2374, -842, 5699, -2184, 46, 1201, 2439, -7147, -1475, -2818, 4390, -5145, -4748, -761, 1615, 3450, -2093, -5332, -1285, 224, 4563, 317, -3099, 3717, 2161, 4411, 1910, -333, 3409, 3038, 7664, -3841, -4775, 2909, 832, -1016, -301, -548, -3444, -2090, 2561, 1097, 4043, -2132, 2508, 1404, 9697, -488, 242, -7317, 2296, -970, 4208, 1609, -4543, -3098, 9955, -1308, 3165, 5441, 4875, 2376, 5049, 8754, -3462, -1842, 5168, 2090, -633, -4210, 6700, -4491, 1322, 1038, -3099, -1616, 2063, -2627, -6494, 4170, -2555, -6370, -1366, -2872, 1772, 2108, 6227, -2341, -2324, 2341, -4088, -2987, 3312, -2505, 945, -6304, 2132, 799, 8042, -3529, 1592, 4483, -3935, -2978, -7310, -1661, 5794, -906, -4953, 677, 7811, -2435, 1769, -4041, -3343, 693, -1843, -5796, -1728, -1475, -5168, 1922, -7275, -1802, 4160, -4498, -2002, 3115, -2494, 5627, 1598, -155, -2455, -4064, 843, -5045, 329, 489, -2283, -638, 3825, 1086, 1492, 3286, 6958, 6414, 4856, 477, -2339, 1780, -3317, 4961, 861, 2192, 6584, 1761, -4061, 5858, -973, 2439, -2877, -2141, 1268, -1383, -57, -759, -4184, 2975, 7387, 2689, 4492, -1850, 1942, -463, -7875, 5930, 608, 2622, -1703, -2969, 789, 2872, 6027, -4156, 1261, -1138, -177, 1579, -1350, -8826, -2434, -733, 3129, 1544, 3575, -589, 721, 3883, -2319, -8385, -2601, 2109, 4186, -1167, -3918, 1874, -70, -414, -656, -5222, -6598, -559, -1493, -5486, -2213, 1212, 525, 302, -3149, 1223, -2467, -8411, -894, 1666, 621, 5172, 1311, 6177, 1602, -2005, -336, -2457, 2201, -1782, -8141, 2582, -2268, -1324, 3255, 1723, 7177, 5393, 2851, 2135, -1286, 3221, -1060, 5060, 4728, -341, 4082, 5919, -370, 2342, 6944, 4226, -64, 1293, -384, 995, 6331, -4251, -1649, 2313, 4176, 4767, 7593, -3149, 1093, -2497, -6720, 10341, 1917, -1456, 1625, -3852, -1609, -198, 4530, -234, 734, -1259, -4584, 711, 66, -5067, 2888, -5049, 5229, 2510, 2418, 3127, -73, 63, 2753, -4238, 1024, -138, 5378, -730, -2640, 6391, 2427, -2530, -1955, -8665, -2872, -2276, 1646, -4959, -7185, 5019, -1909, -3645, -519, 337, 1132, -7686, 1704, 569, -4060, 9033, -1014, 5647, -2184, -1946, 5373, -1006, 870, -2264, -2912, -2066, 3607, 3912, 10441, -1092, 4894, -730, 5901, -3160, -189, 3803, -1952, 3971, 2728, -2279, 3810, 6160, 2727, 830, 3127, 5526, 1597, 4456, 4642, -3945, 435, 376, 2618, 1506, 3998, 3188, -11036, -2563, 9092, -198, -5958, 4037, 295, -6140, 61, -1515, 8736, -2378, 8983, -1353, 832, -1589, -5160, 940, -3231, -1033, 5295, -2152, 1981, 3231, 6311, -4517, -511, -3135, -7087, -6532, -2480, 1269, 6680, -5251, -11360, -513, 2983, 7814, 1698, -7892, 440, -8125, 3580, -5638, -8741, 5948, 3667, 1930, 1948, 1603, 11874, -3611, 1603, -2201, -11449, 4679, -949, 1780, -5837, -2495, -5503, -4057, 2018, -2967, -1050, -2977, 6252, -6015, 9340, -4133, 5786, -7527, 5041, 1995, 212, -5050, -1642, 696, 1956, 1404, 4042, 6139, 4459, -2189, 2645, 9384, 5241, -547, 9977, -54, -3714, -3036, 5193, 1495, 7196, -533, -1215, -2012, 7279, -6999, -8523, 4329, 3625, 996, 2934, 1226, -4006, 6894, 1996, -9257, -2847, 6918, -4124, 2356, 4183, -334, -2405, -5543, 2042, 5679, 8032, -2251, 2790, -2470, 193, -5270, -7920, -3197, 6564, 3688, 2722, 1892, 2057, 671, -1115, -6814, -3397, -1195, -1459, -5017, -465, 2214, -1700, 2367, -2469, -1985, 3665, -8667, 528, -930, 1163, 4634, -2224, 5206, 2590, -738, 1396, -5552, 1110, 1168, 358, -1141, 2574, 1194, 5724, 292, 1807, 2061, 2832, -1156, -2163, -1297, -2875, 2250, 5656, -849, 5004, 3173, 3056, 4803, 1634, 2391, 3390, 1988, 4621, -156, 3819, -244, 3850, 2435, 3442, 2454, -5687, 2350, 2460, -1762, -7501, 6976, 2160, 1049, -1591, 442, 820, 359, 3079, -2794, 172, -78, -6532, -1282, -2107, -3862, 519, -806, 1306, 9, 3546, -5622, -675, 1030, -842, -7735, -792, -4512, 5329, -3185, -1562, 1149, 1963, -2873, -2987, -5494, -1445, -4790, 3104, -6450, -6948, -1762, 3142, 5310, 1236, -2996, 7844, -3948, 3046, -3306, -5635, 4818, -3044, 1298, -7852, 70, -2887, -8755, 2906, 649, 246, 1130, 8248, -787, 4728, -7482, -928, 700, 2432, 800, 1789, -334, -2257, 2503, 2397, 2238, 1535, 3771, -1280, 2115, -135, 6852, 2674, -2016, 7666, -3018, -1746, -6851, 2588, 3387, 6877, 4564, -4839, -2434, 4680, -6186, -2273, 195, -2053, 1354, -2451, 210, -6004, 4570, -2828, -5218, 916, 1504, -4630, 963, 4776, -2892, -8750, -1959, 1106, 6551, 5022, 2094, 1656, 1574, -2506, -9652, -4578, -7566, 3493, 80, 1994, 4013, 285, -1752, -3123, -7389, -4353, -1865, 729, -4124, -3456, 4299, -76, 5294, 1927, -2557, 8545, -9410, 3439, -816, -2627, 5690, -3692, 2145, -297, 2413, -1642, -9349, -172, -1288, 2367, 938, 4960, 4067, 4452, 291, 5434, 800, 2625, -553, -2504, -2275, -2703, -3165, 6424, -491, 3336, 2337, 23, 1272, -1450, 5933, 85, 2760, 3446, -887, 1646, 25, 2668, 1105, 2078, -1783, -8898, 119, 3007, -845, -4502, -219, 2352, -4889, 1268, 1013, 4795, 1873, 3989, -1799, 2208, 1752, -2033, 2405, 2673, -3757, -2008, 1479, 767, 955, 4388, -3591, -292, 2376, -3389, -6178, -2151, 2100, 4227, -2796, -5288, -887, 3345, 97, -2638, -5960, -2887, 1255, 2444, -8453, -1396, 9360, 175, -4245, -6876, -4250, 2131, -15856, -3105, 2019, -765, 5405, 547, 9339, 254, -1160, 775, -3360, 5214, -798, -5853, 2553, 5051, -1322, 2218, 4385, 7851, 2032, 1373, 2625, -2088, -1123, -4596, -392, -1192, -4116, 1441, -581, -755, 8209, 4175, 3396, -524, 3787, 6495, -2003, -910, 1374, 2823, -3330, 7588, 540, -4034, 2958, 753, -4168, -9115, 6558, 703, -6110, -4079, 706, 7453, 794, 3052, -4655, 1157, -1826, -7640, 4122, -4130, -7322, -4937, -3492, -375, 4296, 745, -8025, 2733, 3116, -1234, -4746, -1744, 3929, 3705, -1848, -1790, 7002, 6258, -2136, -1346, -9778, 550, -4384, 306, -2821, -3699, -1519, 722, -946, -1738, 3175, 607, -8247, 3012, -5921, -2415, 5417, -2665, -762, 649, 305, -1066, -2131, 3683, 1428, 2033, -1084, 4523, -3448, 6393, 194, 5757, 223, 2567, -1120, 2488, 860, -1346, 405, 3395, 2465, 3591, 3525, 1296, -2108, 4653, 6061, -13, -1534, 5083, 702, -161, -5171, 849, 1483, 5785, 3490, -3143, 955, -442, -3455, -8527, 3028, 2092, 2482, 3221, -2989, 986, 5643, 1828, -2513, -360, 1892, -1881, 1681, -2100, -1210, -2082, -4579, 792, 2979, 3117, -753, -477, 294, -2228, -7446, 438, 129, 5066, -2207, -3168, 2644, 3596, -219, -2747, -1210, -5061, -2690, 628, -7882, -10415, 2633, 2740, 5554, 364, 2471, 7974, -6507, 1981, 1100, -6602, 7289, -2447, 1487, -9289, -2122, -5622, -3075, -909, 5407, 3687, 98, 10674, -3457, 7509, -3902, 4517, -5254, 1384, 238, 2036, 694, -2738, 778, 5877, -958, 1826, 1442, 3646, -1414, 969, 7922, 5352, 1796, 15099, 153, -4237, -3116, 6956, 3235, 9392, -4588, -3386, 4423, 3328, -4482, -8672, -176, 7357, 1163, 3026, 3966, -1984, 4161, -830, -4251, 1568, 5400, -3777, 116, 7184, -2743, 184, 1378, -302, 1410, 5940, -732, 2281, -5475, -2092, -3426, -1527, -6034, 4269, -2505, -1149, 2144, 331, 447, 724, 1069, -3620, 123, -313, -4345, -3268, 292, -3433, 4327, -3395, -2485, 2827, -8971, 1569, -6079, -3416, 7291, 2433, 1133, -1249, -334, -881, -5505, 4320, -121, -965, 3074, -1977, 704, 5729, 1524, 5912, 5066, 2983, 3353, 2585, 1099, -1457, 224, 5518, -1053, 6123, 4023, 2851, 8243, 526, 3684, -459, 203, 3070, 4858, 1202, -3713, -2552, 3943, 2542, 1960, 856, -3594, -826, -4393, -3826, 3773, -2863, -2418, 1071, -8106, 647, 2415, 3168, 3101, 999, -1996, -3371, 2729, -534, -3917, 37, -2614, 8985, 2581, 3379, -34, -3984, 3766, -2380, -12923, -2492, 3581, 5946, -1200, -5745, 4864, 4574, -769, -1840, -5861, -2209, -167, 5446, -2904, -1553, 8279, 5586, 2510, -3021, -1876, 6411, -10349, 5292, -3369, -6927, 4788, 1893, 1728, 4772, 321, -3013, -5467, -574, 5957, 7055, 3451, 8700, 2272, 6935, -3007, -2389, -4620, -698, -2807, 2602, 2510, -3938, 1448, 8900, -4965, 5492, 1872, 1010, -1453, 1953, 7170, -188, 1613, 6357, 3757, -2031, -1566, 11234, -1977, 3437, -3524, -10311, -2594, 3995, -5008, -5515, 91, 2193, -1631, -3944, 572, 4420, 2092, -1058, -510, -3795, -293, -4617, -11964, 3498, 2158, -164, -2326, -5953, 2361, 3689, -7481, 2297, -1998, 1445, -2638, -8547, -12046, 4653, 2576, 1488, 2733, 4232, -2400, -677, -4783, 1883, -1132, 1923, -3996, -1589, 697, 1304, 4932, -8751, -1649, 1776, -9696, 2204, -710, 4534, 6308, 70, 6928, -3151, -964, 6680, -2506, 2184, 3184, 1696, -1626, 1567, 3560, 5129, -1888, 8526, 2669, 4071, 2220, -1403, 3324, -1510, -737, 6957, -1631, 4690, 2118, -2324, 11430, 2167, 2757, 2415, -997, 5259, 55, -1885, -232, 1008, 912, 5071, 2763, -6461, -251, 2230, -3319, -7366, 4886, 948, -3433, -2389, -7269, 1036, 384, 4648, -3397, 4153, 735, -5738, 2251, -2394, -3422, -2706, -1259, 2651, 1011, 4760, -4445, -3511, 1220, 1063, -11566, -1731, -2109, 5153, -2913, 194, 8061, 912, -151, 888, -8779, -850, -7555, -5041, -9953, -7168, 789, -1385, 2025, 199, -2595, 4734, -3825, 2379, 3105, 164, 9301, 1252, -823, -7893, -4019, 4110, -3711, 387, -1681, -3355, -1174, 1148, 2477, 3552, -5350, 5000, 5452, 3901, 4633, -3933, 299, -2770, 4034, 1029, 1273, 463, 4736, 1444, 3658, 2178, 4609, 6149, -4098, 9855, -265, -2514, -4019, -3965, 8613, 4210, 5717, -2061, 1765, -2112, -5376, -6591, 6869, -553, 1855, -514, 1444, 3143, 4358, 5886, -7443, -2370, 2394, -757, 8550, -9594, -2193, -3961, -402, 3150, 11383, 2425, -1765, 1379, 436, -5542, -11298, -700, 7568, 7843, -2914, -3485, 5140, -5244, 7658, -160, -7633, -3273, 842, -1936, -6780, -3036, 3252, -2183, 5853, -4142, -4827, 6265, -1512, 316, 606, -2867, 12023, 722, 6377, -6445, -190, 513, -9449, 2031, 2063, -5190, 2577, 2604, 4951, 7475, 3689, 1757, 6870, 4075, 1574, 2497, -3420, -4108, 3002, 1335, -4611, 7250, 3746, -5006, 5257, 1172, 5309, -2589, 3359, 4088, 2467, -1349, -994, -6320, 2470, 4008, 1902, 494, -1293, 3178, -1620, -3326, 3551, -637, 1278, 661, -29, 1501, 2441, 6732, -1519, 2216, -4436, -4750, 1169, 4419, -423, -2978, -637, 6921, 2564, 3024, -1551, -3988, 1379, -1575, -10194, -5558, -2767, 7885, 1122, -3803, 1184, -3733, 349, -3630, -5451, -1880, -4846, -2736, -2438, -2633, 5092, 1806, -2346, 1019, 3522, -1781, -2584, -1678, 1988, 602, 4752, -628, 6363, -6411, -6215, 3207, -557, -937, -878, -6071, -2977, 3444, 260, 5435, -6369, 8677, 1101, 6409, -1083, -2191, 2847, -1547, 2594, 3627, -225, 3487, 2231, 8464, 1893, 137, 5140, 8661, 618, 9794, -3302, 2420, -429, 1083, 834, 1046, 4646, -4782, 1750, 4556, -2405, -3830, 10048, 1643, -2226, 2513, 1693, 1231, 407, 6744, -6736, 1561, 2341, -4717, 2324, -3911, -708, 4653, 2437, -3163, 3061, 3107, 74, -975, -5913, -9825, -2172, -1284, 3246, 5229, -3460, -3819, 5715, -3063, 3787, 1351, -9268, 377, -4419, 125, -5093, -7586, 5161, 3386, 3959, -1776, 551, 7684, -12740, 5782, -127, -2583, 2570, -3460, 3604, 1934, -2826, -462, -2524, 3129, 5977, 5577, -3848, 6263, 1089, 7585, -3304, 4120, -2692, -1040, -1803, 5711, 1488, -1975, 5188, 3985, -3806, 6900, 2989, 7529, -62, 5793, 5729, 4555, 3980, 3782, 1302, 250, -3320, 1361, -4480, 5149, -4457, -7097, 2166, 9128, -1450, -10890, 3671, 8032, 3553, -1531, 2494, 5620, 2440, 2626, -3561, 2116, 1123, -5679, -5346, 2264, -1407, 5102, 441, 55, -2183, 3810, -4417, 1446, -1697, 501, -3391, -2630, -7172, 4299, -1065, -1410, 4730, -1519, -728, -2554, -4734, 3748, -542, 1081, -3368, 310, -780, -8090, -3427, -5017, 1096, -824, -3036, -2595, -2292, -2670, 2094, 4083, 7047, -2008, -2799, -499, 751, 3383, 2629, -3887, -5796, 2075, -2614, 4802, 5432, 3341, 3687, 7675, 535, -417, -3180, -4995, 8797, 3169, -5435, 5842, 4943, -4685, 2749, 3774, 4208, 806, -2010, 3128, 1106, 1967, -5171, -2220, -3789, 4216, 1332, 1922, -5397, 1312, -969, -7863, 7296, 5344, 696, -921, -2303, -1689, 3061, -3463, 223, -24, -1106, -2358, -403, -2692, -6551, -61, 191, 3604, 691, 6735, -363, -2292, 4944, -365, -5234, 2697, -3930, 4094, 791, 2390, 2273, -2721, -4784, -2845, -4696, -5138, -2522, 3030, -4873, -5225, 6887, 2458, 2383, -3970, -445, 3927, -2668, 3011, 189, -6673, 6882, -3371, -4226, 485, 2973, -414, -5199, 2045, 354, 3199, 3485, 1569, -1013, 7606, 387, 2987, -2331, 2792, 2292, -3877, -2455, -805, -6110, 8018, 754, 5389, 2477, 9609, -1705, -2452, 7721, 4507, 4452, 4426, 797, 1102, -3137, 8542, 1825, 1381, -2802, -784, -60, 5797, 165, -5242, 1490, -1679, -2185, 2031, 2882, 1838, 149, 4891, -964, -1612, 1801, -1425, -6768, -102, 2034, -1212, -4877, 3006, -2683, 2889, -1677, 2217, 1538, 2045, -7799, -3471, 5406, 5939, 2157, -2629, -1613, 9356, -291, -4286, -5294, -3500, -3257, 1688, -4173, -2876, 1845, 5442, 5418, -955, -4375, 7489, -18581, 6274, -1052, -4605, 10386, -4095, 2893, 2103, -867, -2392, -6221, -332, -829, 5749, 799, 11430, 5653, 7076, -2097, 890, -5769, 1554, -677, 5436, 7667, -1722, 1929, 10325, -6246, 4356, 2122, -424, 840, 5754, 8677, -941, 5656, 5598, 1308, 598, 628, 6452, -1185, 6156, -1013, -9014, -1071, 7817, -3639, -10293, 4368, 1337, -6331, -4506, -1081, 6213, 475, 5325, -989, 3142, 447, -6231, -5349, 8654, -1689, 3571, -4961, 843, -831, 3865, -7471, -516, 76, -295, 2652, -5472, -5485, 7032, -1280, -2139, 288, 6543, -46, -937, -5641, -567, -4067, 522, -7742, -2324, 4102, -5292, 2310, -1808, -6186, 5265, -11864, 2713, -20, -2105, 10033, -1795, 2788, -2358, -1661, 4539, -4401, 1822, -522, 2144, -4225, 4169, 3531, 4628, 130, 2050, -2117, 363, -1715, -1293, -1686, -2821, -890, 10118, -1844, 3857, 5013, -93, 5847, 3375, 4399, 1798, 1085, 8240, 423, 2766, 362, 3685, 5711, 2292, 368, -11691, 421, 2817, -5223, -6115, 8161, 276, -3790, 1271, -1545, -850, 253, 3072, -9927, -31, 1806, -6233, 840, 1100, -2400, 1021, 560, 748, 2948, 5086, -7781, -1721, 3798, -2656, -8080, -3378, -4041, 4179, -5296, -2110, 342, 2147, 343, -3252, -6290, -1286, 777, 816, -2122, -1809, 5486, 793, 5728, 1286, -2024, 5595, -2931, 4181, -6121, -6833, 4335, -775, 8908, -2026, -1246, -495, -6326, 2403, 1777, -2188, -1209, 3331, -10, 8427, -134, 2339, -992, -769, 732, 1775, 2857, -3123, 3248, 9941, -3301, 5312, 2438, 6014, -266, 3914, 5937, 4891, 629, 4235, -1077, 5608, -3463, 2531, 334, 3401, 1957, -1216, 673, 7148, -5070, -6684, 7487, 2397, -2042, -101, 1438, 193, -1732, 1867, -2222, 3047, -833, -2293, -2408, 1103, 407, -366, 581, -85, -4506, 5793, 2, -230, 2107, -3069, -3650, -5481, -2642, 5429, 1189, -555, 1370, 5332, -1816, 195, -4791, -1027, 1721, 4399, -2593, -5291, 3925, 5361, 3287, 2955, 2274, 2020, 2192, 1470, 318, -6486, 7169, -3804, 3917, -1098, -1636, -1699, -1274, -219, 3599, -4418, -410, 2675, -3886, 7578, -3287, 2968, -2403, 2915, 398, -646, -549, -1791, 1062, 4220, -1036, 5179, 2669, 6627, 1434, 1772, 6308, 1309, -744, 7413, -2542, -1391, -3674, 5060, -5173, -49, 1437, -8821, -2772, 2121, -5307, -6136, 9236, -4411, -2331, 49, 2155, 870, 1867, 6074, -7253, 1926, -78, -6135, -1533, -4236, -2353, 1320, -44, -1714, 874, 7415, -960, 1275, 954, -4883, -4517, -1341, 1673, 4644, -968, -2411, 1727, 3222, 4031, -850, -6381, -2497, -2898, 884, -2099, -4484, 2201, 6876, 4878, 1827, 6201, 3260, -3686, 322, -1974, 74, 3434, -2514, 4187, -6653, -3381, -4409, -5831, 2271, 4023, -5681, -347, 4469, 519, 7894, -1362, 6441, -2678, 3850, 866, -1999, -574, -4074, 5349, 8114, -3658, 4847, 5147, 3783, -31, 1810, 5962, 3340, -2664, 4839, -2867, -1440, -4212, 570, -4458, 5155, 362, 1119, 3958, 7641, -3522, -7250, 6700, 182, 1036, -706, -368, 3911, 1691, 5859, -2051, 3265, 604, -4841, -2520, 3217, 133, 5061, -432, 599, -3391, 5385, 563, 1741, -1545, -309, -3822, -3736, -5249, 6016, -3017, -2687, 3973, -949, -3933, 851, -8649, -28, -5917, 1415, -5028, -6378, 3798, -867, 2587, -157, 2272, 4502, -7002, -2225, 1413, -4172, 7511, 2616, 6335, -2761, -2909, 3027, -2298, -232, -526, -1669, -951, 5423, 6236, 7049, -1900, 6212, -1747, 4476, -309, -1350, -2108, -1946, 5865, 4575, -3791, 4388, 5920, 873, 6008, 76, 5026, 2941, -1073, 4551, -2376, 948, 1105, 3177, 165, 2538, -396, -5363, -2531, 5341, -2885, -7049, 5161, 1172, -274, -1446, 895, -1120, 1937, 4982, -6741, 1742, 1521, -6194, 2142, 1481, -3559, -20, 3995, -1080, 5970, 6279, -2574, -227, 2350, -913, -6678, -4327, -3788, 6331, -1343, -2216, 2741, -2072, 59, -25, -8061, -505, -4153, -1305, -6331, -2276, 3774, -3784, 4807, -929, -1765, 67, -2245, 4398, -258, -5330, 5025, 3223, 5337, -8119, -2046, -1686, -5686, -2192, -96, 3539, 479, 5904, -1234, 4144, 220, 987, -2044, -72, 472, -84, 1178, -1441, 2064, 7819, -1097, 3967, 2394, 13, 742, 2095, 7097, 6052, 4033, 7031, -2090, 3825, -3247, 6515, 1866, 4279, -173, -6127, 3497, 4327, -2868, -3105, -2334, 4526, 928, 3096, 8483, -2723, 1544, -3149, -4714, -859, 2633, -1177, -3285, 3507, 447, -6639, 153, -1056, -365, 2273, 4308, 2687, 290, 1051, -4609, -3332, -4065, 980, -5005, -2164, 406, 2086, -2767, -1764, 4659, -2072, -338, -529, -3367, -1640, 3732, -2122, 7770, -496, 1134, 2250, -9279, 872, -1126, -2933, 5794, -367, 4710, -1686, -4018, 953, -3324, 1652, -272, 3257, -478, 5482, 2308, 7516, 2360, 6373, -1459, 3451, 790, 2549, 2252, -1746, 3690, 7975, -2977, 4262, 5706, 3791, 5377, 7694, 7295, -298, 7698, 548, 859, 3636, -5762, 1911, -1946, 5070, 1784, -337, -1868, 7248, -1920, -5281, -91, 5106, -7011, -3234, -893, 404, -2179, 5569, 1237, 4059, -306, -4087, -3025, 4370, -1407, -634, -6369, 882, -4032, 4732, 2795, 2182, 3241, 4682, -2740, -3843, -2589, 6185, -5434, -2094, -2954, 6731, -1047, -3483, -2996, -2704, -1004, 1488, -4791, -2809, 1907, -1558, 4299, -1311, -2833, -1121, -3525, 3231, -2116, -180, 7943, -1877, 5438, -1105, 0, 613, -3585, 944, 1253, -159, -2838, 3438, 1568, 3220, -571, 619, -894, 1016, 867, -1265, 2805, -1980, 705, 5860, 278, 3025, 1107, -654, 3494, 4893, 6638, 3242, 6037, 5875, -4272, -1758, -1683, 4806, -286, 4002, 914, -4857, 13, 6151, -5057, -8327, 5983, -298, -1709, -252, 3390, 1963, 3505, 2963, -6232, 4904, -1468, -4138, -904, 1752, -2328, -2669, -387, 236, 1113, 4881, -3833, 396, 1231, -2993, -3510, -2213, -570, 6489, -2685, -4844, -1146, 4469, 1286, -336, -3671, -655, -3219, -1808, -6237, -6330, 4738, -3631, -1393, -2293, -313, 3648, -5510, -616, -359, -4217, 12372, -1672, 3629, -4386, -2621, 3789, -127, 3673, -1437, -5522, -2411, 2021, 72, 7591, -248, 4930, -821, 3033, -57, -1179, -2267, -2855, 818, 2001, 1500, 4154, 4856, 3291, 3740, 538, 5203, 1591, -895, 8862, -2632, -2861, -2124, -1262, 1049, 3750, 2226, -3428, -1653, 1085, -872, -3827, 5066, -1644, -1243, 2709, -1652, 759, -1541, 4914, -6804, 806, 340, -4993, 8759, -3630, -1478, -1187, -1315, 1629, 6729, 5704, -3672, 566, 1453, -5307, -8973, -2396, 5517, 5584, -1815, -6029, 2462, 1551, 3296, -395, -8603, -2494, -3829, -1106, -2855, -9095, -734, 2596, 4391, 347, 4471, 8711, -3937, 4718, -2231, -7956, 5517, 2153, 3551, -4600, 694, 2332, -6448, 3605, 581, -916, 1286, 3941, 1067, 9394, -4164, -1263, -1166, 1245, 4500, 1551, 567, -2725, 2557, 5165, -3796, 7012, 4600, -748, 4336, 708, 5606, -3260, -1812, 6346, -2226, 3751, -4203, 1177, -4405, 9061, 3865, -6764, -3895, 2838, -4451, -6371, 2528, -4981, -4164, -7217, -2026, 177, 813, 7888, -2520, 4182, -759, -8558, 4476, -887, -2644, -478, -2781, 3150, -445, 5497, 140, 342, 1823, -6640, -9315, -6169, -3729, 3390, -2240, -3444, 2653, 6609, -1917, -156, -8646, -8039, -1270, -2936, -4962, -1323, -606, 3047, 6329, -3059, 365, 519, -9209, -556, -2334, -2237, 4648, -704, 8806, -5407, -3354, -86, -2878, -554, 1061, -1986, 2509, 3082, 3330, 5053, 1100, 6056, 2054, 2427, 364, -2620, 3351, -265, 8551, 7860, -975, 5602, 3560, 1728, 5715, 3307, 5609, 4629, 2091, 3228, 1048, 3499, -2418, 636, 2626, 3363, 1683, -4041, 3217, 4059, -1445, -6510, 7735, 1911, -2350, -2884, -1310, 1669, 1130, 5165, -1669, 5420, 822, -4415, -5193, 1645, -3310, -705, 216, 2391, 3637, 3728, -1600, -2132, -1193, -3303, -5553, -713, 2547, 6071, -265, -2301, 3427, 1802, -461, -24, -5786, 777, -2663, 4799, -3240, 2113, 3670, 3322, 3549, -4624, -352, 1330, -9932, -2501, -2602, 1268, 883, -1189, -1032, -1245, 2405, 1899, -6024, 2818, 507, 2698, -1873, 1508, 5308, 5287, 3270, 3383, 3348, 2966, -621, -25, -1072, -5115, -3241, 5414, 391, 3116, 1081, -2201, 2524, 1995, 6608, 925, 1429, 6460, -1239, -2783, -693, 4269, -496, 3484, 702, -7370, 3223, 938, -1334, -5017, 2032, 541, 677, -2593, -2025, 3293, 2085, 6293, -3773, 1525, -467, -3864, -5638, 890, -1796, -27, -1240, 461, 21, 2667, -3908, -1287, 2421, -4901, -5051, -2198, -1467, 4820, -1907, -3690, 5127, 254, -1866, -789, -5988, 214, -673, 2162, -2074, -2976, 368, 8250, 3407, -1208, 6608, -942, -12828, 1728, -2454, -439, 1420, 2126, 7887, 1307, -2432, -982, 891, 3387, 3659, 1179, 607, 5673, 2891, 6608, -2141, 8799, -1808, 1861, -3525, -1623, 1952, -2166, 1858, 6681, -1894, 6469, 4052, 6087, 8230, 5631, 6316, 3641, 302, 6330, 20, -462, -2843, 1840, -3618, 4557, 2644, -4993, 2976, 4473, -8588, -3675, 4506, -242, -795, -3432, -1372, 3010, 1369, 5363, 672, 4339, 4225, -7211, -2747, 4462, -3286, -345, -1983, -3353, 365, 4161, -2587, 3434, 812, -577, -3354, -5142, -6309, 5097, 635, -2034, 2683, 7384, -2335, 2935, -6400, 56, -674, 1061, -80, -482, -4173, 372, -2499, -6992, 1133, -1547, -11016, 594, 284, 7214, 5197, 3046, 9438, -738, -667, 5044, -2288, 5148, 3917, -3916, 905, 1367, 2463, -775, -77, 6703, 8536, 4576, 726, 214, 3902, -3199, 7805, 3004, -1203, 5719, 1384, -8604, 9983, 3015, -1944, 6405, -6429, 2939, -669, -716, -1127, -3116, 1342, 5837, 8266, 2311, -1266, -69, -6608, -7274, 6161, -649, -1834, 763, -3755, 12, 2819, 2941, -2283, 3296, 1384, -5190, 6620, -3882, -2178, -3998, 1155, -215, -922, 3001, -1936, -4335, 914, 999, -6525, -87, -2537, 3617, -2237, -1448, 7702, -1674, -4004, 231, -9063, -959, -2465, -3215, -3703, -2335, 4641, 966, 250, -3377, -199, -142, -9421, 124, 2121, -1920, 8479, 3825, 5144, -94, -54, 167, -4032, 1366, 2985, -2341, 1492, 2480, -4338, 1578, -871, 2121, 482, 773, 1776, 404, 4979, -1648, 1968, 5640, 2697, 934, 4318, -832, 5960, 3705, 3464, 2979, 3097, 6005, 2673, 3119, -3069, 2979, 2166, 7410, 510, -7875, 2023, 3890, 72, -5969, 4314, 2154, -531, -324, 1687, 2060, 2326, 3835, -841, -282, -586, -7935, -3505, -2495, -266, 1994, -1566, 3527, 5917, 3790, -1718, -573, -1205, 896, -5114, -1157, -1379, 3632, -4579, 4961, 7250, 4844, -1853, -2151, -7886, -2317, 3249, 2818, -2365, 1548, 2483, -4941, 4930, -4686, -3130, 308, -10153, 37, -3872, -2157, 7030, -425, 8778, 694, -2594, 1953, -4620, 1738, 216, -6423, 1472, 3529, 2773, 6590, 3395, 10189, 1565, 1085, -81, -1511, -1150, -1232, 2063, 5296, -1962, 3289, 2471, -118, 8051, 712, 5957, 919, 8112, -698, -3452, 3981, 836, 3334, -2405, 3701, 1851, -5168, 1207, 6783, -861, -4630, 1582, 901, -7468, -2601, -2159, 3443, -2462, 2070, 2377, 1686, -658, -2948, -5538, 1249, -6084, -3949, 66, 3043, -1267, 2698, -76, 1991, 5228, -2991, -3548, -3602, 1684, 5327, -1599, -7040, 838, 7705, -3202, -1743, -3392, 1426, -6289, -2378, -6748, -4197, -3058, -2784, -2621, -5879, -1526, -406, -6556, -5509, 3799, -3043, 6701, -1399, 499, -10703, -4314, 2370, -1013, 9673, -3239, -9631, 3239, 3172, -324, 5188, 5355, 6149, 1015, 5946, 299, -6155, 701, -1203, 9457, -3155, 4018, 4831, 5949, -4516, 7399, 1332, 3381, 3808, -3976, 5948, -2550, -703, -2267, -2463, 6616, 9449, 8861, 8256, -8146, 1914, 907, -6613, 14183, 6389, 289, 4458, 423, -4045, 4775, 6128, -10628, 3650, 5261, -2002, 6675, 3659, -5681, -3382, -3801, 3272, 9408, 21, -670, -363, 4395, -6756, -6448, 4127, 375, 7529, -2147, 807, -5942, -1267, 3496, 1850, -10113, -6213, -3240, -312, -9731, -3957, 2241, 863, 207, -395, 4085, 6153, -4484, 3637, 582, -7196, 103, 1653, 5944, -705, -1822, 942, -4020, 1568, 1842, 1093, -1588, 6062, -1678, 7061, 8003, 5228, -1742, 2915, -1598, -2450, 1550, -1704, 6670, 3644, -832, 6757, 1700, 5382, 2209, 5345, 6854, 4881, 4271, 5414, -4072, -3526, -2974, 1253, -992, 6949, -3276, -1337, 1036, 9104, -6950, -7246, 810, 5413, -2530, -5661, 3148, 5150, 5107, 5495, -474, -2670, 4435, -3349, -2323, 1415, -2825, -2765, -3329, 129, -415, 1672, -2680, 3266, 2879, -1441, -3124, -3462, -194, 3234, -4047, -996, 3333, 1562, -131, -33, -2524, -1924, -2819, 1124, -4983, -2467, 6420, 1621, 4231, -2278, -2837, 5029, -12068, 6971, -4723, -7731, 10534, -2864, 2768, 3303, -946, -2809, -5713, 3723, -1641, 806, 2090, 5097, 4584, 9094, -765, 667, -1269, 2018, -2585, 2545, 1762, -163, -2792, 8421, -2427, 4291, 3692, 1471, 2621, 5194, 7467, -2181, 3416, 4006, 1084, 4380, -1513, 6041, -3238, 2185, 1722, -9546, -846, 4432, -2941, -5617, 1653, -225, -4588, 516, -2387, 3965, 1110, 8142, 1494, -1353, 303, -5847, -981, 2418, -2373, -1289, -5227, 588, 4847, 3880, -4302, 3078, 2258, -3304, -1759, -2112, -3866, 4995, -1569, -2612, -1429, 10524, 1161, -933, -4256, -1824, -1845, 532, -3064, -811, -2215, -1777, 405, -3817, -2454, 2917, -7798, -415, -2435, -875, 8026, -591, 1002, -2304, -2813, 1551, -6049, 2558, -2160, -2488, -1766, 810, -155, 3040, 2495, 5029, 1216, 3044, -1209, -492, 655, -5709, 682, 3868, 980, 5537, 4885, -1700, 4525, 1741, 5606, 2047, 370, 6870, -1315, 1675, -5034, 2471, 4107, 1398, 2671, -1646, 975, -862, -5056, -7735, 6490, -1891, -3962, 1753, -566, 1812, 2191, 7389, -4529, 873, -1491, -6709, 1783, 2991, -2645, -2264, -1907, -409, 3190, 4285, -3342, -2310, 4073, -4790, -5622, -1138, -2896, 6452, -5932, -7231, 315, 5076, -3573, -277, -5638, -2045, -378, 516, -78, 374, 3048, 6593, 5214, 1590, 2062, -1638, -5566, 2589, -552, -1369, 614, -485, 7080, 2213, 104, -121, -2115, -875, 2345, 192, 2020, 6934, 1107, 3512, -381, 3660, -2674, 871, -311, 3378, 3003, -2366, -1384, 5918, -3405, 1574, 643, 242, -2603, 2237, 7096, 1450, 5154, 7154, 202, -812, -1593, 8639, -3576, 9151, -449, -5254, 4854, 4358, -5215, -6767, 3952, 946, -2211, -3162, 2450, 6935, 904, 2097, -532, -2959, -807, -5555, -3858, -1635, 532, -515, -4844, -1430, 2470, 2080, -4255, 67, -3169, -354, 1132, -6332, -4212, 6695, -4515, -7308, 3859, 2514, -2827, 1092, -1975, -1553, 1290, -314, -1472, -2453, 2484, -2960, 3412, -4473, 1120, 4381, -5417, -3196, -1868, -2129, 3639, -2244, 3382, -2144, -3458, 58, -5783, 3769, 2211, -2804, -556, 2438, 2589, 6333, -162, 8043, 2775, 3482, 2160, 5054, 664, -2782, 8085, 1656, -2251, 3689, 3154, 1976, 2337, 5417, 4657, -3143, 1506, -409, 6304, 2861, -5909, -2686, -3579, 5939, -1123, 1926, 710, 6903, -2125, -5776, 2905, 4942, 4160, 264, -3563, 210, 993, 2665, -2097, 2319, -2253, -3783, -826, 1060, -780, -553, -1576, 5339, 1164, 5749, -1269, 161, -725, 3071, -5158, 3157, -3326, 6041, -1142, -773, 3932, 300, -5280, -5115, -5118, -1913, 2661, 2528, -4032, -5273, 2824, -1119, 2255, -5269, -3474, -1981, -7237, -1310, 2735, 6020, 4613, 2193, 6708, 1502, 369, 5866, -3889, 6258, 942, -6726, 3129, 2480, 8919, 2029, 3122, 7287, 5619, 5956, 1991, 3708, -1804, -3250, -1507, -1857, -4583, 1039, 3719, -3442, 6216, 2264, 3272, -6660, 1328, 2691, -844, -2428, 288, -5025, -1131, 3570, 3047, -4130, -165, -1641, -4492, -6064, 7797, -2399, -106, -652, -4345, 5886, 1142, 6378, -2743, 7314, -855, -2584, 11512, -6172, -2416, -1663, -6087, 4471, 3805, 1003, -7706, -2209, 2667, 3738, -7304, 2575, 7167, 8323, -1481, -5667, 3749, 2465, -1917, -2044, -8788, -670, -7319, 1554, -6862, -4567, 4850, 4946, 1935, -689, 6443, 2845, -7634, -2378, 2250, -3927, 987, 6437, 2107, -1794, -1607, 829, -1733, 2121, 2265, 1971, 1213, 6881, -507, 7332, 129, 2973, -2638, 5783, 4252, -2573, 2075, -2956, 7375, 5279, -1544, 6621, 1950, 13058, 1262, 4154, 8652, 4530, 4788, 3739, -5610, 2300, -8021, 8994, -2482, 6038, -2514, -330, -124, 4331, -7399, -8370, 8347, 2645, -1148, -1868, 1848, 3810, 1714, 1417, -959, 3177, 1973, -7498, 2006, -1482, -5643, 1706, -7449, -5535, 4742, 3059, -5300, 3669, -3275, 6447, -5088, 1632, -8648, 8894, -4116, -3840, -2065, 5510, -3623, 3370, -7016, -1445, -1831, 3922, -6576, -2252, 3653, -2118, 1712, -4335, -1934, -697, -3992, -194, -958, -6355, 7542, 283, 3894, 104, 2254, 463, 922, 4572, 2165, -3260, 1584, 2768, -874, 2589, 3370, 2897, -477, 5348, 4120, -1646, 2604, -1152, 1013, 4401, 2299, 4521, 573, -857, 6378, 2979, 5016, -289, 1723, 1342, -897, 1854, -1566, 422, -1696, 4667, 2920, 1863, -5363, 1607, -1501, -6287, 6616, -357, -6051, 145, -343, 214, 3402, 2696, -1063, -41, 815, -2298, 139, 2367, -7885, -1886, -2743, 7349, 3571, 6273, -3964, 3685, 6875, -4428, -2820, -416, -16, 5774, -885, 2105, 594, 6553, -546, 44, -6644, -7425, 256, 823, -3802, -1844, 10, -4876, 2768, -3613, 1886, 655, 2037, -4144, -2134, -1776, 9973, -175, 5130, -5673, -1429, 5815, -1197, 479, 795, -2664, -607, 1025, 3727, 4810, 4902, 6636, 3510, 3028, 1596, -5478, 2253, -496, 4015, 4456, 1658, 3455, 1878, -3353, 11581, 3392, 1463, 2460, -2196, 4606, -224, 2590, 1686, 2763, 2902, 2287, 1048, -908, 2316, 3582, -6809, -5726, 5072, 2186, -1703, -4112, 791, -1312, 1641, 6865, -1119, -618, 2375, -1801, -3522, -619, -3165, -5061, 2492, 4252, 3173, 4247, -1674, 2168, 5275, -380, -9542, -3702, 1914, 5359, -581, -5942, 7262, -1942, 362, -3346, -4664, -4500, -222, 3172, -1879, -3342, 6279, 761, 3864, 238, 1414, 5895, -3315, -777, -610, -9061, -3802, -1315, 5120, 5296, 1664, 213, -6322, 4016, 197, 5118, 747, 3138, 3365, 10581, -4117, 113, -3087, -1768, 449, -2814, -3210, -2873, -3558, 9623, -2011, 4564, 3252, 6496, -1629, 1314, 7852, 523, 6932, 5538, -1399, 3077, 2014, 12147, 5108, 2642, -3744, -4652, -4370, 6433, -4498, -8867, -517, 2506, -2750, -5904, 1623, 1278, 133, 6907, 1560, -34, 2359, -1364, -12214, 2725, -1124, 1392, -2239, -3290, -1323, 4645, -3511, 6019, 454, 1085, -3535, -6443, -6577, 8025, 3587, 6797, 3423, 10811, -2571, -3829, -9378, -1384, -4346, -1432, -2989, -5692, 670, -1243, 777, -3855, 2217, 2908, -4055, -3963, -3512, 123, 3292, 2316, 2579, -3843, -3837, 3800, -2274, -1383, 1121, -4262, -2681, 4139, -2099, 2577, -2432, 5151, -1882, 3786, 251, -2005, 559, -4235, 2754, 3196, 1639, 3044, 4506, 688, 3689, -2517, 3196, 6811, -2904, 8652, -3289, 3255, -3856, 3898, 877, 2607, 4495, -1620, -872, -1188, -3710, -7242, 3800, -2736, -1766, -574, -2185, 1113, 3110, 2124, -5147, 2369, 2977, -2630, 1203, -1399, -3516, -1557, -575, -1897, 4003, 4335, -2634, 3948, 487, 848, -6710, -2442, 3882, 5532, -1302, 65, 3321, 74, -2934, 1257, -8388, -5627, 3221, 1113, -6463, -3602, 6482, -2471, 5074, -2862, -6083, 1823, -3730, 2699, 3879, -3195, 5400, 2452, 6595, -802, -341, 2059, -4559, -2305, 3462, 84, -90, 8241, 4778, 4867, -2976, 4070, 2700, 2267, -887, -1629, -199, -4891, 3158, 5808, -3945, 3000, 3233, 4276, 2811, -735, 4777, 1103, 3959, 7220, 580, 1732, -242, 6139, 2366, 2688, -2622, -4199, 1604, 2639, -3597, -7159, 1281, 7060, -485, -3035, 5579, 4654, -1171, 2043, -3537, -1725, 3789, -1071, -5527, -906, -1153, 97, -280, -1493, -707, 4307, -7092, 4165, -2748, -2515, -2468, 132, -1544, 3452, -917, -739, 2448, 5282, -1932, -1171, -1711, -1034, -4393, 375, -5969, -5176, 116, -2490, 6504, -4051, 2404, 2222, -6791, 1351, 1086, -580, 5345, 1883, 4311, -2364, -3138, 388, -1459, 3495, 1599, -2865, -644, 3327, -1897, 4179, 1363, 7960, 921, 3413, 474, -2706, -649, 682, 4884, -515, 144, 5877, 3824, 236, 2833, 4401, 7181, 3509, -480, 5156, -3112, -903, -6136, -1019, -697, 4327, 4867, 1611, -3360, -490, -5024, -6316, 3169, -1590, 874, -2947, 2569, -1396, 3150, 2518, -7019, 2900, 2856, -6197, 3846, -2401, -2283, -4217, -3049, -2272, 82, 4305, -498, -15, 2582, 1208, -4533, 467, -1040, 5628, 1738, 306, 2541, 207, -787, -2005, -3953, -3740, 384, 184, -5071, -3787, 713, -1674, 4303, -1087, -24, 4840, -9471, 4991, 618, 1905, 10797, 2808, 911, -3931, -822, 1763, -3306, 2349, 962, 1129, -646, 4898, 4800, 7823, -1809, 7236, 2762, 848, 931, -481, 3382, -2819, 5413, 4013, -2807, 5228, 6035, -1989, 2375, 2770, 7212, 1740, -890, 8705, -1303, -428, -2559, 790, -263, 4839, 3874, -5359, 2931, 2690, -3191, -4810, 2753, -865, -3049, -1719, -886, 5045, 2137, 7593, -2235, 1136, -220, -5496, 5129, 1617, -1032, -4082, -2020, -2028, 4163, 4681, -2839, -2079, 2445, -3309, -6378, -2174, -4010, 6670, -5741, -9839, 1022, 4587, 2531, 193, -6679, -58, 663, 1472, -7340, -2966, 2043, -4385, 7015, 455, -2182, 6957, -12275, 7528, -4456, 138, 6955, -436, 988, 4840, -862, 4224, -6852, 1150, -1774, 3867, -4515, 3148, 3020, 5719, 2379, 5204, -806, -702, -2823, 189, -600, -2350, 1764, 7933, -5907, 5259, 1986, -845, 1300, 4573, 3548, 5143, 4030, 6270, -3004, 4210, 2773, 4670, 1314, 1415, 3361, -10133, 3055, 4743, -1471, -2985, -1382, -3425, -4648, -477, 6712, 4000, -1528, 6432, -6778, -892, 3780, -5010, -479, 3058, -199, -60, -2625, -1914, -2833, 399, -1816, 1293, 1640, -1943, -2363, -4542, -4913, 1726, -7026, -11925, -2382, 3879, 161, -1349, 405, 80, -1481, 262, -5861, -2450, 4473, -2782, 5477, -1998, -1666, 3237, -6012, 2261, 2782, -4059, 8835, 2561, 5436, -2813, -3973, -183, -4117, 2496, 1825, -874, -1101, 5369, 700, 3925, -2620, 4183, 4016, 1461, 758, -3652, 2833, -2557, 5810, 7558, -1560, 7715, 4044, 2356, 6337, 1701, 6916, 5454, 1213, 9716, -3253, 5615, -1723, 2158, 2746, 1417, 319, 1885, -3072, 5270, -172, -6006, 4030, 800, 565, 752, 6132, -2870, 2634, 2187, -3857, -111, 4609, -3783, -5440, 3175, -6249, -3200, 296, 1517, 4529, 4034, 1693, -459, 986, -1866, -2141, -3962, -7711, 7302, -941, 751, 2957, 5220, 341, -849, -3874, -427, -1984, 2689, -5361, -1574, 2735, -4440, 3334, -2635, -3764, 1396, -5228, -2592, -784, -2382, 3884, 273, 2029, -2433, 1551, -1637, -4594, 6078, -1380, -1834, -1927, 3436, -553, 6141, -962, 8448, 2443, 5070, 1366, -4347, 332, -2837, -48, 8697, 177, 2797, 3518, 2805, 2116, 2903, 5212, 2553, 1097, 6080, 951, 3867, -2386, 79, 4190, 4910, 1467, 116, -1675, 4660, 433, -3442, 4359, 1225, 260, 2510, -1236, 678, -1841, 1961, -3741, 5188, 3448, -1702, 3269, -751, -1911, -297, -4078, 1974, 2011, 7386, -3985, -541, -1351, -499, -7887, -4088, 2106, 6613, -4054, 1010, 54, 1239, -1719, -697, -8717, -3198, -30, 1221, -1934, -949, 2409, 1170, 6138, -3199, -2815, 4887, -9150, 6962, -7529, -4078, 2052, -569, 1315, 736, 1218, -2138, -7733, 3387, 68, -43, 6566, 388, 1297, 6383, -2692, 2277, -686, -1379, -1466, 1720, -2686, 305, -2904, 6373, -171, 3903, 3390, 4902, 945, -1053, 5453, 5975, 7674, 4386, -61, 4493, -2826, 2200, 1104, 3818, 2981, -3797, 1724, 3629, -3021, -2134, -2565, 92, -67, 134, 3915, 2210, 2802, -400, 1976, -1065, 1929, -2902, -4638, 6212, 127, -1484, -991, 2710, -2136, 1218, 1769, 2215, -60, -6736, -3474, -3706, -1507, 2787, -1583, -5503, 882, 6391, -4521, -1386, 457, -245, -1453, 1692, 310, -5281, 5384, -3510, 5138, -3830, -1271, -581, -2911, -7367, 5716, 2295, 9300, -1077, 6102, -6130, -363, 4445, -960, -228, -1981, -2674, 2167, 3563, 3122, 5298, -4346, 7313, -414, 2814, 5484, -5170, 1499, -1020, 1608, 1243, 1004, 2861, 3962, 3024, 2126, -3161, 4269, -1193, -1770, 5512, -661, -1105, 1483, -2778, 1242, 3168, 2200, 4879, -731, 3746, 1966, -5229, 3503, -1913, 273, -877, 762, -30, -861, 7748, -7882, 3489, 435, -2642, 1389, -1120, 356, 671, -1048, 4449, 3276, 6856, 1092, 802, -2772, -3656, -9209, 1992, 4474, 5740, -173, 27, 6900, -465, 1778, -4068, -8602, -2178, 2835, -1613, -5369, -644, 3151, -5575, 476, -4046, -4515, 1249, -10039, 1083, -1612, -3366, 3998, -1378, 2955, 2084, -1408, -155, -8344, 3203, 1911, 1249, 3969, -571, 404, 4336, 2325, 4414, -1626, 3251, 1771, 2101, -2276, -1263, -5103, 3804, -442, 1372, -2683, 5921, 3356, 472, 4671, -905, 7644, 1742, 4521, 647, -1105, 3858, -428, -240, -510, -5289, -3993, 2004, -1458, -5833, -2231, -1421, 1532, -1330, 2127, 4390, 2514, 1615, -2851, 1133, -1604, -3936, -734, -1310, 1321, 1188, -666, 3569, -335, -286, -2345, -1618, 510, -2988, -5552, 337, 541, 4487, -3599, -3657, 2630, 3729, 1301, -2336, -4642, 61, -1114, 1836, -2086, 572, 4890, -5637, 662, -1689, -5953, 640, -8519, 3246, -3955, 688, 5844, -3369, 3753, -818, 587, 2824, -2696, 2360, 833, 2076, 24, 3076, -1114, 6573, -277, 5250, 1188, 1346, 2589, -3466, 2186, -1134, -5486, 9041, -1461, 2103, -1848, 2045, 13, 4705, 3466, 6915, 5427, 2860, -2428, 5296, 3243, 2839, -4525, 5384, -492, -5281, 2240, 6651, -1723, -7455, -2395, 2415, -5145, 493, 4415, 2037, -667, 957, 27, 815, 171, -3015, -3999, -2606, 1540, 1189, 3083, 1407, -7737, 2625, 859, 1179, -68, -1753, -1315, 411, -404, 1878, -5202, -354, 5046, 5236, -1287, -2783, 125, -3254, -2112, -2731, -6593, -3079, 2407, -1623, 777, -2365, 203, -828, -6774, -3547, -1484, -930, 5357, 40, 331, 629, -1021, 492, -3444, 6181, 2379, -1352, -1496, 1151, -3838, 1585, 864, -482, 799, 3372, 1285, 1365, 502, -4723, -228, 3338, 2260, 1607, 2437, 2499, 3892, 5277, 5851, -4061, 2403, 4086, -323, 192, -8718, 1198, 2200, 3994, 942, -4547, -776, 198, -2212, -6810, 9563, -3190, 6577, 373, -1918, 4276, 4270, 1574, -3963, 3667, -1688, -5720, 6266, -6471, -2632, -1080, -7012, 173, 6619, 5411, -7388, -1133, -299, 6823, -8985, -1381, 1649, 7799, -3431, 327, 164, 221, 81, -752, -8764, -3610, -1644, 2179, -1228, -2963, 1214, 4139, 2057, 2114, -1415, 3713, -12766, 1332, -839, 8, 12324, -1770, 24, -3008, -831, 4176, -1193, 742, 575, 3238, 325, 8041, 7719, 6897, 5379, -191, -1131, 682, -421, 1883, 9962, -3883, 7414, 7407, -8320, 7591, 5530, 3266, 2563, 3412, 1925, -1583, 5143, 3505, -1321, 4183, -591, 3665, -1258, 8837, -1551, -3187, 695, 8030, -4777, -6579, -331, 1139, -5431, -4627, -2575, 8655, -519, 3840, -1430, 5569, -1455, -8508, -5420, 2878, -1713, 7103, -2954, -3266, -3643, 5367, -5492, -948, -967, -981, -348, -1931, -7327, 5068, -6020, -10437, -7423, 1920, -1505, 1354, -2106, -4169, -4096, -1580, -3911, -3764, 5059, -2862, 3510, -602, 2902, 3596, -6618, 167, -116, -2492, 8715, 1152, -1104, 2240, -2421, -2877, -4164, 3956, -1780, -2574, 3529, 2197, -1073, 7550, 692, 3049, -1119, -1523, 2199, 1846, 1240, -2306, 3172, 5881, -699, 4902, 2483, 232, -4420, 6498, 3946, -938, -615, 3773, 901, 3788, -5109, 2150, -342, 2066, 2229, -1856, 1660, 4200, -1663, -4178, 1445, -1564, 2084, 4940, 3695, 2528, 2553, 2810, -1532, -3352, 1811, -2114, -445, 935, -3599, 858, -5019, 3475, 2825, 1701, -248, 6814, -629, 3791, -5675, -5253, -2744, 6757, -1454, -5649, -295, 5704, -2020, -2883, -3063, -2180, 1265, -1177, -1, -2090, 617, -2394, 1385, 1640, 5818, -110, -4585, 2240, -3400, -2619, 1468, 4445, 7677, -3421, -4095, -1142, -585, 22, 2283, 2657, -1218, 7020, -503, 4997, -1342, 3455, -124, 2052, 1524, 481, 3728, -4418, 5374, 5615, -4130, 5128, 1998, -1700, 4198, 4220, 5909, -298, 2660, 4492, -1213, 779, -2443, -400, -7512, 7971, -1636, -819, 1656, 2543, -2553, -6183, 566, -1085, -5570, -2088, 1143, -3653, 542, 573, -1926, -157, -2843, -6160, -2152, 5133, -2156, -1421, -2499, 311, -1754, 6003, 4066, 893, -121, -3440, -1878, -3102, -4521, 2031, -3331, -5298, 529, 5636, -2470, -1718, 138, -5432, -4541, 1048, -6099, -2034, 3894, -2667, 2281, -5304, -1415, -697, -5513, 4853, 1955, -4087, 2564, 6487, 4173, -4103, -852, -3616, -8387, -813, 1789, 4779, -187, 1243, -432, 3267, -5561, 2515, -2389, 3031, 818, -1614, 488, -1209, -2993, 10079, 323, 4203, 2564, -430, 4096, 801, 7026, 6796, 4303, 5480, 1109, 2541, -1054, 9906, 3029, 3445, -3047, -9774, -3400, 4740, -2828, -6142, 497, 911, -2945, 2418, 2835, -2253, 3915, 739, -817, 1143, 2614, -6577, -5513, 3865, -3085, -1845, 887, -635, 2157, 6316, -1131, -405, -1132, -994, -5820, -4026, -5460, 6072, -959, 156, 4252, 2535, -339, -746, -3715, -865, -2627, 1440, -893, -5240, 3346, 5100, 4090, -1316, 1846, 7043, -8426, 3305, -1292, -4960, 6501, -912, 757, -320, -2985, -2602, -2793, 3598, 3061, 3536, 897, 6188, 2699, 8155, 31, 2703, -1813, 2768, -66, 4150, 2947, -2244, 3360, 8531, -776, 5073, 3749, 6018, 1674, 1909, 6218, -5431, 1128, 1107, 778, 4011, -2969, 3380, -3891, 4960, -4300, -6007, 449, 4125, -4421, -5503, 2950, 1214, -621, 2524, -3192, 226, 1077, 4783, -1345, 1824, 926, -6954, -2138, 4670, -2874, 3188, -6183, -298, -1623, 5977, -2936, 3329, 1782, -1095, -3627, -2737, -4406, 3938, -5915, -5141, 140, 8564, -2838, -988, -4773, -2917, 877, 1088, -3441, -2940, 2637, 1965, 5147, -5037, 2293, 4969, -7081, 3650, -3253, -994, 5395, 942, 1703, 1473, -2062, -864, -4255, -1727, 4388, 1570, 1762, 3335, 2863, 3531, -1398, 3326, -3175, -347, -4520, 4106, 3201, -3537, 2844, 5959, -5128, 6975, 4577, -153, 919, 4488, 6478, -1067, 4413, 3504, 530, 83, -1847, 4933, -4941, 3828, -60, -11200, 2116, 2279, -944, -6949, 4141, -1529, -864, -1467, 664, 9057, 3321, 5331, -3600, 2692, -378, -8880, -3740, 4566, -3119, 2615, -3799, -6736, -1965, 5465, -7319, 1103, 507, -1157, -2034, -4228, -1830, 4645, -3922, -4557, 170, 4578, -1059, 1824, -3415, 2015, 871, 354, -4366, -1552, 3357, 654, 2511, -893, -2509, 410, -11316, 2241, -4612, -264, 8963, -4204, 718, -3099, -1488, -222, 52, -2, 2090, 8737, -1998, 1810, 3431, 6720, 5082, 1532, -2850, 1134, -422, 8452, 6922, -2823, 522, 10538, -6566, 3569, 2029, 2390, 2484, 8541, 3617, -3507, 895, 2340, 5517, 401, -1404, 3904, 606, 1403, -105, -5629, 2089, 2496, -2069, -5752, 3724, 3083, -3755, 750, -4188, 4031, 93, 1422, -714, 3048, -3091, -8261, -315, 2614, -316, 1629, -2956, 556, -2595, 4358, -2406, -5667, 2992, 2974, -5939, -1161, -4538, 3753, -6706, -9435, -2006, -663, 34, 715, -508, -1686, 4292, 4147, 519, 1271, 6067, 6189, 4428, 2938, 2211, 392, -9053, 3008, -4838, 1057, 500, -5141, 10335, 4213, -2723, 1327, -3374, 2019, 2970, -1224, -80, 2126, 3276, 8803, 315, 4620, 482, -2078, -3066, 2421, 5251, -4506, -4019, 9582, -9805, 5385, 1819, 4465, -1860, 4780, 5510, 533, 6060, 3583, -3337, 6507, -1929, 5603, -4856, 3182, 1092, -8208, 6152, 7533, -5999, -8095, 4373, 802, -4315, -6474, -1860, 10972, -4225, 8471, 3544, 5379, -2159, -3042, -6366, -1809, -709, 4442, -673, -5509, -8299, 3506, -6475, 3172, -612, -2660, 1545, -4968, -924, 4424, -1451, -6295, 2603, 6368, -1647, 887, -5638, 1772, -3096, 2882, -2373, 260, 5797, 2902, 5235, -1260, -5808, -1425, -4353, 2195, -7753, -3066, 5829, -4532, 6321, -887, -173, -1720, -7169, 1500, -509, -1834, 1745, 4993, 4646, 6933, -1808, 4249, 2897, 2796, -3383, -2351, 1484, -3405, 669, 9540, -3525, 3466, 1940, 765, 2543, 1778, 5914, 5357, 1902, 5146, -1892, 2176, -2131, 3447, -2037, 4267, 7535, -1044, -3680, 8412, -5184, -5467, 1457, 197, -2529, -3721, -1114, 1761, -1877, 1011, 1344, 5691, -285, -1872, 214, 5771, -994, -2972, -2497, 1365, -2214, 4982, 1308, 1581, 1532, -2059, -3673, -4340, -1485, 6319, 1064, -2612, -1120, 1631, -2750, -2238, -5281, -3956, 4608, 4343, -1053, -2060, 8744, -296, 10129, -1723, -2404, 3477, -3895, 2061, -5210, 356, 2579, -363, 6078, 7310, 7229, 3959, -8518, 1685, 4383, 986, 76, 1480, 7231, 6307, 6218, 3578, 460, 645, -516, -2693, 4825, -79, 4446, 8799, -8095, 2290, 1782, 3278, 5742, 7115, 1755, 8, 2640, -81, 2728, 6344, 3604, 3533, -8983, 643, -3557, -5790, 64, 10135, 1687, 178, -3539, 5342, -3744, -2709, 1548, 7412, -2013, 2750, -321, 4530, -248, -5273, -9608, 1697, 3450, 5610, -1388, -681, -3291, 1459, -2040, 1293, 159, 7651, -1662, -981, -5523, 7409, -6110, 4529, 194, 6614, -4168, -849, -5679, -1833, 1724, 4382, -935, -1637, 4628, 1344, 2461, 186, -2357, 2023, -6609, 1451, -2867, -1327, 8975, -636, 2231, -779, 1001, -2097, -6924, -337, 3425, 201, 2346, 5310, 1127, 5923, -1403, -3416, -104, 827, 1148, 1050, 4330, -2733, 1886, 6476, -2433, 5954, 1952, -437, 965, 3689, 6688, 826, 6448, 2890, 145, 2259, -3302, 5429, -3881, 2532, 310, -8058, -369, 2728, -3720, -5794, -238, -580, -5898, -1478, -445, 2936, 1513, -195, 472, 5117, -2585, -8826, -6808, 940, 1160, -10, -1088, -817, -3886, 4195, -629, 2717, -143, 1898, -3858, -2863, -3604, 4191, -705, -1992, -279, 7517, -5201, -2822, 192, 207, -1720, -720, -6183, -10000, 3056, -1871, 8094, -335, 4880, 4375, -3826, -1060, -1237, -9800, -268, -325, 3654, -4394, -828, 4214, -7250, 191, -4655, 2183, 1778, 1007, 4134, 12387, -332, 7617, -2518, 2695, 5719, -3701, -2237, 1023, -1309, 3697, -1316, 5834, 3855, 6361, 4539, -1535, 7798, 4112, 892, 4819, 3301, 2162, -3824, -157, 1396, 1746, 2130, 2654, -296, 9718, -3846, -2538, -4627, -45, -3917, -6785, -347, 1306, -1925, 10360, -1212, -307, 3383, -2039, 1819, 556, -1915, -2915, -3251, 6282, -1098, 3585, 2388, 2168, 2270, 491, -9759, -5874, 2809, 5873, 3016, -2087, 3105, 10311, 1457, -2903, -8163, -3623, 2057, -4734, -5287, 300, 427, -7680, 5695, -4155, -1294, 2466, -7613, -597, -1780, -4692, 8041, -1570, 2066, -5018, -2420, -3256, -11179, 1778, -1545, -687, -1763, -1221, -1005, 6304, 167, 5899, 4090, 233, 4122, -3277, -6295, -470, 908, 7451, 536, 4485, 3520, 1566, 4607, -1976, 3486, 1659, 4555, 2987, -414, 3919, -5119, 3722, 3777, 2200, -476, 151, -1071, 5092, 2632, -1824, -2598, -1108, -4166, 3021, -2231, 34, -1187, 5228, -317, -1203, -1949, -4261, -2054, 3404, -2655, -2238, 48, 1830, 699, 2407, 3873, -2479, 2365, -652, -7288, -2016, 305, 4867, -4221, -4704, 1086, 6062, -3579, -5252, -6924, -3768, 1508, -1385, -4181, -4864, 5059, -3346, 5186, -6089, -2332, 2048, -1977, -2390, 3554, -2231, 4671, -3173, 3841, -2693, -1352, 5511, -4629, 2505, 3717, -1475, 171, 3933, 1955, 7399, 232, 3584, 4073, 1096, 2433, 2292, -1330, -2834, 1508, 8367, -6359, 3062, 3929, 2104, 3984, 1816, 277, -604, 3150, 3597, -1418, 6533, -951, -62, 3364, 4448, -867, -1779, 2606, 9503, -741, -6452, 3207, 5579, 3361, -3281, 1790, 4443, -1110, 5779, -720, 6509, -597, -832, -3575, -3726, 95, 38, 1321, 2900, -4912, 3078, -4720, -578, -1799, 5725, -8007, -817, 2902, 6148, -5548, 444, 2345, 868, -1516, -3938, -5849, -824, 705, 2066, -2707, 275, 8549, -4490, 4274, -2654, -3463, 3066, -6745, 1299, -2002, -2756, 6357, -1310, 10454, 1850, -958, 1494, -4846, 658, 137, 234, 1902, 4557, 6154, 9333, 2887, 5091, -1028, 1980, -919, 1397, 4310, -2700, 4040, 7155, -6298, 5187, 1353, 1751, 187, 5017, 6418, -396, 6402, 1672, -40, 5497, -1271, 4773, -4062, 2759, -1175, -7074, -248, 6237, -5284, -8116, 963, 5648, -3029, -4250, 2635, 921, -1889, 3454, -2304, 4510, -2487, -3426, -4562, 3182, 200, 1572, -203, 229, -2730, 4825, -2908, 2981, 2256, 2421, -2892, -3115, -982, 5852, 879, -1165, 1210, 5123, -2836, -2899, -4519, 169, -435, 2096, -3363, -1465, 3873, -4691, 1817, -3071, -1313, 1409, -11884, 3056, -2587, -578, 7591, 1721, 3561, -1157, 718, -1365, -5544, 2014, 249, -1191, 1140, 3353, -957, 5333, -4455, 3296, -229, 55, 300, -2796, -494, -1458, 1266, 7604, -2726, 2985, 5685, -1453, 2963, 1038, 3887, 5688, 1363, 6212, -1340, 2252, 1640, -27, 346, 3368, 3385, 1333, -1153, 5049, -1161, -5584, 2473, -5730, -3911, -2105, 927, 2858, 1185, 2907, -2636, -1118, -371, -5634, -4421, 3423, -1178, -2219, -603, 314, 1605, 3355, 740, -470, -633, -1098, -5952, -380, -6131, 4561, 1131, -2818, 585, 5217, -126, -2949, -5341, -2394, 1194, 2709, -2409, -4364, 3827, -1680, 3329, -584, 168, 3710, -5536, 124, 1287, -2496, 7300, -5417, 6213, -2238, -1107, 603, -4588, 105, -148, -1482, 3359, 1960, -1549, 5045, -5054, 3177, 1925, -356, 572, -571, 947, -356, -547, 3920, -518, 3282, 2337, 5387, 4196, 2450, 6497, 1348, 5426, 3305, -773, 1777, -2738, -2347, 1312, 3755, 1128, -5383, 574, 4603, 964, -4283, 4503, 506, -2309, 627, 926, 1308, 1037, 6000, -5156, 3097, -1781, -5606, -1830, 2226, -3467, -1385, 1957, 3611, 866, 3312, 2513, -1260, 778, -7089, -6091, -2514, 1692, 3078, -3530, -4879, 3231, 6129, 1810, -2095, -5738, 282, 1683, 4128, -4214, -1918, 7328, 1924, 1180, -4298, -5038, 2230, -6083, 2817, 927, -2355, 5891, -6379, 11464, 1200, 174, 2769, -4099, 5424, 1643, -4697, 7071, 3153, -1608, 4286, 4041, 5951, -169, 2793, 3, 2768, 4289, -2450, 5833, 3554, -3234, 5540, 1691, 805, 1643, 1666, 4693, 600, 4673, 1265, -2037, 1628, -1079, 622, -1293, 6276, -1039, -3329, -2549, 4671, -2855, -7303, 8566, 2850, -6471, 949, 1400, 5928, 187, 3568, -135, 4816, -852, -6387, -672, 1015, -5419, 1618, -5771, 5961, -190, 4045, -3095, 1014, 496, 179, -2392, -3917, -1167, 8340, -893, -2602, 387, 8066, -24, 1869, -6972, 1531, -3176, 1568, -4504, -2603, 629, -2311, 3225, -3178, -1967, 1999, -4730, 548, 179, -2732, 4231, 3619, 2066, -4581, -2536, 4321, -4496, 1750, 1690, -157, -6209, 4780, 115, 8828, 2056, 4977, 2258, 3876, 441, -4704, 606, -4624, 6200, 5533, -1447, 3737, 4497, 4763, 3859, -74, 5066, 5828, -1480, 2908, -3031, 3162, -6388, -178, -2352, 3706, 2327, 1871, -1265, 6907, -3087, -3875, 2030, 3645, 784, -2182, -4277, -2006, -2216, 538, -1934, 2883, 1069, -3448, 1974, -2700, -2880, -2738, -1588, -1245, -339, 5512, -451, 2128, 3309, 1944, -8391, -335, -2010, 2662, -2992, 2814, -1758, 2065, -2222, -1327, -4996, -3362, -2972, -1135, -2082, 446, -823, 174, 39, -1530, -2626, 2753, -6279, -3442, 2046, -5042, 5408, -4933, 1457, -2649, -190, 3765, -1320, 4595, -3456, -4735, 2659, 2790, -617, 4772, 1627, -317, -915, 1183, -1985, 596, -2608, -3814, 480, -1124, 1563, 1872, 2867, -2482, -2434, -3512, 1889, 5160, -1259, 9033, -2111, -3063, -1968, 52, 6745, 5307, 4795, -1283, -2178, 3741, -1003, -4547, 5880, 5175, -570, 82, 1041, 2297, 5086, -2651, -2279, -4001, 1366, -5, -2760, -452, -1894, -2362, -2142, 1698, 2764, -81, -3744, 782, 2088, -5183, -5597, -2010, 3505, 5998, -558, -2480, -2669, -3149, 1687, -504, -3722, -1961, -4385, -1583, -2218, -3272, 3108, 1871, -446, 612, 2348, 2895, -3044, 4953, -3363, -6406, 4930, -2259, -2611, -2367, -843, -4853, -3549, 442, 3088, 3523, -2188, 4854, -5671, 5223, -2681, 1725, -6014, 825, -1160, 3017, 2074, -1649, 4599, 7175, 3083, 3436, 5314, 9585, -3187, 305, 6522, 2547, 1536, 8255, -1242, -4026, -8736, 7326, 1251, 6501, -4360, -3994, 40, 5196, -3504, -4237, -404, -666, -1349, 1758, 1159, 538, 2567, 3079, -1032, -4510, 38, -6292, -7687, 2501, -1943, 1757, -3708, -1897, 3344, 6396, 1694, 2191, 1289, -1933, -2754, -3762, -2418, 4550, -2042, -6210, 896, 5774, -1723, 1717, -4893, -3293, 4305, 2577, -2121, 4394, 949, -2189, 4052, -6962, -2425, -1556, -2920, -96, -95, 1986, 613, -591, 7518, 1778, 2717, 1230, -3485, 2457, 1380, -917, 1010, 211, 1724, 2473, 967, 2384, 7864, 852, -2159, -3333, -359, -3816, 997, 3309, -2534, 2880, 541, -1873, 7910, 2544, 2775, 196, 3102, 3678, 2691, 1012, 821, -2773, -902, 3652, 2935, -981, -715, 4400, -953, -2529, 5078, 255, 857, -3986, -925, 3447, -1808, 1020, -1380, 2238, -1827, -2673, -3497, 1395, -3438, -3534, 896, 2547, 169, 2103, -1867, -1414, 1705, -642, -7450, -1026, -1820, 4426, 283, 2378, 2916, 2895, -1840, -830, -4016, 666, -7103, 4328, 85, -5690, 2930, 5850, 31, 1277, 1582, 7117, -5298, 1135, -3276, -7607, 5462, -4876, 419, 98, -955, 3455, -2041, 3322, -2425, -3151, -474, 4277, -1174, 9587, -1581, -217, -875, 3644, -3397, 672, 2891, -2073, -547, 2436, 315, 4743, 6228, 1878, -938, 1630, 6470, 981, -2352, 7564, -4868, 2393, -4734, 2902, -2449, 3135, 3115, -6433, -2640, 7597, -5729, -4830, 2403, 493, -5318, -282, -3339, 5077, 3224, 4251, -28, -1088, 778, -4592, -3669, -1235, -1398, -1236, -2572, 947, 1295, 4844, -2207, 2421, 1535, -3640, -6650, -5425, 2189, 7634, -2098, -3263, -1854, 4742, 2081, 79, -5273, -4127, -5511, -1233, -6445, -2519, 7008, -722, 3221, 220, -1418, 3175, -4873, 6749, -6105, -4101, 7103, 654, 2815, -4921, -1998, -2908, -3285, 2044, 3900, 5360, -1399, 4755, -2937, 7550, 2706, 858, -446, -482, 1107, -872, 2757, -1320, 3572, 10835, -5807, 5062, 3235, 978, 2733, 3358, 4947, 6482, 2451, 2103, -2946, 3642, -1715, 4702, -648, 6722, -2510, -6380, 2607, 6890, -5897, -6404, 5559, 5251, -946, -1873, -134, 2286, 3591, -1216, 2680, -534, 624, -5122, -4026, -466, -2681, -1434, -88, -67, -2187, 6437, -2357, 3121, 2902, 1770, -6714, -5810, -4320, 3824, -1455, -1921, 236, 774, -865, -775, 1067, -2783, -4629, 2617, -9675, -4941, 6292, -2808, 3604, -2443, 292, -1553, -2733, 164, -3531, -7174, 4845, 1072, -1134, -4431, -1152, -3195, -7228, 2208, 1589, -492, 2369, 2358, -7072, 2984, 1940, 2218, -1391, 993, 4848, -1831, -6800, -3470, -5742, 11378, 2126, 49, -701, 3659, -3009, 239, 7756, 5730, 3245, 7057, -2872, -1750, -3159, 9470, 4108, 2419, -167, 2284, -1409, -436, -4032, -6427, 4347, 2192, -414, 6019, 1859, 1748, 2232, -2456, -3084, -1944, 2187, -925, -198, -1942, -2803, 748, -2766, 2150, 2985, 1612, 1541, 2527, -2239, 4360, -8431, -5362, 943, 6408, -867, -846, 2395, 4718, -1518, 780, 41, -3154, -5118, 722, -10476, -2314, 11057, -6141, 2004, -3047, -7586, 4450, -4514, 4558, 967, -6932, 9774, 3, 2246, -5261, 1733, -1995, -4104, 855, 315, 3637, 218, 3415, -6206, 2957, -370, 6, -1813, 1833, 4055, -1361, -5261, 733, -9727, 5307, 1653, -1040, -167, -2513, 4429, 1077, 4935, 9437, 3541, 10428, -2564, -3737, -735, 8473, 5281, 5239, -587, -3732, 98, 2215, -5107, -6804, 2875, 5861, -3437, 4509, 6319, -1900, 7539, -826, -1845, -5904, 3569, -936, -792, -1459, -2715, -5684, -236, 5014, 8548, 2602, -1895, 4096, 3707, 777, -6080, -5624, 5862, 6038, 606, 1740, 3952, -1317, 1887, -2813, -519, -6016, -2791, -308, -5181, -4128, 3985, 2505, 2169, 2840, -3800, 6306, -6191, 2395, 4438, -3082, 7598, 2390, 6498, -1811, -328, -1986, -6171, -2379, 623, -2502, -2956, 5854, -2880, 6173, -900, 2773, -1789, 4548, -1307, -392, -59, -3013, 2208, 4306, -560, 2674, 3871, 4432, 296, -207, 6715, 7279, -1753, 11595, -1558, 2077, -3208, 5161, 3298, 3395, -142, -5052, 1574, 1674, -7364, -4644, 2492, 3594, -494, 736, 983, -4692, 4229, 451, -4398, -1799, 4090, -8493, 3657, 1112, -3576, -2975, 579, -2491, 4828, 7401, -281, 2180, -1018, 956, -3715, -1716, -5224, 5392, -859, 970, 3445, 648, -1779, -857, -3852, -5260, -4823, -262, -3308, -2221, -465, -4050, -1612, -3024, 6449, 5321, -6514, -992, 2002, 901, 3238, 7512, 6149, -3785, -7791, 1206, 457, 5117, 2399, -5294, -2745, -230, -350, 7143, -5423, 9461, -719, 6686, 1609, -170, -718, -1840, 7659, 2889, 1677, 6457, 6919, 4985, 4565, 6541, 4874, 3755, -1205, 3534, 2228, 5272, -5975, -3968, -4463, 5138, 2434, 973, -489, 4304, -3196, -7269, 2316, -3067, 2622, 2975, -29, -2054, 3354, 8659, -3237, 1972, 5830, -8614, 7802, -1551, -6720, 1738, -524, -527, 2434, 10302, 794, 4885, -578, -1283, -3601, -709, -3185, 6621, 636, 419, 2422, 1535, -468, 750, -8933, -5501, -5562, -968, -611, -3657, 1515, 3129, 3235, 1088, 831, -94, -4757, 381, -4752, -633, 190, -174, 5578, -2449, -2140, 3329, -5900, 2492, 2801, -3762, -3488, 4713, 3437, 10793, -1530, 1864, -3489, 3539, -1531, 1050, 2519, -1108, 7824, 8748, -1894, 5146, 894, 5532, 526, 3522, 6436, 4948, 1056, 1570, -5466, 3506, -6531, 5605, -6304, 5366, 5023, -7738, -1464, 10751, -3810, -5069, -188, 83, -1458, -4098, 543, -1646, -726, 1303, -4897, 9110, 281, -5760, -2402, 452, -1705, 1328, -1162, -2515, -3689, 3534, 1502, 4028, -2348, -1076, -3412, 771, -7542, 4330, 1166, -4830, -1940, 649, -4163, 595, -7332, -666, -1174, 1533, -7927, -2036, 3283, -2582, 3573, -3375, -1774, 29, -106, -3589, 1188, -2910, 1241, 2569, 5029, -71, -2216, -3642, -7348, -525, 3605, -6325, -247, 1970, -6469, 730, 390, 10302, 4479, 4723, -988, -5279, -4396, -2775, 1840, 1572, -538, 4150, 76, -365, 1184, -1489, 5552, 4383, -1356, 5699, -2298, -1433, -1074, 2986, 670, 4282, 1458, 6545, -3060, 1120, -3650, -5459, 5060, -950, 1190, 2508, 3704, -290, 2132, -1768, -6757, -946, 1854, -4531, -586, -560, -4208, -1696, -2105, 772, 2442, 3545, 513, 2479, -1564, 1694, -4755, -5187, 3495, 6721, -89, -927, 2586, 411, -2291, -1320, -3717, -2371, 1601, -497, -5570, -2046, 173, -300, 2437, -2793, -5761, 3503, -3451, 369, 1642, -1031, 14873, -5384, -2643, 42, 2144, 2069, -5028, 499, 3018, -1522, -832, 5202, 316, 3998, 2509, 2568, 5409, 2380, -2626, 4073, 284, -3675, -2271, 7605, -1013, 2540, 4909, -6947, 2740, -586, 2493, -3541, 1613, 3609, -644, -2543, -1568, 1052, 4627, 4322, -696, -4673, 1031, 1063, 1100, -3936, 4867, 173, -3717, 3814, -4660, 4446, 2229, 3212, -1328, 3040, -2345, -2005, -1141, 184, -1488, 1454, -3175, 3599, 1178, 2452, -3070, -1702, 2153, 2035, -6678, -3508, 5944, 6767, -6365, -6055, -1217, 1765, 316, 593, -2539, -2268, -113, 455, -1959, -5136, 780, -1927, 6410, -1111, -3388, 3950, -5673, -2772, 3284, -4172, 7871, -4733, 6829, -6455, -1677, 4222, -2261, 3245, -1057, -3744, 4554, 2708, 3969, 7234, -798, 5809, -432, -986, 3708, -1938, 1428, 1936, 2547, 3000, 2472, 3505, 1644, 3230, 3687, 2227, 3343, 3756, -122, 5240, -4206, 8012, -3755, -2156, 6609, 3979, 5505, 1972, -2624, 6336, -2609, -6645, 7748, 2136, -2464, 200, 3738, -359, 1353, 5609, -6866, 3394, -343, 1883, 3209, 753, -1952, -4397, 3912, 3776, 970, 3549, -44, 77, 1498, -5346, -8154, 1274, 207, 5481, -2901, -5924, 4429, 1430, 4049, -2641, -8975, -2814, 144, -1483, -5271, -334, 7529, -4730, 722, -4458, -780, -159, -9738, 168, -293, -482, 2873, -2472, 5149, -23, 2027, 2728, -5529, 2021, 2463, -1828, 4758, 3766, -1781, 1783, 2836, 4379, -2784, -242, -930, -1718, 299, 362, 1759, 1197, -3788, 2517, -1706, 4345, 900, 1090, 3181, 6347, 2400, 4399, -1965, -615, -1440, 1291, -1931, 3377, 2763, -4111, 379, 2135, -1811, -1205, 4037, 1525, 3240, -3960, 5858, 6979, 252, 1074, -6814, 2831, -1324, -6216, 1300, -3155, 823, 1639, -2581, -3991, 5669, -2687, -3702, 1078, -822, 206, -5235, -229, -3285, 5265, -3433, -1589, 1599, 761, 1560, 2475, -7633, 1144, -358, 1173, -8025, -6117, 5264, -678, 1752, -1768, -5097, 5361, -14260, -77, 6680, -1565, 10432, -6640, 872, -432, -5256, 5679, -2557, 6015, 892, -3534, -13, 2905, 2051, 5661, 617, 3000, 188, -2151, -646, -1100, 5252, -80, 616, 688, -2663, 5535, 1645, 5786, 3393, 2305, -2530, 7768, 4027, 6508, -8378, 1798, 2194, -445, 6919, 2989, 4833, 239, -3345, 11540, -925, -6705, 2236, 3640, 1763, -4568, 8034, 4609, 1520, 5500, -3503, 1480, 2979, -6496, 736, -3466, -3462, 6881, 3799, 225, 1088, -326, -1566, 5267, -1450, -1461, -4023, 698, -1985, 3120, -1652, -3332, -1807, -2414, 4427, -1145, -8264, -78, -1260, 1095, -3438, -2639, 1018, -210, 1597, -1830, 2264, 3495, -13445, 1067, -1172, -5859, 3810, 472, 6265, -1023, -3845, -2267, -2067, 1858, 1220, -1375, -1491, 6297, 2608, 6486, 2964, 1878, -5078, 3302, -2111, -585, 2867, -3455, 5271, 2912, -5259, 7625, 4104, 1305, 5796, 6294, 6747, 1150, 3238, 7847, 640, 3595, -3323, 1741, -2890, 4731, 3693, -3882, -5004, 8148, -2321, -8184, 5558, 2615, -2387, -3075, -1171, 6735, 792, 2790, -2115, 2688, 413, -5476, -268, 4277, -3146, 3026, -634, 2158, -1058, 5299, -5473, -2244, 819, 72, -1960, -333, -2936, 4455, -3078, -791, 1674, -417, 379, 2191, -7517, -897, 1062, 2799, -1947, 51, 2765, -14, -1615, -5437, 3359, 2266, -12189, -742, -2544, 3236, 288, 3599, 5300, 374, 5, 662, -3456, 2835, 4532, 1534, 202, 2271, 2326, 5597, 1352, 7824, -2543, 2523, 708, 1594, -891, -4447, 2848, 2177, -2518, 2768, 2014, 625, 1996, 1687, 3914, 223, 82, 3030, 1163, -1007, -1834, 1693, -3542, 7507, 2469, -2758, 3086, 1632, -2496, -7977, 3739, -608, 432, -102, -816, 4898, 1289, 4089, -1642, 2817, -355, -7140, 4909, -774, -3884, 1748, -2637, -1363, -1121, 4439, -4775, -378, -9, -392, -5054, -1392, -2558, 3753, -482, -1659, 4075, 3101, -4222, 62, -8616, -2562, -2353, -2497, -1230, -1124, -1800, 1340, 2276, -3395, -2265, 2179, -7297, 3013, 429, 3044, 9429, -1231, 2227, -3430, -851, 53, -6901, 1330, -2323, 2787, -1722, 4279, 2348, 7402, -4157, 4468, 1243, -797, 25, -762, 772, -3664, 2781, 6153, -707, 3471, 6206, 2831, 7410, 1454, 5577, 576, 393, 8165, 1900, 1728, 1150, 136, 1179, 2098, -2186, -7452, 5491, 1458, -1096, -2580, 2460, -1306, 4929, -1111, 1091, 1295, 1188, 9149, -5974, 628, 3331, -9073, -5061, 1418, 535, -2688, -2706, -2363, 4582, 2416, 778, -2859, -747, -2659, -7130, -4678, -7377, 4217, -3358, -3417, 4938, 3444, -354, -4671, -6223, 1951, 2704, 5159, -546, 749, 1356, -1046, 2690, -3891, -1690, 4815, -5441, 2168, -4374, -648, 3727, 2770, 1751, -613, -4308, -2299, -5005, 1090, 3597, -1606, 1273, 3411, -2648, 6746, -1569, 4505, 1304, 2084, 691, 620, 335, -3859, 647, 3725, 198, 4087, 3474, 1006, 3697, 937, 5790, 1233, -1766, 6384, 1048, -1710, -4377, 21, -569, 3607, 5114, 5828, -2544, 96, -5731, -5204, 3393, 452, 2310, 740, -1768, -2040, 3298, 315, -326, -872, 254, -1998, -3408, 1582, -624, -3977, -1199, 2562, 2584, 4649, 4100, 1156, 2273, -3869, -6497, -2702, -2613, 4589, 473, -1992, 1218, 2129, -1114, -2742, -4206, -3196, -738, 422, -5980, -3369, 3255, -4896, -1431, -252, -321, 3383, -4135, 1781, 432, -4675, 10353, -2985, 4818, -3528, -4759, -1737, -3323, 2182, -1863, -2601, -1807, 1088, -2364, 6468, -2572, 3575, 1206, 3014, -1797, 1378, 1149, -3667, 1858, 2500, -217, 6045, 2797, 323, -1571, 4033, 5870, 982, -935, 8308, 888, -1830, -5972, 621, 3930, 3563, 6665, -3379, -2459, -652, -5996, -4576, 5005, 1374, -4412, 1205, -994, -5507, 1692, 4404, -5108, -625, -1789, -6045, 4805, 2156, -305, -941, -492, -55, 1081, 4844, 832, 133, 4260, -7001, -5492, -4939, 3024, 3228, -1233, -1701, 3755, 3306, -448, -2626, -6050, -2831, -749, 84, -5098, -4679, 2027, -2464, 1819, -3845, -1733, 620, -3487, 1169, -191, 537, 1938, 1125, 7613, -2629, -1399, 4876, -3336, 2752, -552, -7112, 1308, 168, 3561, 3927, -2193, 2886, 6077, 4356, 855, -1017, 1420, -1459, 4582, -1169, -439, 4419, 5593, 1681, 1512, 6043, 5089, -503, -194, 4217, -499, 2444, -4295, -5420, 242, 5402, 5682, 2141, -3016, 4115, -1327, -5326, 7530, 356, -2586, 2561, -593, 1070, 455, 4091, -5680, 253, -1767, -3344, 4453, -1769, -2551, -1983, -2308, 3996, 6353, 3902, 28, -1558, -406, -2976, -8951, -863, 4178, 8257, -22, -1387, 4148, 1760, 2100, -946, -8939, -2668, -755, 1965, -2904, 2670, 2845, 284, 686, -2626, -4251, 1686, -2592, -1092, -2321, -4028, 4824, 973, 2879, -2318, -2674, -2334, -2120, 444, 1643, -4515, -189, 2794, -622, 2749, 92, 7428, 1136, 4687, -2461, -809, -3473, -2426, -2333, 4164, 538, 2244, 2890, 305, -244, -1369, 3352, 5367, -471, 5262, -3373, 828, -1235, 1753, 2286, 1924, 1552, -1601, -1388, -952, -7292, -4908, 4699, -231, -2497, 766, 1569, 669, 4373, -2722, -3011, -1035, 2931, -2641, -1686, -1850, -2621, -3548, 1434, -3743, 1986, 5041, -1915, 2228, 1440, -4672, -1876, -1897, 5019, 4345, -116, -5816, 135, -3556, 153, -724, -5261, -4275, -2431, 1676, -2277, -7001, 2902, 1519, 2885, -2568, -486, 6642, -9481, 463, 2495, -303, 4363, -3689, 4603, -883, 1063, 4099, -4580, 4439, 3185, 2029, -2678, 6235, 3458, 8296, -3936, 3371, 2243, 824, -2995, 1170, -2730, -4651, 3040, 3460, -1391, 2812, 3149, 2013, 741, 1226, 4859, -3647, -153, 8728, -2100, -2400, -1897, 1355, -1188, 6682, -2104, -7625, 3248, 3921, -1721, -5160, 3007, 2087, 2408, -1605, -220, 4603, 1102, 4815, -2952, 4664, -209, -7178, -1099, -1980, -1567, 3533, -947, -1372, -1546, 5232, -5801, -388, -2984, -3838, -6430, -1831, -4517, 7431, -2531, 235, 4436, 3216, -306, -770, -3579, 716, -3388, 1654, -1303, -4018, 3786, -1104, 1322, 631, 426, 3389, -9337, 864, -3385, -3379, 8629, -4073, 2027, -1036, -3575, -2858, -664, 4300, 973, 1753, -2655, 7155, -840, 6779, 2049, 3092, -3988, -211, -1652, -1691, -1191, -878, 762, 6957, -1390, 5783, 2080, 4515, 8626, 7428, 6619, 623, 3038, 5895, -1454, -35, -355, 1386, -5027, 3166, 1235, -6320, -2355, 387, -3558, -6747, 5853, -2722, -5746, -985, -3096, 3798, -621, 5949, -10483, 5999, 1050, -8791, 384, -362, -2483, 2271, -1048, -4315, -585, 4562, -2633, 681, 140, -3457, -5668, -6018, -630, 4396, -2211, -4512, 4135, 354, 571, 599, -6892, -79, -2132, 1062, -3376, -1192, 973, -354, 8930, 632, 2468, 390, -4455, 2346, -5656, -6479, 4827, -276, 6484, -4412, -4073, -1569, -1877, 4831, -547, 261, -1488, 2240, -568, 9052, -295, 4524, -1539, 85, 415, -2774, 1532, -2934, 2824, 6596, -4101, 9104, 4714, 2200, 3833, 4608, 6162, 3548, -1726, 9730, 1885, 3910, -5511, -2202, 83, 1340, 5114, 2569, -2496, 3495, -3562, -3423, 2014, -4005, -3843, -1981, 1548, -4231, 188, 5178, -2499, -1826, 1527, -5650, -1746, 6045, 399, -5282, -2921, -412, 994, 5725, 3949, -1143, 1699, -1914, -6451, -6748, -7616, 2615, 1004, -2718, -145, -1175, -143, -5150, -5742, -4838, -206, 2149, -4763, 531, 5542, -1676, -1124, -2237, -2737, 3599, 41, 9346, -4321, -5396, 8895, -4468, 100, 906, 714, -3621, -8507, 2381, 879, 1065, -818, 4813, -6117, 4771, -1470, -654, -1145, 380, -1676, 2985, 2468, -3388, -7100, 10711, -724, 2200, 533, -1187, 500, 4651, 4193, 3751, 2697, 7039, -48, -3313, -2598, 6233, 1004, 3851, -1251, -8924, 2650, 3599, -3948, -6587, 6283, 2560, 2344, 2763, -814, 1916, 4866, 67, -1642, -1370, 1413, -2325, -4092, 211, 1270, -2321, -3248, 2932, 975, 4740, -3453, 452, -258, -1703, -4929, -5310, -2616, 6370, -1602, -2629, 1810, 3484, 1241, -2147, -683, -3003, -4357, -3507, -6135, -2509, -841, -3544, 8774, -2846, -2373, 5533, -12533, 4352, -3498, -1496, 4833, -3403, -1674, -2207, -536, 2482, -6647, 2537, -2928, -1561, 2359, 107, 2307, 6530, 1018, 1767, 2119, 1665, 4930, -2336, -2373, -1831, 383, 7595, 109, 4881, 4669, -1598, 118, 1509, 5408, -375, 3334, 5710, 267, 7040, -2554, 761, 5429, 4159, 4844, -4044, 1709, 5147, 2780, -5006, 400, -3353, -5416, -1540, -561, 2639, 1545, 7583, 713, -4246, -1111, -1919, -4185, 288, -3654, -4067, 1323, 7636, 1325, 1965, 1319, -1897, 4971, -2640, -8959, -1646, 3457, 6612, -2256, -2166, 2785, 5696, -664, -4658, -3891, -5191, 2455, 5230, -5997, -5058, 3413, -4298, 8123, 1711, -1191, 6013, -13295, 6567, -6014, -5364, 2135, -4088, -2102, 7841, 500, -701, -2561, 5501, 262, 4235, -1479, 6574, 2820, 9784, -5756, 6316, -3137, -2007, -3136, -9, 1218, -3241, -2974, 10165, -6302, 5991, 3981, 4732, -1734, 2914, 4968, 227, 2475, 5965, -341, 2837, -200, 3643, -2914, 1015, 3060, -10897, -3908, 6223, -1232, -3699, -4475, -7117, -3610, -5044, -1959, 6216, -2487, 4044, -3577, 3076, 4638, -1778, -3261, 697, -2295, 1356, -4156, -3412, -886, 5230, -5356, 5982, -1051, -3274, -3302, -3693, -3004, 1954, -2111, -8122, -3380, 7464, -715, 1397, -4797, 42, 926, -210, -4545, -2339, 3827, -2324, -1098, -1535, -3167, 2737, -12375, 3779, -2087, -1066, -118, -3331, 7709, -4442, -2632, 2109, -8271, 642, 462, -1602, -1502, 2321, 4230, 3018, 1840, 4258, 555, 4450, -77, -1194, 352, -20, 4530, 5208, -5540, 2492, 2596, 1339, 5929, 3261, 3821, 7573, 2637, 2921, -2673, -672, 598, 755, -2104, 4284, -2128, -3876, 2668, 3908, -622, -8544, 2867, 4851, -5708, 14, 1493, 7353, -242, 2378, -6731, 41, 3603, -5771, 722, -1608, -3082, 2927, -1668, 799, -2686, 1751, -5275, -4390, 224, -2139, -1397, 1797, 55, 5460, -3173, -5140, 1633, -1154, 2594, 3094, -7428, -1410, -235, -2416, -4512, 3527, 1304, 135, 7040, -1383, 2745, 139, -5634, 2795, 1094, -3645, 3622, 1793, 3288, -2307, 2105, -4051, -7887, 5323, 280, 489, 1778, 1461, 2362, 3844, 2, 3857, 2768, 1422, 5294, -1952, -2339, -120, -1050, 8314, 1985, 3713, -435, 1240, -207, 656, 5033, 785, 2584, 3966, 3951, 846, -5627, 3571, 832, 3381, 592, -2260, 728, 4627, -3396, -5249, 5677, 2886, -1749, 1096, -2262, -211, 981, 5428, 1325, 2675, 340, -4471, -483, 2003, -4273, -1639, -1107, 5327, 3192, 3406, 1812, -30, 3004, -193, -7335, -476, 596, 7079, 1733, -2104, 971, 2882, -431, -3434, -6809, -4770, 2306, 1608, -4635, -484, 1183, -1213, 2323, -8303, -7846, 1202, -5038, -6555, 1023, -7243, 1168, -1635, 5287, -5082, -479, 1675, -5957, 4479, -451, -5278, 4520, 2001, -242, 5529, 4346, -216, 4638, 4361, 2123, -2010, -2023, -4686, 1793, 2765, -453, 4774, 242, -284, 4826, 1018, 3388, 970, 1023, 2601, -5271, -2858, -2397, -429, 4220, 7448, 1411, 6782, -6928, 3426, -378, -9586, 5547, 2777, 1, -3861, 965, 1723, 1989, -364, -3397, 3693, 17, 1902, -4049, -1318, -5068, -2643, -4743, 4329, -1576, 4127, -2921, 1417, 1486, -3719, -6683, 1457, 923, 6274, 1594, 3305, 1911, -12, -2410, -2000, -6410, -5046, 2491, 5807, -273, 3743, 1371, 1948, 4399, -6778, -5592, 5051, -9921, 1745, -5502, 656, 6030, -995, 5662, 5069, 1191, 5067, -2966, -868, 7486, 1403, 5312, 7970, 8491, 3372, 2811, 2844, -996, 2128, -5705, 6256, 5652, -4343, 4118, 9697, -5434, 3247, 1550, -2815, 2322, 3890, 3153, -4394, 4068, -962, -494, 1388, -1026, 5458, -2058, 3812, -963, -12831, -2816, 1400, -4140, -7264, -605, -711, -4421, -4033, 1106, 5865, -128, -1816, 700, 9077, -1770, -2019, -5878, -2305, -5476, -1302, -1296, -6150, -4444, 5081, -4609, 272, 737, 1298, -2426, -2757, -562, 3956, -1118, -7867, -3435, 2200, -2112, 550, -4449, -460, 432, 1356, -7340, -2636, 835, -2794, 4006, -4182, 229, 2725, -9582, -735, 1851, -919, 7302, 2912, 7002, -3321, -120, 1080, -1983, -116, 4119, -468, 803, 4322, 1654, 4120, -497, 3268, 416, 884, -262, -2946, -2536, -2592, 3572, 367, -224, 4096, 1818, -1021, 2534, 3155, 5792, 2560, 3760, 8203, -209, -490, -2058, 2174, 2777, 4414, 4406, -4363, -1007, 2507, -736, -5904, 6301, 547, 3750, -778, 4265, 2528, 827, 440, -6172, 5189, -572, -4096, 2681, 172, -3045, -3281, 2251, -987, 1864, 3508, -2006, -3066, -2577, -2562, -8805, -1141, -3619, 3729, -217, -1388, 2302, -1572, 686, -1949, -4223, -800, 1381, 2339, -4427, -56, 6108, -3163, 3451, -3832, -4488, -420, -5461, -2514, 537, 1759, 6904, -3162, 7394, -3857, 472, 165, -5477, 4856, 3241, -5755, 3255, 331, 1626, 3613, 3667, 3815, 525, 1436, 1400, -1280, -4834, -1583, -2743, 7375, -734, 2560, 3390, -867, 4381, 922, 3581, 2830, 3959, 2298, -2582, 2791, -1433, 3305, 1794, 2263, 129, 666, 385, 2601, -1350, -7722, 4762, -1264, -1384, -892, 1963, 3723, -277, 218, -3145, 2298, -137, -3269, -905, -993, -1341, 540, -147, 2196, -1048, 3189, -2494, -180, 1981, 5093, -7374, -2313, 730, 7483, 1636, -1152, 2479, -254, -3561, -1967, -9448, -1766, 3718, -1462, 4626, -541, -3408, -2124, 401, -6697, -1824, -2, -11764, -2029, -4680, 4053, 6555, -1578, 2098, 2001, -131, 2612, 52, 4641, 77, -3975, 2758, -563, 9842, 4421, 4016, 4920, -903, 2266, -1239, 3494, 2515, -2136, 279, 6315, -5770, 4748, 3109, -3231, 9046, 2672, 1976, -2560, -1277, -9, -431, -1041, 1725, -31, -7430, -222, 4198, -5630, -2328, -1319, -2074, -6931, 3984, -8542, -3810, -5983, -4503, 8692, -331, 8307, -2512, 9984, -5170, -6726, 1687, -1527, -360, -47, 1331, -4201, -5966, 4547, -6520, -5131, 7287, -4913, -2765, 32, 3295, 4712, -4068, -8575, -854, 4345, -3402, 2595, -11917, -2416, 343, -3565, -3702, -4246, 2292, -2745, 3766, 1377, -3588, 3971, -8203, -1246, -1868, -1498, 5877, -4031, 2926, -3974, -5163, 4374, -4066, 436, 126, -5495, -3421, 5523, 8471, 6014, -569, 6590, 4163, 3550, 123, -2790, -51, -4082, 3774, 2533, -1187, 2035, 5256, 842, -3454, -570, 5896, 3439, -870, 7435, -2017, -3383, 1029, -4695, 3792, 2257, 626, -2755, 1380, 4443, 284, -5507, -391, 1876, -3136, 914, -1759, 3332, 2662, 4755, -4616, -596, -675, -366, -598, -1669, 749, -1719, 2833, 458, 1548, 3330, -2010, 316, -909, -5469, -5379, -408, 5603, 5688, -3301, -2894, -240, -848, 2015, -371, -5431, -2154, -3969, -5997, -10173, -2629, 7096, -8918, 8554, -3993, -9186, 7309, -13065, 4563, 1370, -2366, 6677, -6559, 3452, -4751, 550, 4795, -11029, 1044, -90, 3314, 2829, 913, 3307, 3255, 1728, 4489, 1490, -3666, 11, -3177, -5296, 224, -444, 6890, -5240, 2757, 1611, -9, 4387, 1576, 4351, 4526, 6140, 7004, 190, 2125, 1022, 722, 3420, 3327, -3742, -8798, 3125, 4167, 1303, -3310, -68, 3024, 3243, -3813, 8547, 5472, -1765, 7622, -9240, 420, -773, -7164, -3610, 781, -1824, -1328, 2449, 1740, 338, 1176, -3928, -1468, -385, -3289, -9112, -3457, -5497, 3179, -4993, -7121, 2869, -402, 4748, -4829, -4555, 1029, 4359, 4363, -1597, 782, 2737, -9381, 4919, -2756, -4664, 1430, -4640, 3124, -3596, 622, 9058, -3074, 6086, 380, 1244, 1364, -4058, 825, 310, 3779, -2754, 6937, 1648, 4103, 4, 5897, 951, -1211, 2809, -1227, 2276, -546, -2709, 7790, -1680, 1153, 971, -2915, 7200, 3840, 4704, 997, 6008, 4277, -2159, 542, 3049, 3013, -477, 3770, -444, -5288, -1209, 3508, 700, -5457, 2431, 3282, -4148, 457, -458, 1648, 48, 1443, -3712, 6397, -534, -581, -295, -924, -820, -4379, -324, 2361, -655, 5096, 484, -1120, 1689, -261, -6822, -2756, 3336, 5505, -3788, -1898, 4307, 2288, 1944, -1742, -669, -1881, 4345, -261, -4456, 427, -1348, -4264, 4562, -9627, -1218, 2726, -6486, -3489, 4169, -533, 7053, 3575, 752, -1376, -1011, 1884, -1994, 3682, 1640, 3533, 1677, 460, -107, 8583, 406, 8280, 2685, 2048, 3071, 360, -2008, -3238, 719, 5215, 2623, 3534, 2737, 1976, 3263, 727, 4985, -669, 4781, 7360, 3263, 249, -1690, 3395, 3438, 2680, -957, -52, 907, 753, 528, -8154, 1780, 1781, 709, -2654, -2565, 545, -416, 6604, 114, 5574, -1638, -191, -1244, 2819, -3711, -3949, 783, 302, 1192, 5074, 50, -173, 1219, 2955, -12655, -1550, 3167, 6273, -1726, -3926, 3593, 2897, -477, -3450, -10170, -2959, 3406, 2600, -3026, 1059, 1992, 1583, 3031, -6535, -5154, 2020, -11384, 5458, -413, -5002, 34, -406, 6973, 135, -3172, 157, -9384, 7311, 1037, -3618, 288, 2263, 223, 6682, -3212, 6332, 4364, 5763, -1394, 2729, -2374, -4207, 1700, 1948, -1879, 3323, -263, 2000, 3333, -904, 5026, 4192, -951, 9732, 539, -813, -4337, -19, 338, 3061, -964, -647, -1471, 1875, -3809, -7771, 10889, 487, 7836, -2482, -930, 564, 3045, 3502, 585, 1695, -1245, -2058, -1947, -2996, 704, -1005, -3421, 2351, 3646, 3853, -871, -177, -4891, -7557, -4540, -1286, -9661, 5297, 3167, 2027, 7366, 2834, -2532, -3065, -6937, -269, -3673, -404, -5839, -5270, 5646, -1700, 4866, -3457, -3950, 3158, -5458, 2029, 2224, -3874, 10418, 3344, 3043, -6304, -2529, 88, -2023, -810, -909, 147, 1327, 844, -1474, 5686, -1227, 3104, 1103, 1922, 1253, -274, -1417, 146, -990, 1406, 3833, 3244, 5772, 2512, 6259, -421, 3924, 9530, 1785, 7792, -2395, -1634, -4038, 160, 4814, 587, 3984, 1494, -3589, 2149, -1838, -6192, 4261, 3375, 1910, 5210, 3936, -2672, 5418, 3737, -1747, -1455, 1674, -1323, 1417, 2833, 1566, -4019, 1882, 3291, 3654, 3379, 6718, 743, 3991, -4315, -8009, -105, 3160, 2864, -2343, -2321, 5590, -4035, -746, -2242, -3137, -4101, -2720, -539, -5099, -5715, 2493, -1106, 6828, -4872, -1567, 5168, -4757, 959, -1650, 81, 11723, 9, 2549, -3708, 892, 5430, -4809, 3270, 1702, -1927, 2842, 3747, 6049, 8042, -227, -1700, 1665, 1474, 2191, 8, -1607, -2103, 3875, 8452, -4143, 3263, 1776, -1766, 6929, 3221, 3609, -970, -705, 6509, -3590, 28, 4313, 3155, 1566, 3675, 2447, -11140, -1114, 3186, -2453, -4050, 5641, -753, 15, -2398, 1976, 1902, 3520, 7945, -6202, 4163, 1957, -6410, 741, -1140, -1425, -1361, 2540, -2216, 2786, 2622, -6505, -732, 1292, -276, -8132, -3767, -4479, 7692, -1804, 626, 2897, 2285, 2109, -575, -7651, -1037, -4013, -4351, -5514, -1746, -175, -2066, -712, -2582, -409, 2694, -5561, 1664, 972, 695, 7339, 52, 3518, -4539, -1099, -905, -6528, 2647, 1349, -6691, -2251, 3060, -3154, 1053, -4316, 8136, 3960, 1101, -403, -3298, -2725, -1942, 4213, 2586, 3716, 2407, 5464, -828, 8336, -248, 2917, 12035, -3118, 11847, -3913, -4454, -1942, -206, 5859, 3820, 2946, -59, -99, 1167, -2914, -4929, 6289, -353, 8148, 944, 2402, -3576, 4624, 858, -8469, 793, 4906, -3438, 1372, -3397, -736, -2532, 340, 1770, 5527, 2608, 2178, -3341, -1945, -3352, -6291, -1342, -2137, 5118, -2166, -1307, 11244, -3338, -2980, -2236, -8532, 1164, -2642, 650, -4641, -3088, 6239, 1975, 5970, 953, -132, 6516, -9996, 3031, 659, -2184, 9794, -3595, 208, 378, 464, -2303, -1545, 4167, 2072, 2382, 63, 5597, -1267, 5257, -4674, 6874, 237, -730, 1490, 38, 1040, 161, -5904, 7896, -2361, 5101, 1834, 4689, -982, 1353, 3479, 4746, 4068, 8025, -782, 6281, 2110, 3167, -214, 2341, -1110, -14088, 2727, 2386, -3425, -6991, 2511, -3590, -3896, 3722, -636, 5291, 1827, 5143, -6589, 4988, 3084, -7563, 736, -3293, -757, -121, 575, -2307, 101, 5284, -4031, 628, -3024, 1132, -5184, 156, 1010, 4027, -6219, -4016, 1951, -31, 1701, -619, -4696, -1691, 1674, 796, 27, 2413, 2654, 5020, 3436, -3872, -670, 547, -6287, 2220, -5027, -2071, 3136, 1648, 4223, -802, 2057, -221, -7042, 1980, 1086, -1766, 4391, 2104, -335, 4358, -284, 2073, 1360, 661, 2706, -326, 261, -4834, 5300, 5328, -4809, 4473, 773, 3728, 1956, 1032, 4131, 465, 2051, 3507, 4331, 2577, -3043, -113, -3597, 4684, 1910, -1230, 283, 3224, -7272, -3469, 5656, 1061, -709, -5487, -2242, 5783, -457, -556, 1784, 2985, -1898, -4549, -3401, 783, 576, 1836, -4926, 2274, -396, 2387, -347, 1075, -996, -1125, -6440, 865, -3967, 4296, 41, 3185, 3415, 3886, -5095, -195, -2841, -1136, -947, 2179, -2554, -58, 2926, 7, 4079, -2626, -678, 2886, -6571, 6072, -1684, -4800, 6791, 1240, 1370, 2857, -2055, -1308, -4822, 4974, 3273, 395, 702, 3654, -3761, 4593, 4297, -565, -313, 1857, -738, 5617, -89, -2842, -1390, 7729, -325, 6104, 4071, -242, 1753, 3996, 4349, 362, 5284, 3538, 652, 3211, -5692, 3325, -440, 4206, -492, -1665, -844, 5966, -3808, -4571, -273, 4668, -4579, 2793, -353, 802, 5239, 1497, 6464, -3167, 851, -953, -7299, 3663, -3014, -3676, -4421, 3560, -592, 3851, 2068, 3604, 5771, 4536, -3759, -6631, -2329, 7662, -1539, 51, -91, 5665, -3959, -3321, 1579, -3424, -2928, 2038, -3137, -3983, 2515, 804, -237, -1741, -1233, 3612, -13314, 1063, 775, -255, 1527, -3639, 7996, -3012, -35, 3083, -2773, 3884, 1184, -1680, 757, 3764, 3337, 4629, -2552, 6058, 3354, 3807, -1558, 616, -2197, 382, 1046, 3045, -1266, 111, 4387, 1161, 1016, 3762, 2792, 3949, 2437, 3414, -1758, 3689, -3626, -1413, -3895, 7524, 2249, -4043, 1115, 4410, -1977, -6125, 3177, 446, 1316, -3263, -747, 1265, -618, 2444, -5197, 6339, -1054, -6942, 4578, -2437, -610, 349, -163, -413, -2812, 3274, -2824, -1419, -917, -3628, -4067, 1042, -1260, 4761, -3304, -3697, 4391, 944, -468, -1996, -7712, -4052, -1873, 1010, -5106, -6227, -106, 1951, -356, -3108, 6185, 2629, -4649, -4306, 3866, -7575, 2193, -27, 9551, -5787, -1930, 1040, 3637, 6831, 3390, -1441, -1046, 7849, -3695, 7383, 2154, 2916, 20, 4401, -1698, -4658, -1943, -3646, 5164, 788, -2955, 6240, 3034, -151, 7563, 1992, 5114, 2915, 2990, 12219, -3964, 1194, -810, 856, 63, 9422, -308, -3525, -3394, 5080, -2787, -7517, 7852, 3575, -2170, -752, 3467, 1868, -693, 5994, -3821, 6814, 3639, -4784, -1031, 1159, -5563, 365, 636, -742, 783, 5440, -1809, 1672, -1955, -3433, -5631, -2299, 881, 4165, -876, -224, 108, -500, 3564, 2283, -7014, -4168, -904, 2494, -2372, -223, 3788, -1797, 2617, -1543, -2720, 2693, -3702, 2637, -1275, -2894, 1437, 975, 1029, -765, 487, -24, -6456, 1249, 353, 281, -5407, 5448, 556, 8975, -1541, 3302, 1979, 1178, 306, 620, -832, -4137, 4159, 8906, -7967, 5159, 4050, 1756, 210, 4447, 5366, -907, 4119, 7997, 1689, 1726, -1382, 1365, 386, 5809, -4314, -4334, 1910, 8237, -5303, -2646, -107, 2263, 164, -4590, 189, 2014, -826, 2556, -3488, 398, 2679, -3705, -7846, -135, 1667, -1332, -3322, -1905, -1944, 3913, -2691, 1255, -3035, -130, -3722, -2874, -7274, 3635, -2923, -4211, 341, 1695, -3139, -2108, 496, 1648, -940, -829, -4633, -2160, 2712, -3339, 650, -6108, -2549, 4833, -10349, 498, -30, 1532, 5263, 760, 4988, -2753, -1678, 8220, -3009, 3093, 547, -3682, -1732, -385, 5422, 3671, -1735, 5669, 2647, 4489, 711, 1763, 3085, -3762, 4096, 626, -4703, 4578, 4865, -1438, 6076, 1203, 1078, -6, 1546, 2378, 212, 2877, -1392, -2463, -184, 5772, 6173, -5392, -1014, 4237, -2932, -5128, 6355, 1278, -236, -2697, -4412, 2696, 1648, 4661, -3746, 4307, -1756, -8861, 5575, -2050, -2928, 351, -1897, 2100, 1559, 3594, -6494, -2764, 1260, -3569, -7967, 2089, 1242, 4815, -6495, -4630, -1602, -364, 2811, 161, -9927, -1361, 604, 796, -2809, -2257, 2616, 2089, 6894, -4142, -4270, 838, -5857, -1606, 132, -5712, 2191, -646, 5737, -2162, 1932, 1854, -3347, 828, 1887, -4380, 4707, 2565, 3968, 8027, 244, 752, -2408, 2938, 954, 911, 2564, -4571, 2939, 6282, -2855, 4645, 4251, 4150, -1029, -2133, 5460, 147, 4707, 2637, -2709, 2035, -6777, 3736, -2420, 6812, 4050, 1871, -3425, 6762, -3411, -5055, 2390, -3805, -891, -5593, -2571, 870, -3408, 114, 882, 6521, -7111, -6159, -3481, 1765, -3353, 1100, -2484, 2231, -4886, 8332, 507, -464, 1152, -408, -5725, 226, -4155, 5855, 609, -4294, -2017, 2858, -3939, -1535, -10765, -5301, -417, 3277, -2755, 1151, 3731, -9601, 4446, -1364, -4168, -1470, -4476, 1501, -4611, -7036, 5487, -2387, 11476, -4459, -4631, -174, 439, 1987, 1035, 2102, -4073, 4861, 3740, 8629, 4178, 5507, -3129, 3237, 2970, -56, 3759, 475, 4263, 6766, -4365, 4703, 2600, 87, 2624, 6594, 7676, -208, 6067, 1213, 4081, 4746, -1687, 1155, -5136, 1108, -1048, -1338, -4579, 3640, 1756, -8504, 2244, 4645, -5313, 575, -21, -2629, -674, 940, -5029, 3418, -2768, -4190, -2323, 964, -492, -78, 2009, 3748, -1809, 6988, 196, -2814, 1500, -3431, -3963, -814, -496, 3866, 373, 474, 3017, -2597, 1597, -2810, -1364, -4295, -3900, 2639, -4235, -2762, 6135, 2485, 5345, -4687, -1563, 5783, -10646, 2681, -1128, -1954, 8573, -3059, 5438, 2673, 1457, 898, -6294, 1921, 1452, -2600, 2806, 5076, 1197, 8192, -2345, 9177, -1186, 2798, -2200, -2472, 752, -2917, 1610, 8616, -2611, 3025, 2925, 755, 842, 1022, 4203, 1824, -1913, 7609, -683, 3186, -1637, 5232, -2310, 3299, 2534, -6804, 1818, 3594, -3612, -7747, 4542, -94, -2089, -2437, 579, 3502, -2528, 5249, -2075, 1278, 1279, -5778, -1646, 240, -3355, 3060, -2002, -51, -902, 4283, -4815, -300, -2149, 91, -5389, -3253, -6386, 6480, -1044, 658, 2458, 5699, -286, -2130, -8826, -2166, -499, 826, -2827, -4898, 4545, -2586, 9184, -5213, 3975, 815, -10433, -1276, -4479, -9730, -1394, -1382, 5420, -1912, -1782, 907, -1536, 1545, 1866, 2844, -427, 5864, 4205, 6338, -611, 6742, -3754, 3045, 3312, -1263, -921, -387, 1751, 7792, -2190, 9740, 1316, 3772, 5833, 2374, 7781, -2975, 4126, 8263, 3577, -115, -409, 1847, -305, 4698, -428, -4850, -1407, 4954, -1437, -8778, 3992, -5038, -2070, -5437, -2134, 1851, -262, 5305, -4779, 5241, 770, -1360, -4758, -524, -2759, -426, -2051, 2675, -8308, 7032, -6194, -4290, 892, 823, -6393, -5450, -2673, 5730, 1744, 4492, 7267, 5038, -1692, -184, -5936, -1940, -963, 1699, 739, -3487, 961, 5078, -42, -2940, 2746, 3146, -9916, -6464, -208, 1908, 8679, 1260, 6396, 1270, -3533, 3552, 3900, 3882, 4487, -1287, 1555, 5816, -1446, 4270, 2120, 4530, 2591, 5627, -276, 4064, 4567, -3846, 6108, 691, -806, 5506, 3650, 2180, 6452, 4990, 5319, -4412, 682, 3625, 358, 2579, -5301, -1037, -4950, 5687, 1697, -6794, 948, 62, -2208, -8530, 3430, -1392, 1401, 1425, -2173, 2625, 1979, 4450, -2639, 6409, -655, -6866, 669, -2204, -5492, -735, -3336, 811, 1436, 7642, -4145, 816, 2621, -326, -4547, -20, 634, 4899, -5002, 615, 1307, 2693, -2037, -1483, -5615, -5375, -2138, -186, -3705, -2675, -1173, -4369, -859, -2763, 1090, 2167, -9156, -3086, 1236, 1307, 9655, 1982, 5272, -1182, -2823, 1460, 2095, 5293, 65, -6966, 219, 1973, -1332, 2128, -469, 7482, -435, 5652, 4115, 1379, 2450, -2207, 4961, 1946, -2576, 5410, 3147, -4331, 3242, 3796, 3454, 189, -3436, 4983, 200, 3048, 618, -1159, -971, 4605, 3717, -624, -4254, -1055, -2256, -7216, 9567, -1662, -1091, 4005, 694, -3225, 2836, 3266, -8125, 1604, 2314, -7588, 7255, -1174, -3964, 1650, -2668, 2618, 7079, 6187, -3234, -2598, 908, -1286, -2105, 628, -1477, 6098, -3092, -167, 766, 2814, 538, 345, -7289, -3156, -6090, -3688, -6072, -2879, -1783, -3413, -809, -2371, -1860, 1015, -6772, -2142, 85, -773, 12511, -4619, 3922, -9923, -5234, 1475, -4723, 5205, -2423, -6356, -1229, 3645, -1521, 4803, -793, 1956, 1142, 2189, 1786, -2221, -3421, -2984, 2807, 2746, 1300, 5197, 3534, -1695, 2363, 1422, 2794, 3281, 921, 9853, -3630, 97, -657, -904, 6174, 8116, 3261, -3706, 1307, 2781, -5538, -5664, 5289, -1144, -976, 2238, 2092, 65, 2965, 7041, -8239, 775, 2712, -7656, 4298, -72, -2753, -2326, 1069, 1028, 3945, 5032, -3685, 552, 1239, -4263, -5654, -1104, -2266, 6306, -777, -3693, 1343, -285, 1462, -611, -6311, -2272, -3422, 416, -5574, -3599, 5773, -314, 3130, 1904, -1986, 6972, -2778, 1267, -2177, -4549, 12708, 1156, 2318, -6447, 1493, -336, -5728, 906, -3532, -1007, 1488, 4185, 2429, 7631, -4119, 5303, 1003, 2814, 1176, -4348, -1669, -2362, -689, 5333, 70, 1688, 1212, 940, 614, 126, 5299, 6953, -1627, 8098, -3440, 646, 1075, 5133, 1681, 2821, 1393, -5869, 2964, 2271, -1407, -494, 5321, 173, -2782, 3834, 4023, -1755, 974, 3360, -3893, -4161, 1295, -4974, 3160, 856, -855, -2625, -1194, -4532, 9206, 5429, -1596, 2348, -1452, -4074, -7392, -9797, -1759, 5895, -945, -3743, 4934, 3861, 2926, -473, -6105, -1566, 2760, 101, -981, -4715, 889, 6883, 2469, 696, 1638, 5515, -9220, 4025, -4687, 3114, 4057, -7892, 3706, 4193, 2414, 44, -3573, 1991, 2656, -833, -820, 3663, 8354, 5580, 1430, 2002, -1370, -1245, -6713, 2757, 4393, -361, 3, 6766, -7339, 3446, -132, 2011, -1770, 6689, 4249, 1245, 3997, 4311, -1093, -3809, 3056, 2427, -7593, 3265, -245, -7889, 4566, 9221, -897, -7764, 5572, 2316, 5635, -2314, 1799, 11097, 1102, 7292, -3099, 6892, -613, -3455, -4120, 4574, 3407, 8870, -760, -2295, -7167, 539, -5983, 2717, -4513, -6567, 152, -4067, -394, 3271, -2786, -7567, -935, 852, -133, 602, -3908, 4345, 1798, 2370, -4060, -2149, 3086, 395, 4985, -2713, 2827, 4249, -8497, 1584, -1983, -1990, 5731, 1899, 5907, 995, 2544, 1342, -2537, -3582, 3676, 1521, 797, 2103, 3649, 7642, 2108, 3201, -3008, 703, -1077, -728, 2165, -4160, 1110, 6503, -4812, 4071, 2300, 730, 1379, 1901, 6029, 693, 2470, 7730, -1934, -145, -1242, 4462, -3397, 2398, 2476, -7546, 2071, -744, -4526, -10651, 4704, -626, -136, -5238, 108, 6400, 905, 4407, -2919, 6466, -1074, -2686, -1740, -506, -3922, 5240, -14, -1815, -5094, 3200, -3860, -2849, 181, -1876, -6779, -1293, 2384, 2539, -362, -4014, 3415, 612, 331, -575, -6976, -1972, -1085, 1368, -6853, -7044, 4270, -1651, 6188, -4709, -447, 8773, -7108, -1968, 663, -6579, 8618, -2739, 3968, -5544, 3522, 4810, -3242, 3744, -1100, -2862, 1139, 1200, 2378, 6263, 1458, 6209, -3276, 2461, 3115, -5464, -4833, -34, -1402, 4467, 511, 3494, 2407, 5133, 5775, -735, 4487, 1428, 1937, 10498, -1230, 2326, 1039, 1629, 2719, 5323, 3238, -5105, -526, 5140, -1246, -6836, 5371, -457, 1830, -2925, 1, 775, -131, 9175, -8336, 4565, 3286, -3274, 7319, -1030, -5090, -344, -1724, 4024, 1496, 5871, -6547, -1166, 742, -5894, -12496, -105, 3846, 3364, -119, -2768, 1258, 1533, 4368, -3945, -12367, -5163, -3494, 604, -3618, -4497, -5258, -1155, 3924, -4703, 315, -452, -4494, -3405, 681, -6075, 10252, 389, 4022, -6204, -3609, 4153, -3504, 2132, -604, -5416, 1157, 5460, 4768, 4928, -276, 3084, 141, 1245, -2958, 601, 1438, -3662, 7566, 560, 2020, 2841, 7054, -2718, 8021, 4917, 5634, -336, 161, 1267, -3098, 7976, -5791, -2858, 2594, 2975, 9101, 6241, -5076, 5693, -6618, -5531, 4427, 1195, -759, -2413, 756, -1967, 600, 1636, -624, 2646, 461, -978, 658, 4680, -6298, -4746, -181, 1024, -2334, 5104, 4074, 3461, 5553, 2520, -6355, -2007, 3937, 4639, 3421, 3544, 2940, 3171, -2975, -5220, -6200, -4859, -5146, 462, -3907, -4473, 4107, 2734, 566, 899, 1759, 1411, -9189, 325, 2279, -4599, 10292, -1472, 1510, -509, -2826, -2559, -661, 3888, 360, -4409, -3653, 3438, -1097, 5395, -489, 2955, 1948, 3022, -475, -185, -943, -807, 2238, 4449, 381, 5126, 2515, 5278, 2771, 4103, 6291, 3802, 299, 9121, -3345, -2898, -6615, 806, -144, 1731, 3307, -3691, -3345, 2127, -7626, -5750, 8170, 1665, -1335, -125, -4049, 1877, 4446, 5751, -2779, 460, 749, -5103, -1251, -3636, -4937, 3136, -363, -1211, 771, 4333, -3381, 1266, 3157, -4823, -5117, -1688, 566, 6659, 635, -2239, 4366, -1130, 1055, 1248, -6866, -2674, 3898, -1412, -3198, -2927, -2468, 551, 4333, -9219, -148, -4789, -6306, 1287, -976, 2826, 3678, 3855, 3779, 2721, -1297, 5679, 2433, -509, 3529, -145, 1675, 1295, 5734, 6426, 485, 7915, 1999, 2392, -2005, 1749, 7670, -4354, 4492, 7894, -5168, 6034, 4500, -3387, 5420, 3945, 4782, -3643, -1016, 1733, 4016, -1876, 2390, 44, -4693, -749, 2063, -2326, -1608, -2332, 2116, -4445, 606, -5499, -2550, -3580, -2230, 5271, -3930, 7638, -3619, 7821, -1904, -5341, -4209, -223, 513, 604, -2175, -875, -297, 2237, -4404, -1111, -2300, -1054, -4710, 332, 1912, 1977, -4291, -8263, -2830, 3479, 1728, 3071, -7510, 2151, 1351, -1005, -9391, -2814, 1486, -10914, 8754, -4641, -8616, 2014, 523, 123, 1049, -3591, 9260, -664, 2831, -7650, 639, -1301, -2926, 1733, 297, -5791, 3240, 3036, -4864, 727, 474, 5197, 4233, 637, 4372, -8599, -3054, 670, 2551, 3432, 84, 2681, 308, -3830, 167, -4286, 3914, 4423, -2550, 9579, -1802, -1605, 928, 1552, 3772, 3116, 4457, 3666, -5391, -1918, 1117, -4365, 9068, -924, 1937, -3717, 3464, -3583, 143, -828, -9326, 254, -801, 605, 3484, -1949, -2987, -6757, 1319, 1532, 4128, 3887, 347, -102, 1111, -5841, -10993, -2037, 1261, 3497, 760, -51, 3755, -338, 1722, -2293, -5601, -4075, 461, 2803, -5856, -3691, 5839, -1584, 2965, -2809, -4950, 4377, -4839, 2588, -625, -6272, 6706, 284, 7807, -3396, 260, 3608, -4980, -48, 2702, -3212, 5409, 3615, 2946, 11791, 5753, -385, 719, 2445, -800, 2209, 1093, 299, 4943, 4932, -606, 1296, 3688, 3193, 2861, 3600, 7574, 2623, 3797, 3300, -739, 1436, -5767, -402, 230, 5614, 5122, 765, -3040, 4691, -2929, -8866, 5343, 1821, -1274, -2022, -1485, -2885, -775, 2214, -3503, 5280, -4309, -784, 745, 3054, -1869, 629, 372, 7951, -1171, 822, 2338, -1817, 1533, -6582, -7221, -145, 1944, 3619, 1808, -3453, 505, 2991, 312, -6736, -7321, -5563, -2650, 966, -2475, -5744, 15, 5126, 2768, -2868, 8135, 6465, -10795, -2257, 143, -4889, 3668, -1807, 2310, 499, -2192, 880, 412, 3420, 2314, 134, 2112, 3814, -1413, 9325, 4220, 3036, -2612, 2460, -990, -3900, 551, -3579, 4517, 3312, -3933, 8940, 974, 5182, 836, 2085, 7774, -1131, 2291, 7799, -2761, 1670, -1403, 2039, -1342, 5112, 3022, 1463, -3857, 6069, -47, -9855, -661, -3316, -1467, -5923, 2184, 10618, 250, 6247, -1148, 3516, 4500, -1566, -2959, 761, -4040, 749, -2122, -1497, -9258, 1654, -3175, 46, -1165, -942, -4196, -195, 335, 2648, 1755, 390, 684, 4219, -82, 1404, -5833, -2533, -470, 2527, -3253, -8529, 2924, -3420, 3323, -4606, 919, 6371, -5215, -3635, 5397, -1109, 12611, 3332, 2418, -1078, -2980, 4648, -1021, 2354, -158, -4110, -1382, 1928, 1208, 3305, -335, 6914, 2838, 3467, 718, -646, 2618, -2336, 2707, 533, 27, 4678, 3555, 1850, 7802, 2635, 4515, -146, -2341, 7984, -1006, 1411, -1259, 598, -254, 687, 5410, -770, -2613, 783, 242, -5208, 4017, -5604, 3254, -590, -1304, 2653, -782, 7543, -7380, 3578, 523, -7722, 6175, -4407, -3856, -196, -1583, 1222, 6028, 5158, -1021, -1015, -925, -1008, -9277, -5051, 816, 6403, -4699, -316, 5917, 5570, 1049, -2413, -9796, -1218, -1231, -3165, -6367, -3611, -4379, -5772, 4698, -3315, -3664, 173, -4259, -3450, 3152, -4121, 7954, 3278, 2887, -4719, -1035, 4736, -2214, -1260, -1040, 5734, -809, 6527, 10604, 4481, -5386, 4188, 3338, 3359, 461, -1239, 233, -5577, 3410, 5708, -4829, 5898, 2270, -3004, 7241, 1067, 5819, -7168, 847, 6064, 2557, 2707, 1448, 1629, 4722, 4789, 1715, -8194, -3021, -3164, -1709, -3169, 335, -5255, -4612, -3960, -1901, -295, -169, 8296, -4289, 3897, -1675, -3455, 2865, 85, -3130, -7254, -2610, -4008, 1245, 4655, -5199, 263, -491, -3799, -8200, -2589, 1829, 2483, -3525, -227, 525, 5020, -220, -1566, -5167, -2979, -5624, -708, -4192, -4725, 6024, -3009, 3235, -544, -3188, 6460, -6145, 4166, -738, -6349, 4597, -1406, 3632, -853, 2769, -20, -5562, 1987, -2238, -4805, 3373, 2375, -2151, 5867, -3191, 2929, -4287, 4815, 342, 205, -2698, 1611, -1894, 3851, 4578, -288, 5564, 2932, -6368, -604, 5225, 4876, -2148, 6098, -758, -1657, -632, -477, 2399, 1560, 2935, -8549, -2472, 3370, 1876, -6587, 2336, -3712, -1978, 2476, 1798, 324, 3674, 3670, -7550, -5181, 781, -3131, 2026, -4042, 481, -2366, -1673, 2858, 8236, 5864, -461, -2041, -133, -2136, -8716, -2634, 1175, 6169, -581, 1909, 2536, 1680, 3112, -1839, -9212, -4166, -1386, -132, -2325, -4919, 4412, 3565, 1455, -1622, 1025, 5846, -5134, 144, 477, -4829, 5753, 4090, 5806, -4174, -63, 2200, -2732, 419, 834, 635, 2117, 3413, -1768, 6484, -5839, -2389, -2404, 802, 2652, 452, -2215, -2697, 445, 5210, -444, 2897, 3384, 7028, 24, -1533, 4832, 1494, 1841, 7879, -224, 1157, 1283, 2819, 869, 4096, 1392, -5135, -1774, 4122, -2970, -4992, 2759, 1622, 2428, -482, 2961, -1029, -1024, 2298, -5028, 1540, 620, -5133, -2614, 1775, 2503, 3009, -447, 1607, 2439, 4325, 68, 1600, -3678, -4681, -9150, -2868, -1539, 2386, -1329, 1470, 3514, 1440, 561, -3216, -7067, -2098, 1555, 2766, 3144, -2191, 1004, -2170, -2671, -8325, -3123, 1364, -5077, -4380, -2117, -4065, 5339, 1541, 1623, -4016, -2824, 767, -1596, 2499, 1946, 16, 2147, 3885, -4645, 8561, 4548, 3546, -1380, 2049, 376, 975, 1076, -5053, 4384, 6153, -284, 8758, 1021, 1061, 3372, 1596, 5617, 637, -885, 4065, 923, -2014, -3623, 981, -996, 3849, 817, 2, -2843, 667, -1506, -10650, 866, 1030, -1997, 5323, -1434, 678, 5320, 1790, -8262, 2731, 2258, -2017, -5516, 3609, -1734, -162, 157, 181, -5175, 8133, -494, -3496, 3357, -2578, -3381, -2790, -4486, 4955, -226, -3282, 1610, 4261, -1623, 1081, -4935, -1911, -1683, 80, -1877, -2849, 1427, 288, 5943, -3829, -1814, 5244, -9416, 4395, -5401, -6220, 806, -5108, 2956, -2078, -1116, 57, -11177, 4771, 291, 3983, -176, 5011, 1648, 7644, -552, 2615, -1583, -837, 134, 843, -4316, -2699, -882, 8505, -1480, 3179, 985, 4617, -1947, 3712, 7647, 1671, 2636, 6053, 1922, 339, -3772, 2677, -1283, 5026, -3740, -7006, 1750, 3100, -1316, -4207, -5172, 2817, -274, -2562, 469, 1627, -154, 2296, -2814, 3567, 3185, -5631, -5769, 2382, -454, -252, -2178, 464, -2519, 4532, -3034, 982, 1014, -3589, -3905, -3167, -5375, 6032, 1907, 1025, 1300, 6566, -2986, -2379, -2719, -2854, -441, -581, -2808, -2974, -839, -1464, 3648, -4131, -1283, 5568, -10481, -767, -2231, 915, 4344, -143, 2654, -1400, -1195, 5509, -4542, 1903, 2196, -1003, -1570, 8421, 5771, 6956, 1312, 6130, -1571, 4487, 1640, 24, 6767, -3745, 6061, 5701, -2596, 4594, 3799, -1045, 3991, 1577, 5755, -4849, 1501, 5128, -2845, 2096, -4461, 32, -3899, 7331, 3363, -10276, 2296, 3790, 12, -6086, 1166, 4, -2808, -2842, -4226, 5576, -2107, 4312, -2932, 9172, -1761, -3513, 3568, -2872, -1929, -3085, -3716, -1620, -1058, 4990, -4084, -532, 1336, 246, -7817, 1440, 2402, 5615, -8450, -2924, -822, 3072, -1235, 1788, -10844, -5156, 2340, 2246, -656, -3360, 86, 3702, 6837, 1754, 1616, 3685, -9938, 1607, 2346, -4516, -5300, -1818, 5093, -530, 3712, -2450, -6413, 2244, 2427, 741, 2865, 3315, -1793, 3557, 2244, 3015, -1937, -107, -250, -2094, 2708, -507, -1951, -1393, -5466, 3419, -1565, 5661, 3850, -2149, 3276, 2896, 2897, 7351, -2910, 8802, 1378, 3693, -3355, 4615, 116, -1905, -1424, 10011, -824, -5067, -1163, 6342, -2329, -2756, 6118, 10042, 1378, 5556, -2360, 2384, 3864, -3398, -7239, 3356, -2614, 4285, -815, -375, -836, -1877, -637, 247, -4668, 1250, -2234, -854, -562, 2508, -5182, -4129, 2494, 1210, 798, 1134, -5319, -1699, 1163, -1355, -2559, -946, 1853, 4180, 3074, -2103, -5364, 2927, -14424, -1099, 700, 4227, 5155, -319, 5650, 2541, -1412, 3804, -6189, 3806, -3185, 630, 913, 2116, 6172, 5769, 1063, 4167, 4450, 1020, 3617, -1129, 1394, -4834, -1591, 1558, -479, 2372, 1955, -1465, 6314, 2251, 2637, 1198, 528, 3856, 105, 2148, 541, 1302, -519, 4780, 1136, -5329, 3495, 1333, -549, -6938, 3627, 1004, -2854, -2680, -278, 2611, -222, 4994, -3199, 474, -1379, -5716, 1181, -2402, -3402, -3375, -1794, 349, 4307, 1414, -5831, 1100, 2813, -1778, -6180, -3963, -954, 4590, -777, -5393, 4976, 4036, -2657, -2726, -9961, -1261, -2672, 890, -6019, -3055, 313, -2887, -968, -7930, -5390, 8662, -13316, 1292, -533, -2836, 5732, -1595, 951, -5744, -1220, 4794, -3096, 3148, -766, 1102, -1306, 3576, 1711, 6098, -4920, 4750, 250, -1136, -515, -442, -1842, -1985, 737, 4659, -989, 6084, 3741, 824, 6012, 3450, 4096, -769, -1378, 6874, -405, -978, 767, 1759, -1848, 7395, -2530, -8270, 2124, 4754, -2052, -5594, -1967, -1685, -2515, 2491, -2576, 2760, 1636, 3028, -9144, -1320, 6372, -4844, -499, 1729, -7463, -3048, -555, -2129, 1251, 6910, -6219, 1908, 1373, -4371, -5415, -1174, 284, 2207, -971, -2297, 5538, 3104, 1200, -417, -7463, -1657, -3176, 757, -1119, -9767, -1391, 7081, 2261, 2422, 5809, 3307, -11619, 458, 1133, -2997, 9216, -2588, 3396, 3389, -1737, 444, 359, 963, -1285, 830, -1451, 8185, 3062, 9294, -4933, 5388, -4787, -617, -2676, 2206, 5332, -5385, 7232, 4171, -1624, 3526, 7212, 3769, 4640, 5237, 7107, -5043, 649, 5207, -2569, 1491, -1951, 3774, -3930, 3898, 2346, -7753, 721, 4789, -1998, -3438, 4340, 786, -3232, -4721, -1161, 6014, -2256, 9621, 888, 4114, 692, -7875, -6596, 877, -774, 4423, -2908, -3383, 1689, 2443, -238, 3776, -1552, -3217, -4078, -3367, -1246, 4474, -3033, -3733, 4010, 5386, -681, 589, -6284, 943, -4073, 5594, 2828, -5790, 3706, 2878, 2261, -2351, 979, -718, -4781, -5529, -770, -8480, 5913, 2757, -832, -1123, -1064, -3599, 1678, 845, 729, 3444, 2702, 6868, 185, 7037, 2422, 3147, 496, 4677, -122, -1833, -185, -4905, 3555, 3034, 337, 6414, 5557, 291, 9585, 2924, 8310, 404, -691, 3272, -411, -367, -2697, 2262, 1635, 4618, 2012, 3953, -6581, -2483, -3188, -8353, 6399, 3164, -5028, -2520, -4335, -254, 838, 2537, -49, 3129, 886, -2553, -3789, 917, -6124, -462, -5337, 1635, 1638, 5098, -2363, 20, 3880, -1969, -6078, -1204, -508, 6278, -2117, -338, 2480, 7409, -4445, 774, -4319, -2183, -2482, -304, -6426, 745, -3196, -2710, 2405, -8720, -3104, -2692, -3380, 947, 1783, 1060, 2608, 6704, 2271, -2601, -1971, 2126, -4894, 4727, 1105, -1175, -1192, -1620, 3526, 1359, -1854, 8534, 6892, 6301, 2200, -1386, 2303, -3465, 1911, 3109, 970, 5599, 5130, -1696, 7623, 1973, 1698, -1413, 1248, -4298, 543, 6559, -4082, -4595, -139, 6877, 4669, -916, -2774, 3110, 985, -2224, 4386, -447, 2147, 427, -4643, -2454, -46, 2980, -588, 4851, 35, -3407, 4829, -2766, -5499, -4165, -5281, 2310, 3735, 5395, 1540, 438, 3472, 196, -10230, -375, 2493, 4552, -3263, -767, -1160, 713, -2961, -2761, -7500, -4915, -1253, 5924, -3918, 3177, 6118, 1895, 2662, -1009, -3985, -4022, -8380, 3212, -2064, 920, 3332, -3564, 5959, 1528, 1201, -3250, -4645, 2356, 3607, 3239, -1954, 3680, 2289, 6259, 2492, -215, -1417, 1932, -547, 4434, 4084, -3581, -2070, 5913, -5080, 6494, -1594, -2536, -395, 5453, 5577, 698, 3253, 1106, -2113, -1945, -226, 4911, -3522, 3332, 2572, -10322, 313, 5081, -3966, -5997, 4946, 1052, -5121, -1091, -619, 8360, 1116, 865, 1619, 1618, -4857, -6814, -2562, -868, -2799, 85, -3171, 1097, -3088, 3799, -6138, -593, 2061, -16, -3010, -779, -2595, 5380, -1910, -3708, -3551, 2309, -2395, 737, -430, 1396, -5433, -1125, -1414, -5975, 1278, 4278, 1874, 181, 3075, 2426, -10234, -1266, -2268, -477, 8583, 1482, 5748, -3083, -1495, 882, -4086, 3071, -365, -8522, 95, 4597, 5704, 10562, -663, 8441, 1496, 5056, 3700, -1637, 2633, -561, 10755, 2762, 662, 5195, 4693, -1855, 1311, 5030, 5726, 1849, -2959, 1566, -1541, 2202, -2312, 2195, -4647, 7376, 5877, -1585, 663, 6077, -5205, -9296, 3626, -429, -4812, -1190, -1284, 1081, -1122, 6429, -2914, 4713, -2303, -6905, 3507, -2932, -221, 3528, -1402, 1485, 334, 5953, -554, 1746, -1922, -550, -4172, -1210, -3729, 8094, 2621, -5874, 4209, 1207, -1675, -44, -10829, -2056, -4939, 1408, -2198, -2194, 4668, -1843, 3979, -1233, -604, 4220, -6128, 374, -1023, -2624, 6311, 4042, 1492, 1877, -1070, -1521, -1194, -2170, 1614, 5099, 1721, 5183, -101, 5623, 748, 6758, -2273, 4370, 59, 1144, 1196, -2663, 5366, 7115, -1096, 5547, 3128, 2266, 4495, 5536, 7587, 5025, 6177, -1471, 536, 2843, -1562, 3352, -99, 3319, -224, -4112, -789, 2964, -648, -6889, 5673, 1878, -6238, 2072, -105, 2786, 956, 2287, -107, 3013, -1130, -5650, -851, 2214, -5930, -2608, -3320, -3285, -2418, 7672, -859, 92, 263, 1815, -4443, -5104, -2278, 7423, -3222, -3407, -3995, 4350, -1536, -392, -1848, 74, -2591, 2898, -3929, -957, 371, 1309, 2433, -10952, -2675, 2773, -3147, -5585, -681, -4873, 13482, 518, 148, -610, 1149, -502, -3122, 1695, 561, -4727, 2701, 2870, 719, 7742, 1282, 11687, 7254, 4359, 767, 1182, -1299, -5402, 4197, 3283, 1720, 6600, 5430, -2908, 401, 1708, 4430, -3282, -922, 211, 1177, 1215, -6431, -3980, 364, 6308, -553, 7761, -194, -1053, -565, -7465, 261, -951, -2628, 5555, -5072, -600, 288, 2961, -3651, 4406, -1991, -3343, -2336, 1733, -6999, -1367, -5528, 2373, 1277, 6868, 387, -1086, 768, 2014, -6090, -3476, -1057, 7566, 1931, -4546, 2323, 2536, -4602, -1823, -6395, -3834, 917, 2090, -7154, -555, 7121, 1055, 4567, -1468, -6323, 2639, -11900, 5037, -1861, -3177, 10590, -3033, 6033, 6022, 3773, 1733, -5107, 3128, 1268, 1753, 3181, 4255, 5069, 4743, 5249, 1517, 1183, 89, -3519, 327, 4368, -1669, -969, 13221, -4741, 4536, 1525, -673, 5438, 6004, 3748, 1417, 4009, 3820, 834, 4590, 1681, 2773, 31, -988, 13, -4845, 1039, 3046, -3336, -8256, 6324, -2563, -4378, -3728, 531, 4902, -836, 5681, -628, 3931, -581, -4867, -3491, 3154, -3520, 1999, -2178, 3149, -2324, 1618, -4280, 729, 1564, 233, -4863, -4953, -3239, 5931, -653, -4751, -1391, 7510, -1066, -2909, -4874, -813, 3211, -521, 5507, -2260, -2287, -2183, 1158, -7603, 3644, -3344, -6872, -6027, 794, 4438, -1280, 2265, 9801, -3065, -3669, 5294, -1976, 2078, 1355, -3470, 2100, 1812, 7150, 4343, -1239, 13876, 4666, 1515, 134, -4971, 2837, -3742, 7747, 3376, -3876, 3801, 4481, 4426, 9903, 2861, 2758, 4632, 1019, -168, -52, 8674, 828, -6355, -5857, 2709, -162, 6636, 1046, 8765, -448, -6604, -3409, -2331, 493, -6278, 3392, 4858, -3154, 8154, -943, 7130, -604, -2423, -4960, 561, 388, -2914, 3348, -1115, -12115, 5432, 7801, -1138, 285, -1350, -2312, 5250, -1327, 1216, -4172, -915, 9467, 3256, -4671, -2088, -6553, -1097, -4618, 1858, -3725, -1934, 5898, -6757, -1231, 1992, -1047, 900, -7328, 101, -1293, -6135, 591, -2266, 6229, -3659, -5018, -943, -3703, 4132, -90, 950, -706, 3088, 3215, 7197, 730, 156, -9879, 2998, -2764, 1029, 2793, -1360, 2644, 1461, -2644, 3591, 5116, 3687, 1355, 4758, 7911, 2064, 6504, 1462, 231, 4708, -804, 3181, -473, 5944, -1317, -7674, -4780, 9363, 1487, -7936, 5652, 4232, -1573, 4202, 5950, 2134, 6278, 5943, -8756, 685, 1745, -8454, -3231, 5372, -1996, 3400, -1463, -707, 2253, 5450, -4993, 2439, 192, -8685, 1435, 462, -2465, 3788, -3302, -1129, -2173, -917, 3072, 593, -1629, -1225, -5447, 1342, 309, -3935, 2806, 4413, 5359, 406, 2059, 5900, -4497, -799, -626, 2295, 3842, 2454, 8048, -3290, 337, 3897, 2222, 3344, 2220, -155, -1492, 2814, -1236, 5009, 1636, 2362, -2337, 4895, 1165, 665, 5461, -2115, 8714, 3383, -1573, 5788, 5832, 2128, 4907, 4432, 2924, 6997, -35, 4414, 51, 6413, -4287, 2393, -4638, 8826, 4191, -5400, -538, 4678, -3744, -8126, 5772, 4695, -3977, 2702, -2456, -4143, 3124, 3080, -5983, 5044, 862, -11663, 2857, 4175, -3278, 1916, -2143, -2100, 1160, 9599, -648, -355, -893, -154, -3368, -1362, -9249, 3584, -6847, -3437, -950, -3879, -3108, 181, -10141, -4949, -195, 2289, -227, -1679, -565, 1375, 3779, -4722, 157, 5008, -6048, 1879, -7135, -7269, 2542, -2329, 635, 4822, 1379, 814, -2612, 4852, 3653, 3806, 3375, 1551, 2745, 8365, 662, 4379, 253, 2124, -2877, 3208, 2030, -2002, -78, 9407, -1480, 6400, 911, 7521, 1804, 1438, 5612, -2005, 2515, -1185, 1081, 3946, -4870, 1426, -6379, 3587, -3519, 1151, -3593, 2742, 1732, -5781, -4523, -3072, -3334, 2606, -2311, 6256, -116, 3964, -1802, 3908, 141, -4229, -4279, 145, -4032, 2883, -5346, -2878, -2586, 6722, 541, 1193, -910, -3624, -2051, -2022, 126, 3937, -271, -5402, 122, 7379, 376, 1547, -4281, -4233, -4928, -2569, -7341, -6145, 5889, -3929, 1486, 1594, -797, 2496, -3282, 2835, -2837, -5528, 12827, -5712, 434, -2805, -2922, 716, -1147, 2611, -1456, -9207, -1316, 4042, -274, 6184, -533, 3683, 118, 659, -2523, -3711, 1159, 1147, 3134, 4741, 821, 3466, 5162, 3283, -4144, 5005, 4703, 6264, 765, 8937, -3726, 1334, -2323, -1247, 4795, 862, 5839, -5997, 736, 4889, -2145, -5959, 10060, -2935, -4331, 5344, 925, 2939, 2535, 4564, -7034, -1770, 153, -5027, 4926, -2404, -1746, 727, 1985, 1698, 4334, 5665, -2597, -277, -32, -5576, -6226, 155, 4968, 6634, -2043, -4625, -4294, 547, 6238, 336, -4690, -3201, -678, 1065, -4824, 532, 3446, 592, 6344, -7068, -4826, 4390, -10070, 4657, -2673, -1634, 3583, -1984, 7518, 35, -2398, 3529, -4481, 2450, 497, 4015, 3554, 2899, 9218, 4712, 1742, 999, 6784, -1915, -2049, 1846, 2480, -2856, 3133, 7812, -8775, 6008, 931, 647, 3779, 3590, 3372, -123, 5021, 5877, 21, 2307, -1934, 812, -2789, 3125, -1002, -4928, 1095, 6060, -1698, -4531, 679, 4406, 2510, -3728, 4358, 3353, -3761, 241, -1061, -335, -196, -2957, -5637, 5634, -254, -1745, 465, -540, -1828, 552, -4846, -1962, 3084, -4746, -1859, -4208, -4955, 5094, -668, -241, 1128, 2713, -2773, -3485, -1795, -286, 1399, 2624, -1035, -427, 283, 1998, 3775, -195, -1580, 4403, -12214, 4320, -5892, -2431, 3723, -6679, 1743, 3952, 2082, -1144, -642, 7438, -3970, 4349, -1141, 1332, 825, 8477, 4133, 4638, 231, 169, -851, -402, 1134, -4244, -3328, 9179, -3681, 7068, 3513, -373, 3466, 4294, 4115, 2119, -1304, 4432, 4021, 732, -1894, 1791, -4058, 1805, 876, -5306, 1671, 3834, 683, -4067, 3009, -2265, -1322, 702, -2648, 6055, -2392, 5703, -1464, 1495, 1341, -4211, -3038, 1955, -1719, -767, -4354, 1877, -3121, 5938, -4089, -1900, 6272, -3548, -4896, -9823, -4486, 4542, -794, -9920, -1585, 4855, -188, -739, -7745, -2482, -2003, 2530, -585, 1496, 2931, -772, 459, -3654, -1071, -291, -2738, 644, 1061, -1386, 4994, 657, 3017, 633, -1443, -2033, -6743, -357, 5, -433, -1332, 1191, 626, 7080, 3578, 4412, 922, 2491, -2451, -377, -291, -6548, 3372, 5352, -1994, 6737, 4883, 1610, 4324, 5337, 6635, 2804, 4409, 3596, 739, 3034, -5363, 434, -23, 1339, -1583, -1697, 169, 3420, -5486, -6445, 1226, -1610, -849, -1123, -1040, 5990, 171, 4273, -571, 2281, 1305, -6245, -2176, -531, -3142, -1618, -1195, -206, -3254, 6581, -1590, -204, 2370, 3920, -3778, -1314, -320, 5472, -947, -5042, 3155, -314, -4098, -615, -3683, -151, -5027, -1997, -235, -5292, -1428, 866, 5045, -1563, 1485, 9507, -13270, -4471, 4770, -4865, 6897, 114, 942, -2862, -2520, 1894, -278, 1727, -3022, -5368, 1055, 3740, 115, 8557, -5862, 10326, -2789, 2883, 7008, -2950, 6387, 1048, 7124, 4078, 1291, 8474, 2446, 4682, 3367, -896, 3408, -1962, -421, 5452, -1575, 6425, -1387, -1919, 2412, 9877, 1253, -1548, -4128, 8404, 191, -7837, 2814, -3015, -7643, 4272, -4811, -934, 1979, 7842, -5623, -750, 3628, -1574, 1992, 1624, -8715, 3253, -5790, 3857, -1727, 7475, -826, -1210, -1941, -2057, -4154, 2926, -1333, 3689, -5846, -1614, 638, 5678, 3327, 1824, -10343, -5092, -3370, 344, -1503, -5426, 2573, 3522, 3891, -1780, 694, 7124, -7623, 2108, 2281, -2992, 5205, 5427, 3178, -2455, -1739, 3591, -2391, 14, 1579, 1790, 1398, 3433, 5294, 7926, -1963, -1243, -2501, 1956, 573, 916, 4235, -2998, 3057, 6995, -2718, 6621, 3611, 5413, 3250, 2642, 5165, 1894, -445, 6649, -3256, 7023, -2894, 1169, -2161, 2467, 3331, -4154, -2966, 3715, -3198, -6933, 4417, -2315, -2289, -944, -96, 3381, 706, 4738, -4762, 4148, 101, -7265, 1511, 2893, -2040, 2109, 583, -1340, -285, 3404, -2374, -1285, 1746, -618, -6110, -4253, -3501, 4725, -5660, -1879, 817, 5645, 572, 695, -9988, -1573, -5719, 4296, -1434, -1997, 6403, 3459, 4572, 4606, -444, 4387, -4497, -2580, -3509, -6560, 501, -8091, 5787, -1297, -2507, -459, -3284, 4629, -2540, 1321, -4501, 6178, 7553, 11807, -2700, 5603, -2063, 3012, -5430, -855, 3531, -5655, -3390, 5771, -3579, 6400, 5954, 2414, -839, 677, 6160, 3647, 916, 7282, -2039, 6914, -2060, 6842, 2896, 2133, 1480, -8634, -172, 9092, -8032, -6647, 1351, 3640, -3294, -2924, -1936, -3211, -161, 4794, 1007, 1121, 1825, -4154, -5539, 5307, 406, 15, -1981, -3988, -1917, 6898, -592, 5086, 3172, -2787, -3854, -6973, -7494, 5703, -2054, -436, 387, 978, -5066, -3303, -7171, -2155, -1337, -2261, -1612, -3825, 1765, 2478, 1247, -1999, 1575, -186, -3774, -318, 2949, 3753, 8420, 1583, 3377, -1059, 4227, 6016, -595, 4179, -2794, -7751, 2547, 296, 7630, 5468, 637, 7814, 5258, 4921, 2289, 1239, 6009, -2701, 3464, 1977, -2240, 4722, 3513, -2966, 2870, 3191, 3968, -2838, -4674, 7210, 589, 165, -2932, -6961, -1105, 2435, 8547, -3306, 220, 2892, -803, -4660, 10463, -3373, -2345, -1106, -5534, 5341, 1745, 6361, -5909, 1794, -2950, -3980, 9311, -5192, 2148, 46, -3589, 4324, 4740, 2405, -3109, -6956, 468, -5037, -9862, -1626, 3311, 8076, -7269, -8377, 5419, -1688, 2068, -175, -12265, -1742, -202, 3142, -1686, 2068, 3904, -285, -580, 870, -1004, -5608, -5978, -2433, -353, -816, 6762, 4801, 7100, -5663, -4417, -690, -6549, 2480, 1959, -3300, 1970, 1718, 2801, 5427, -1183, 6082, 658, 3047, 1917, -2659, -2654, -4919, -2552, 5350, -318, 193, 2940, 5032, 9381, -815, 6466, 5758, 4579, 1789, 118, 4932, -4458, 503, 326, 3081, -481, -427, 859, 1100, -7229, -2960, 3587, -12, -3940, 2243, -394, 805, 974, -172, 0, 874, 275, -7535, 2177, 27, -3267, -1831, 1390, -1119, 3009, 4188, 152, 700, 1549, -1599, -5521, -3768, -2265, 6136, -1311, -4890, 4444, 1417, -245, 1665, -5253, -860, -2428, 2368, -3356, 497, 4376, -929, 2492, 114, -1394, 2866, -6042, 1252, -4406, -2311, 3647, -7190, 732, -1, 2603, -99, -5766, 3214, 2218, 1712, -668, 1897, -972, 4781, 1666, 157, -233, 1378, -786, 228, 204, -4177, 298, 7258, -4061, 6929, 3498, 1355, -519, 1831, 4765, 828, 3525, 2810, -295, 55, -4893, 2204, -1974, 2998, -542, -5934, -1035, 3585, -1332, -4247, 3629, 1115, 456, -395, -1444, 7615, 295, 1966, 296, 3995, -681, -6494, -4681, -2418, -3051, 2529, -7677, 1052, -2481, 6459, -3962, 856, 2095, -888, -7204, -1795, -340, 7123, -3567, -3201, -6433, 521, 35, -1416, -3002, -3240, -128, 3237, -4540, -5747, 5873, -3868, 1849, -2425, 670, 5629, -314, 649, 1147, -2158, 6660, -3217, 6797, -666, 1808, 5121, 1281, -141, 1612, -1797, -629, 1919, -3663, 2267, -1199, 5916, -1122, 2936, -746, -1893, 2103, 584, -1238, 1376, 1625, 906, 1934, 407, 26, -541, 2242, 2110, -2666, 7634, -6121, -3694, 477, 264, -2831, 1953, 2616, -6926, -1668, 1550, -3150, -7777, 8027, 1243, 2647, -4918, 3767, 3945, 2266, 6814, -7475, 4101, 733, -3881, 5872, -5566, -3125, -103, 583, 428, 8308, 6971, -4499, 1692, 1737, -6381, -8770, 14, 5092, 4076, -4211, -4135, 3457, -687, 6914, -771, -9142, -4985, -2428, -168, -4693, -5488, -994, -3472, -1530, -7690, 1065, 4705, -2461, 900, 2140, -8133, 4600, 1146, 7473, -4995, 1193, 9914, -1659, 4430, -1654, -9709, 3912, 258, 4738, 6883, 4818, 972, -911, 7092, 839, -2998, 379, -742, 5283, 2113, -1087, 4694, 2566, 1749, 2431, 3125, 4681, 4478, 594, 6908, -5645, 2819, -2936, -2919, 87, 4879, 3504, 2918, -5778, 7534, -5704, -11519, 12101, 4915, 775, -3570, 2950, 2347, 3780, 7278, -3934, 1246, 2073, -1354, 4296, 70, -3916, 2909, -1243, 7179, 32, 2906, -7125, -2343, 1958, -3552, -5901, 526, 2170, 7720, -1944, -2944, 1920, 4195, 4418, 885, -10973, -3902, -6906, -2524, -5894, -4462, 5375, -825, 4921, 1534, -10, 5127, -9011, 3472, -3413, -6265, 4697, -4003, 1711, -8302, -356, -2680, -4409, -307, -941, 2200, -4969, 3144, -3982, 8121, -7603, 5025, -7156, 1852, 1845, -4398, -1076, -955, -2121, 10948, 765, 3046, 5260, 5318, -3651, -2294, 6248, 10307, -129, 11476, -2738, 4288, -720, 7021, 5634, 5926, 1861, -4762, 2090, 8340, -1678, -6931, 3992, 1543, -3634, 1080, 1906, 3986, -1038, 3152, -722, -883, 2896, -3750, -3560, 740, -150, 1481, 433, -768, -1157, 7752, -384, -605, -2354, -666, -5689, -3420, 11, 6385, -56, -371, 1039, 1690, 2428, 300, -6868, -3610, 5754, 3131, -1387, -346, 3590, 2696, 2080, -8842, -5226, 1200, -8054, 2621, -4961, 1730, 2857, 2319, 7509, 2793, -3211, 4148, -6274, 1541, 2329, -3034, 2670, 2723, 8060, 7412, 3199, 2595, 4524, 6012, -359, 3085, 5625, -4107, 589, 4433, -6247, 4442, 1162, 1187, 4253, 3459, 2886, -3141, 1603, 369, 2776, 1067, -2700, -1211, -6804, 2583, 1968, -2886, -1999, -28, -8177, -6661, -300, -172, -1249, -2862, -4425, 379, -277, 3730, -1606, 8508, -2815, -4309, -276, -153, 2063, 310, -3132, 2040, -4300, 2175, -3931, 1998, 3830, -2256, -3728, 2144, 754, 2791, -713, -3735, -1698, 5086, -3071, -60, -6216, -3482, -4601, 4067, -5494, -7127, 2696, 3346, -3259, 3695, 5207, 3057, -4825, -455, -3341, -9154, 4554, -1008, 4671, -203, -3090, -2574, -2616, 2513, 1545, -1766, -440, 6612, -4423, 4845, -2052, 2576, -6345, 3369, -5333, 337, 657, -2682, -175, 4708, -754, 3733, 4625, 6084, -458, 3896, 9010, 3671, 235, 6450, -3480, 37, -3011, 3633, -1723, 2821, 2891, -7609, -2139, 2385, -5067, -4661, 4809, -2678, -915, 1048, -317, 2985, 4131, 3667, -3739, 3000, 2164, -8153, 2399, 807, -2991, 1233, -2695, -1726, 4652, 5866, -1989, 3918, 12, -3230, -4626, -5537, -311, 4457, -3414, 537, 2403, 3484, 761, 2140, -6208, -2286, 1953, -2567, -2903, 1469, 4357, -3088, 3592, -4204, 46, -1705, -8555, -2788, -4254, -1403, 2928, -1774, 3638, 2659, 2575, -450, -5470, 3112, 665, 1473, 3042, 3816, 1773, 3573, 4092, 4521, 1497, -323, -338, 389, 2238, -1056, -1597, 4799, -2221, 5150, -1981, 3517, 1934, 2010, 5080, 860, 6417, 1739, 1934, 4702, -43, 1238, -3660, 3996, 2763, -1332, 2679, 2069, 793, -5031, 1542, 1011, 764, -1720, -1577, 6766, -403, 2460, -4035, 6697, -2674, -6712, 3239, 1302, -254, 1727, -2866, 1031, -330, 1976, -6256, 0, -1774, -2005, -5826, 1464, 2765, 4623, -4246, -4275, 103, 1765, -1842, -1420, -2929, -1560, -3095, -1154, -4199, -3231, 2883, -6543, -992, -3271, 1174, 194, 393, -1150, 9, -9355, 3315, 4706, 2492, -3211, -209, 3382, -3758, -1061, 1862, -3069, -3489, 4291, -2168, 4278, -603, 3356, 1254, 2370, -160, -2237, 3701, -3095, 5467, 4991, 463, 3053, 3946, -4651, 14, 39, 3408, 5349, -4389, 4955, -3934, 256, 529, 553, -670, 3550, 1541, 6069, -3493, 5685, 831, -8390, 4280, 1270, -3367, -1931, -832, 3829, 2968, 2799, -623, -3542, -1331, -1665, -6395, -3281, -5808, 1581, 839, 4806, 4481, 4768, 1423, 1000, -1202, -2723, -5505, -3446, 5548, 5747, -688, 3382, 5992, 913, 1218, -2414, -4901, -7471, -897, 1065, -5071, -4996, 3746, -2137, 5506, -5192, -3472, 604, -5613, 1138, 425, -4799, 6786, 3686, 2997, 881, 4138, 558, -6453, 3284, -3855, -2514, 3827, 912, 2756, 8036, -2118, 7321, 4170, 852, 4166, -3215, -3288, -1597, -1896, 6068, -4140, 3264, 519, 1195, -872, -325, 5604, -223, 2558, 3266, 172, 3356, 262, 4827, -1390, 4564, 2, -2561, -1102, 4666, 223, -5531, 2228, -329, -3223, -2388, 1368, 3763, -851, 5145, -47, -2573, 820, -1710, -222, -1990, -1862, -1920, -4467, 1159, -440, 2422, -4301, 1395, -951, -2863, -7255, -4527, 435, 4034, -876, -4334, 7681, 8927, -2443, -4047, -5199, -943, -2455, -1877, 834, -6935, 2847, 6839, 9578, 3721, 4422, 5776, -3963, 2606, -4209, -4433, 2545, 660, 2377, -3966, 1607, -6575, -8001, -123, -1192, 1936, 4035, 6724, 1656, 8254, -3531, 231, -1528, -1975, 6706, -181, 4703, -1116, 6925, 6760, -2702, 6911, 4222, 6848, -3262, -1205, 6667, -4370, -600, 1491, 3464, 3921, -5123, 1844, -4411, 5919, -4264, 825, 58, 8043, -2175, -2350, -4326, -57, -525, 287, -2770, -2897, -1874, 7727, -1694, 3153, -1, -5302, -6096, 11155, 961, -432, -3696, 3105, 622, 3906, 4429, 5792, -2277, -565, -5639, -5133, -5790, 2208, -1313, -2271, -156, 8722, -4975, -4314, -6940, -4223, -5684, 3410, 828, -2049, 2278, 5919, -3674, -999, 2475, 2269, -7044, -7365, 2316, -2991, -1463, -729, 3412, -3586, -1710, 4221, -420, 3262, 191, -1490, -1957, 4501, 363, 4352, 1215, 1070, -2333, 5373, -554, -4783, -1421, -3484, 5443, 362, -1173, 6467, 1646, 5012, 6740, 1039, 6103, 3520, -1699, 6723, -2572, -1903, -2134, 5462, -6537, 4386, -3880, -662, -2481, 3596, -4117, -7972, 10314, 6000, -1958, -639, -579, 5465, 2063, 5756, -8983, 2351, 5728, -5792, -2777, -3184, -7771, 5192, -7304, -5604, 725, 3849, -8583, 732, -2241, -2978, -382, 1247, -4238, 7696, 768, 2678, -1122, 2049, -496, 2576, -8167, -582, -3597, -3580, -3963, -5854, 2777, -1353, 2611, -1052, 4150, 3475, -7221, -174, -3, -4466, 7078, -732, -957, -268, 75, -4039, -2827, 1317, 143, -1673, 1505, 4968, -408, 6738, -2390, 8010, -3717, 3806, -353, 2076, 3082, -270, 3066, 5702, 242, 4352, 3799, -448, 1241, 2793, 5564, 2262, 1340, 2413, 3744, 667, -343, 3645, -843, 3743, -2640, -3604, 2905, 3724, 1887, -6242, 3997, -1656, 1369, 1050, -121, -405, 3578, 5551, -3619, -32, 1917, -5634, -1128, 2717, -1397, 1402, -3027, 201, 2642, 6531, -1949, 2266, -3993, -496, -4557, -2258, -3054, 6211, -1241, -3371, 1324, 2712, -214, -1058, -2929, -2602, 875, -1066, -5038, -2191, 4393, -4933, 2330, -431, -3261, -377, -10303, 3809, -5149, 789, 11663, -4301, 7535, -2801, -2815, 2378, -6107, 2147, 2538, -2736, -3034, 2237, 2274, 5796, 1696, 5729, -1019, 264, -573, -1082, 111, 176, -814, 9293, -1929, 2689, 2200, 1205, 6638, 4860, 3074, 4869, 3342, 5133, -2540, 3974, -960, 2479, -399, 3278, 1767, -2813, 2147, 3911, -5357, -7176, 1379, -737, -3939, 904, 289, 2645, -70, 892, -2997, 3233, 546, -4945, 1472, 620, 1920, 2035, 2377, 1373, -4293, 4529, -120, 685, 636, 3744, -3250, 470, 159, 6423, 1507, -4549, 5707, 2434, -836, -426, -3746, -3097, -96, -2195, -4830, -2266, 127, 1394, 4091, -4410, 589, -436, -3258, -1774, -1408, -758, 6135, 2595, 4972, -4389, -1828, 151, -1629, 3475, 2797, -5508, -397, 1945, -2209, 2988, 2758, 7217, 3640, 2583, -314, -2661, -3030, -2450, 2051, 5605, -333, 4198, 1819, 4038, 6627, -2387, 3645, 7054, -3600, 10712, -1417, 234, -1535, 1965, 3219, 2837, 2321, -1009, -42, -1389, -4334, -4221, 5482, 1510, 3830, 1512, 889, -2260, 3759, 1029, -4631, 2080, 4247, -3533, 790, -3588, -3876, -1032, 1096, -1577, 6024, 2698, 1636, 549, 1409, -2999, -8030, -4097, 1681, 4068, -1552, -122, 4888, -1133, -2766, -255, -6177, -3036, -2168, 1876, -3407, -1070, 5849, -4096, 4937, -1996, -2775, 4763, -8401, 1624, -634, -2366, 2843, -598, 9204, -1969, -840, 4953, -2590, 1120, 963, -828, -3519, 4767, 3750, 8368, 580, 6791, -2329, 2644, -298, -3250, -1279, -2803, 2316, 6862, -2530, 3752, 2892, 4218, 1587, 1598, 6490, 4461, 6614, 5751, -3602, 3823, -1432, 1222, -931, 5338, -268, -6932, 1660, 7770, -1415, -6016, 1196, 1540, -2481, -2189, 1721, 4423, -3322, 2343, -3154, 3430, 1645, -3504, -700, -2631, -150, -120, 1178, -820, -3003, 5408, -2272, 1095, -750, -1843, -3854, -637, -194, 4819, -2169, -22, 3088, 2217, -1190, -13, -3853, 431, 3352, 3632, 653, 1929, 347, -1905, 3886, 59, -2574, -3094, 1648, 321, -4349, -6026, 1805, 1304, 8161, -2525, 1553, -3518, -2305, 280, 4897, -1049, 5344, 589, 4545, 4167, -113, 7820, -1651, 3768, -817, 1089, 5476, -507, 2475, 3697, -1863, 4876, 2098, 5035, 6248, 1954, 6847, -1851, 6732, -7475, 5023, 8790, -3109, -4131, -7594, 2733, 2901, 2783, -5655, 5155, -1603, -3875, -2059, -2742, -4173, -1874, -305, 442, -1049, 3385, 2723, 6119, -4154, -4135, -203, 6366, -2635, -1174, -4432, 3790, -3988, 4272, 6592, 1399, 2933, -2051, -4831, 2422, 42, 1072, -3629, -5245, -1118, 6332, 0, 664, -3462, -3398, -2520, 1058, -3107, -5300, 1853, 5272, -3551, 5206, 4504, 2878, -9938, -2725, -4401, -8651, 4826, -2477, 2712, -397, -6338, -5211, -3037, 2694, 1043, 1855, 2405, 7344, -5411, 5240, -525, 3154, -2903, 693, -498, 1045, 2751, -4353, 1098, 4981, -2534, 4313, 2692, 5155, 200, 2234, 8112, 674, 1949, 4094, 114, 2749, 861, 5461, 38, 6698, -1309, -2571, 1108, 2733, -2333, -8631, 5318, 4442, 2906, 3651, 1157, 6514, 1872, 820, -2807, -1802, 3458, -6050, -4288, -1382, -1260, 2668, -3080, 910, 3571, 4713, -1806, 1552, -3918, -1561, -2620, -4856, -3652, 4790, -2546, -2381, 4579, 738, 3844, 2336, -91, -1290, -2045, 1646, -2921, -1372, 1940, -2534, 289, -4927, 558, 52, -1636, -6430, -2326, -436, 3393, 61, 8087, -743, -2893, 5914, 954, 4646, 398, -1365, -315, 4363, 3303, 6196, 1653, 3166, 4115, 3889, -788, -2309, 1650, -5383, 2070, 5863, -2343, 4169, 2861, 516, 3598, 3310, 2587, -3007, 1461, 7289, -106, 1291, -1180, 1291, 212, 6302, 2215, -5363, -774, -657, -7825, -7264, 3462, 2259, 760, -2001, -2036, -1074, -1095, 3580, -2683, 6589, -519, -3578, 2272, -3172, -299, -1672, -3322, -2117, 3674, 6446, -4442, 3848, 2202, -1443, -8566, -1780, 533, 5887, -3664, 3249, -2138, 2773, -3182, -2727, -6465, -4963, -420, -1446, -4533, -2192, -3176, -6038, 3219, -4967, 268, -1420, -4714, 1397, -1821, 1443, 315, -895, 6057, -1822, -6094, 1021, -4136, 4419, 1573, -5326, 1888, 1476, 2052, 2811, 647, 10597, 4271, 657, 1545, -1616, 2759, -643, 4054, 373, -1973, 6232, 842, -1571, 4010, 4550, 4217, -2389, 751, 521, -99, 6210, -1263, -8203, -3005, 4476, 6432, -1686, -1220, 3527, -785, -2952, 2726, -4884, -1805, -1094, 561, 870, 138, 2677, -7499, 2392, -212, -4651, 5200, -2133, -2106, -5307, -111, 3268, 1334, -906, 720, -1024, 1173, -3974, -5375, 297, 3838, 3155, -4091, -4304, 1862, 1663, -35, -2021, -4446, -213, -807, -739, -4477, -2913, 7126, -2189, 6616, -1165, 2535, 5650, -9307, 1672, 2643, -5895, 6081, -502, 7098, -5997, -2776, 2702, -6734, 2587, -1095, -558, 2004, 4396, 3920, 9610, -5309, 7575, -1358, 1628, 2242, -4096, 473, -86, 6385, 5616, -2242, 4047, 4443, 5215, 3193, -1803, 4793, 4864, 1303, 9683, -2021, -87, 461, 5796, 5138, 4679, 343, -644, 2050, 8437, -2094, -5235, 2329, 5631, -3615, -4412, 1403, 1419, 156, 6817, 1758, -1418, 3383, -3107, -6959, -12, -2757, 3545, -691, 451, 3154, 4936, 1576, 2398, -6163, -962, -6574, -4126, -5686, 9392, 5583, 172, 3166, 4426, 4221, -986, -9137, -492, 3467, 2438, -295, -1753, -350, 4141, 2607, -5670, 3683, 1694, -11141, -4394, 2102, 6101, 4256, 6722, 5788, 4852, -509, 1808, -2461, 1049, 3813, -6481, 2372, 1267, 5118, 4566, 751, 11666, 4140, 3995, -331, 438, 6595, -5242, 9386, 3086, -2343, 6792, 4980, 958, 9348, 4210, 3202, -1185, 403, -40, 849, -189, -3797, -4427, -3299, 4327, 3517, 4728, -1734, 283, -1758, -6765, 3437, -5445, 318, -6146, -5840, 3857, -415, 4381, 508, 7617, -2156, -6819, 2406, 1910, -915, 1785, -6039, -704, -1621, 4197, 637, 251, -1083, 3147, -6026, 262, -3174, 5306, -3019, -1943, 2426, 2353, -6920, 492, -10976, 204, 25, 3102, -2411, -652, 4743, 1589, 4592, -442, 1061, 3195, -7159, 5200, -3659, -688, 6349, -3637, 3826, 2227, 1807, 33, -3628, 1026, 2149, 3210, -2099, 4489, 1306, 4625, 1260, 3809, -2608, 447, 221, 302, 3604, -1204, -2250, 6830, -1673, 5311, 854, 1877, 318, 3089, 6207, 916, 3761, 5662, -2836, 1330, -783, 4118, -3200, 4134, -453, -10516, 5543, 2335, -5140, -6994, 1470, -3052, -2637, -580, 934, 5482, 950, 4703, -5977, 2791, 1147, -4954, -2988, -160, 96, -1037, -2597, -1016, -3062, 3937, -5786, 1337, 3989, -3230, -1647, -339, -3952, 5175, -4669, -7993, 2650, 3787, -1961, 1916, -3450, -2952, -4554, -2151, -3633, -6965, 1521, 344, -4353, -628, 3026, 2628, -4892, -819, 2034, 2591, 5526, 2056, 3339, -5289, -2564, 5836, 1277, 2643, 2249, -7110, -3533, 3223, 3278, 5724, -454, 5558, 251, 6443, 2172, -3214, 5090, -2524, 9113, 1082, 735, 2338, 6141, 2241, 10485, 6145, 2697, 5631, -31, 6139, -3736, -80, -2069, -5150, 1260, 9208, 3801, -2124, -880, 7532, -5747, -6055, 8882, 3039, 2402, -3408, 733, 2802, 3317, 6033, -3507, 5285, 2422, -5680, 5299, -6354, -1749, 499, 343, 2468, 3875, 5068, -1986, -545, 632, -2195, -6121, 408, 359, 6437, -4639, -3337, 1383, -4398, 3817, 1511, -12077, -3711, 2480, 4384, 490, -5077, 2785, 5105, 4177, -4261, 2428, -1953, -7869, -1066, -932, 337, -335, -1659, 6530, 723, -1189, 2366, -2745, 904, 4712, 1226, 980, 4509, 5712, 8287, -4057, 9310, -978, -2068, -1755, 3252, 4776, -3635, 4079, 9412, -7260, 5534, 4451, 5077, 1555, 4696, 5034, -70, 1793, -1966, -2953, 2758, -401, 1675, -5609, 5924, -1770, -831, 3084, 8744, -4334, -7690, 959, -1718, 750, -8793, -292, 9403, -3554, 4934, 2098, 6864, -2210, -4679, -8038, 632, -1865, 4548, -2929, -2645, -9869, 4639, -3660, 4263, -1628, 2567, -1810, -3469, -8332, 4763, -1332, -2502, 687, 7551, -3049, 1876, -5956, 1153, -6098, -2482, -4551, -709, 705, 3382, -324, -3220, 1482, 2580, -8179, -1019, 709, -1015, 5091, 4890, 4984, -4456, -6994, 3098, -4794, 2202, 1029, -3206, -3314, 3752, 3119, 6051, -1064, 909, -1377, 5415, 2915, -2406, 853, -6458, 10673, 5361, -2290, 9401, 6825, 2917, 5021, 4273, 4132, 1599, -1926, 3555, 616, 3010, -5372, 928, -2286, 7022, 2025, -4310, -4189, 5059, -4629, -5343, 6884, -692, -656, -340, -3028, -5287, -507, 2763, -5633, 1977, 1431, -11434, 2678, -1299, -3900, 1496, -3458, -1171, 1938, 8433, 213, -399, 2120, 1580, -6347, -4290, -8848, 3960, -2079, 2299, -313, -3132, -5579, -3020, -13157, -5055, -4380, 5143, 1457, -7102, 5224, 6273, -2464, 3079, 4809, 5959, -6331, -138, 1236, -7591, 8372, 4248, -2770, 2862, -2066, -4807, 1214, 2436, 1002, 2988, 2531, 5050, -7320, 6601, -4872, -784, -3249, 849, -1566, 6204, 3628, -4345, 708, 4892, 213, 7283, 5071, 5808, 1246, 5473, 7103, 2753, 73, 5211, 1940, 1189, -7124, 7332, 920, 1662, -200, -6329, -4233, 2151, -2814, -7171, 6928, -2630, -1034, 4438, -6164, 3447, 5230, 371, -1288, -1031, 580, -7171, -2260, 582, -1879, -285, -3709, -1673, 5243, 9132, -1182, 2203, -4741, 3899, -7594, -9304, -6933, 6522, -411, -6810, 2430, 2983, -1277, -237, -4633, 1100, -1980, -741, -4954, 135, 1833, -810, 2364, -8438, -1894, -882, -7317, -1355, -716, 4158, 5788, -587, 3505, -1526, 643, 4330, 1979, 3470, 1662, 2294, 2399, 2557, 1904, 4829, 4337, 4719, 4512, 1247, 885, -1602, 8558, -696, 3873, 2117, 393, 5990, 775, -1025, 6422, 5364, 2649, -3, 1377, 4310, -3349, 614, -1616, -1845, 515, 5474, 2675, -1167, 2355, 210, -1575, -7032, 6783, 2993, 1855, -4239, 1077, 5266, 1678, 647, -2509, 3669, -371, -4265, -119, -763, -1309, -533, -1503, 626, 3240, 1795, -6900, -2468, 1932, -2231, -5968, 470, -341, 7430, -5638, -5092, 3605, -2724, -279, 511, -7896, -1538, -1525, -4617, -4498, -8406, 1204, -362, 7763, -852, -2096, 6096, -9991, 2009, -2319, -1985, 5812, -2543, -548, 2748, 3293, 6833, -2842, 3950, -3741, 1486, 3487, -44, 8264, 9127, -1794, 635, 23, -256, 1905, -57, 2851, -2966, 1875, 6035, -7050, 4613, 6322, 2624, 658, 729, 1832, -5965, 3025, 3074, 1999, 5786, -2632, -2052, -3519, 4702, 438, -10546, 338, 4818, 1350, -3210, -1144, -2021, 1022, -6186, 1049, 5215, -2979, 10621, -1180, 4147, -2857, -6114, 2708, -189, -2446, 2533, -5411, 1626, -572, 5084, -5887, -531, 3282, -2668, -7946, -2618, 892, 2965, -6163, -10351, -6537, 7117, 2740, -3116, -9576, -4395, -808, -1418, -4652, -1497, 1503, -5633, 1349, -1077, 2134, 6056, -8967, -499, -3714, 627, 1374, -2896, -9, 1397, -2280, 1566, -6191, 44, -192, 2867, -3292, -135, 1796, 3647, -1495, 7990, 1315, 798, -673, 525, 539, -6091, 6784, 3309, -7767, 6349, 4700, -2910, 2929, 5098, 1673, 1457, 288, 830, 5407, 878, 602, 2090, -2459, 6624, -2734, -988, 4152, 4163, -1483, -7619, 2927, 3699, 261, -360, -1831, 3617, 57, 8189, -4840, -3638, -203, -7805, -6274, -1312, -4230, 8024, -4985, 340, 2083, 5502, -3774, 1701, -2566, 1935, -3570, -4311, -6130, 4497, -2325, -7418, 3282, -2526, -1418, -1562, -2479, 1456, -855, 5799, 1573, 754, 5610, 4099, -1049, -221, -602, 5751, -7911, 5377, -3800, -635, 6042, -4149, 2751, -390, -1818, -4801, -6137, 3316, 3994, 1724, 1960, 4953, -2923, 6970, -902, -366, -2597, -1632, -2846, 4134, 5340, -2293, -2129, 5605, -2532, 5598, 3915, 400, -172, 5932, 4922, 2637, 3821, 2159, -940, 4298, -4748, 2251, -3678, 5850, 872, -4512, 1049, 7101, -2913, -7666, -1512, 1444, -2007, -8, -127, 6138, 5369, 111, 1383, -2325, -776, -5908, -5839, 5288, 1237, -749, -2087, 980, -1438, 3249, 2072, 2413, 295, 1980, -3328, -4978, -7383, 2655, -3600, -4468, 2693, 1941, -1776, -2599, -4036, 20, -3967, -11, -3324, -8296, 5258, 4638, 4010, 7205, 1683, 6571, -6987, -2114, 2921, -10105, 9149, -4877, -1693, -1285, 1892, -3229, -2153, 3470, -2241, 1692, -732, 5965, -3054, 7790, 2505, 378, -4750, 3459, -9, 1934, -3817, -1816, 685, 7141, 1553, 4793, 3829, 8724, -5455, -1667, 7248, 3832, 4603, 9895, -1030, -1893, -2858, 6654, 2864, 4042, -3942, -4108, -1279, 7060, 1604, -7376, 7342, 2929, -2232, 1168, 134, 4624, 3758, 6276, -3133, 2254, 2366, -5532, 1942, 1501, -4527, 3026, -4310, 585, -649, 8414, -5419, -2655, -807, -3501, -5116, -3649, -1518, 8042, -1323, -6903, -6271, 593, 1055, -167, -1638, -5398, 1364, -1843, -6362, -3571, 375, -4367, 8948, 1073, 3154, -1613, -2722, -2832, -1054, -8259, 2636, 2201, 6234, -656, 670, -973, -3408, 2811, 3413, -919, 1768, 4011, 1115, 4478, 3379, 5218, 3727, -1093, 1851, -5504, 453, -307, 1792, 7815, 149, 5160, -873, 998, 5582, 1622, 6022, 3812, 4953, 4210, -1112, 4469, -1667, -1086, 2688, 4751, 1676, 4214, 194, 6393, -228, -4212, -320, -1283, -2347, -2596, 2460, 2770, 842, 459, 2709, 1408, 4, 918, -5933, 1680, -6082, -3297, 3399, 4901, -4129, 3003, 4857, 3200, 2351, -989, -7994, -5717, 331, 5268, 1775, -352, 4442, 4373, -1709, -723, -454, -6238, -5322, 4684, -300, 4017, 1813, 3246, -764, -4200, -763, -203, -4500, 118, -3683, -1113, 5510, -808, 7784, -594, 278, 2886, -3560, 2352, 3799, -2987, 1608, 4916, -1433, 5162, -1449, 6295, -2738, 4001, -2949, -947, 1668, -1528, 1433, 8376, 542, 1487, 1971, 1223, 1319, -1540, 5218, 7240, -1167, 7670, -4007, 137, -4477, 3944, -1940, 2937, 2355, -6835, 223, 1416, -7910, -7243, 4928, 2547, -103, 1368, 1108, -1389, 4255, -1218, -1889, 2826, 3397, -2805, -1149, 722, -2248, -3244, -1251, -4192, 493, 3509, -1233, -664, 2932, -2072, -2593, -550, -5562, 6208, -3098, -951, 5215, 1932, -1235, 715, -6212, -1465, -2233, -1310, -6519, -514, 2463, -2695, 4309, 164, -3875, 3067, -9982, 3731, -1535, -463, 6188, -4654, 4741, -2417, -288, 991, -8652, 2719, -753, 806, 438, 3038, -964, 5577, 1558, 3128, 3469, 2497, -1180, -745, -759, -4192, 1635, 8115, -6075, 5417, 1820, -682, 5089, 5185, 4559, 514, 3518, 6332, 5, 6978, -3507, -1083, 1396, 4143, 2098, -8989, 1393, 2242, -2919, -4228, 3153, -1541, -1683, -3263, -459, 1852, 62, 4848, -3753, 3940, 296, -6079, -1023, -693, -3145, -2254, -3072, 1583, -2721, 3959, -1076, -755, -115, -1574, -7512, -1716, -7572, 3782, -4911, -8775, 1462, -494, 69, -2454, -2136, -1845, 2747, 3089, -4934, -2822, 1474, -7251, 3773, -4411, -3964, -513, -3543, -1961, -3680, -430, 5133, -2693, 4112, -2522, 994, 1833, -2662, 3348, 1603, -4445, 3686, -1813, 744, 865, -3307, 9393, 3132, 2359, 3495, -2419, -3751, 643, -1488, 3069, -1042, -552, 3056, -152, 3088, 204, 3796, 919, 2383, 1924, 979, 1551, -1388, -280, 2710, 3331, 5741, 10, -4485, 1475, -206, -2367, 4342, 1751, 1716, -2334, 508, 1750, -1370, 746, -869, 6346, 805, -3670, 3882, -5430, -2416, -809, -1312, 3654, 3641, 2710, 606, 960, 340, -2098, -9137, -1916, 4571, 5307, -1129, -2641, 1833, 1854, -388, -557, -5041, -1790, -3787, 500, -1002, -5562, 6068, 4329, 4151, 1694, 767, 5483, -6680, -2757, -1568, -8451, 1547, -6440, 2988, -3841, 1794, -347, -3158, 2447, -1602, -3501, 3412, 6935, -2082, 8463, -2389, 2515, 181, 356, 3510, 1955, 2864, -351, 2070, 2739, 100, 4258, 5488, 4685, -1320, 636, 8049, 67, 1634, 8244, -2505, 2454, -5503, -1257, 1685, 7778, 1887, -1373, 1801, 6333, 1108, -6957, 2984, 2997, 597, -482, -833, 2710, 304, 2589, -4680, 2882, -940, 251, -3273, -1519, 1445, -4924, -5766, 4045, 1738, 3535, 1356, -1057, -3683, -439, -9436, -974, 532, 7809, -1150, -3891, 5018, 205, 321, -3440, -10049, -4034, 283, 873, -3318, -245, 2968, -3619, 3352, -3576, -900, 874, -5468, 1839, -4992, -2818, 5912, -992, 4854, 822, 1250, 3127, -1395, 3594, 2755, -1423, 1559, 2957, 812, 2307, 4048, 1020, -1864, 1550, 1022, 2969, -839, -2241, 708, 8606, 161, 4041, 670, -182, 2278, 2665, 3910, 613, 3184, 5442, -2626, -4304, -2387, 1242, -557, 2485, 1604, -8406, -504, 303, -3032, -6899, 6642, -836, -2172, 641, 511, 2595, 811, 1839, -3220, 3825, -1613, -2595, 1055, -2694, -2268, -1612, -1740, -325, 578, 4510, -4981, -1448, 3991, -3258, -6367, -2965, 685, 6538, -4484, -5000, 57, 2779, -1936, 569, -7653, -2592, -3340, 2217, -7986, -2023, 1079, -3049, 2793, -2051, -2787, 329, -2448, 1483, -1566, -5814, 6076, 2172, 1156, -3476, -2249, -3608, -1478, 215, 1570, 2601, 447, 1308, -3232, 6477, -1561, 3697, -174, 4875, 3524, -6418, -1801, -198, -1159, 7138, -37, 6934, 1733, 3025, 1416, 727, 5223, 5258, -1612, 3581, 110, 1168, -1186, 3730, 153, 3054, 1363, 3516, -6895, -41, -1038, -4387, 6730, -1369, -2627, 2072, -878, -4229, 3068, 597, -1518, 606, 3404, -2928, 1987, 911, -4049, -1323, -2783, 677, -17, 3411, 2405, 2998, 3690, -287, -8073, -3754, 6164, 2940, 3026, 5796, 617, 4476, -1822, -3264, -2060, -7583, -1891, -2228, -8982, -4565, 1181, -2327, 2785, -5624, 2342, 2263, -6703, -1500, 462, -3779, 4882, 1679, 6162, -5012, -5830, 2223, -3393, 4109, 1006, -7789, 304, 4483, 3019, 7626, -2018, 7460, 257, 5661, 2098, -5600, -4097, -2918, 7050, 4757, -2327, 4891, 3114, 4381, 6875, 1800, 5872, 3530, 525, 8511, -1015, -1001, -2976, 3249, -243, 5649, 3336, -4322, -974, 2248, -4898, -7364, 10066, 1120, 4857, -1023, 807, -788, -1384, 5654, -8269, 3608, 4711, -6407, 5781, -5586, -3318, -272, -303, -1352, 4117, 5561, -5623, 17, -1204, -1332, -6482, -643, -2958, 6686, -1076, 1015, 4553, 612, 1609, 1696, -11584, -333, 3590, -1192, 372, -335, -106, -2082, 4205, -3458, -5283, -1023, -2465, -1703, -3503, 2183, 2863, 5468, 11410, -1841, -2869, 4116, -5003, 261, 2730, -5293, 1491, 2351, 3648, 5480, -412, 5522, 3614, 3894, 1897, 1123, 2970, -1889, 7647, 3961, -3070, 2201, 2777, 6652, 9884, -358, 3251, 3818, 3461, 1046, 1096, 6845, -1375, -1249, -1233, 2636, 2151, -2597, -365, 2353, -4488, -3616, 2543, 702, 2894, -4131, 2401, -2631, -2302, -518, -5083, 9706, 224, -4727, 2031, -4462, 1331, -69, 2999, 611, -2081, 3026, 826, -2143, -265, -3093, -4380, 2947, 1545, 1697, -2433, 1758, 1856, 2768, -2845, 282, -4716, 1232, -3641, 2222, -4240, -4908, 10225, -4215, 4670, -276, -151, 5864, -7848, 150, -2959, -7258, 4681, 349, 5023, 986, 802, -1970, -3670, 3291, 1626, -3062, 840, 3915, -7762, 2104, 1489, 3855, -5160, -405, -287, 1433, -7660, -284, 1181, 918, -1832, 718, 3280, 3938, -2816, -1525, 5682, 5946, 2514, 8428, -2771, 449, -365, 5143, 3607, 3467, 4197, -4929, -2435, 2719, -2871, -3944, 6679, 6511, -1120, 4897, 3222, 1616, 2697, -1169, -4213, -837, 3041, -6243, -128, -1048, -4057, 359, -720, 363, 7876, 3707, 243, 889, -1947, 1770, -5065, -3924, 872, 6481, 86, -1192, 1096, 227, -607, -317, -2930, -161, -6281, 103, -11864, -6671, 838, -5251, 4385, -2769, -2114, 5304, -7941, 1224, 708, -7351, 8470, -1483, -2937, -2646, -1549, -223, -5266, 2677, -1088, -584, -2948, 4529, -2967, 6762, 45, 5970, -2277, 1146, -1556, -1578, -4634, -1950, -958, 4739, 3518, 1501, 3468, 1787, -2134, 1747, 4830, 3732, 371, 9954, -62, -4159, -4879, 4290, 4203, 2127, 1751, 456, -732, 3566, -1269, -5334, 2332, -731, 6188, 4888, 943, 767, 2494, 1253, -7637, -295, 4205, -2134, 5464, 39, -1613, -3214, -2848, -862, 2619, 3130, -414, 2223, -208, 1934, -9585, -2846, 316, 5154, -1506, 371, -21, 842, 669, -3118, -2165, -4229, -6039, -323, -2827, -5231, 3328, 3274, 3589, -1894, 2915, 8065, -7540, 1754, -38, -1352, 8885, -3134, 4823, -156, -1004, 5200, -377, 4059, 104, -2029, -648, 3265, -298, 5551, -1193, 3398, -269, 1757, -1304, -2411, 3128, -2833, 4308, 4170, -647, 6036, 1906, -237, -1997, 1326, 2476, 5466, -3321, 11565, -4262, 6913, -1303, 7565, 600, 6299, 3223, -7485, -180, 3577, -740, -9216, 8849, 5209, -1418, 1985, 4286, 1482, 1508, 5666, -2206, -1604, 3423, -7611, 2156, -1301, -4794, 3553, -2315, -2517, 4740, 5256, -5728, -472, -2391, -1096, -2677, -2302, -8164, 7044, -2222, -2518, 2857, 1459, 1291, 463, -5939, -4027, -2572, -547, -7166, -3036, 5318, 1714, 3134, -3600, -2991, 878, -11943, 4196, -2197, 56, 6238, 3790, 8857, -1457, -1477, 1231, -3867, 2922, 1172, -2437, 2837, 3735, 5121, 6673, 2285, 6193, -739, 3482, -256, 6, 695, -2670, 6709, 5753, -4886, 3215, 4899, 518, 2540, 5162, 5676, 3112, 4757, 3658, 4149, 3762, -694, 5402, -873, 5197, 2610, -9550, 2523, 5094, -5728, -6449, 2193, 4094, -2809, -2594, 2506, 3296, 698, 5024, 403, 3273, 2069, -9243, 169, 449, -1669, 475, -1222, -266, 1189, 5591, -6325, 2494, -231, -750, -3014, -2333, -4901, 4373, -303, -2571, 88, 4366, -2173, 440, -4626, 771, 934, 1518, -3881, -2665, 654, -1784, 5838, -3793, 1160, 2206, -8108, 366, -823, -2993, 8559, 3043, 2688, -664, -243, -100, 1561, 1778, 1148, 4515, 415, 1736, 1446, 4594, -1724, 10189, 985, 2552, 3960, -2806, 2170, -927, -493, 10849, -1936, 5434, 3248, 126, 6476, -314, 3182, 667, 958, 4620, -693, 1046, 4225, 2458, 189, 3652, 165, 4442, -4789, 2285, 320, -7308, 3117, -3604, -6022, -9, -1008, 3556, -808, 5710, 1697, 2998, 974, -2295, -527, 892, -3203, -278, -1431, 3215, -3175, 5775, 2685, -631, 1452, -2144, -7488, -1334, 5812, 4471, -3218, -7686, 2042, 3168, 3045, 1116, -3365, -6057, -1159, -202, -6580, -4622, 1837, 75, 2939, -4839, 2455, 2385, -4413, -3190, 1721, -1345, 4441, -2226, 114, -2324, -1658, 7110, -2781, 2448, -278, -3966, 1792, 2157, 3686, 1740, 2687, 1740, 4013, 4409, 1864, -3513, -1726, -4827, -674, 2310, -1267, 3959, 4302, -1257, 6105, 2097, 4498, -2996, -1229, 6989, 625, -726, -2323, 821, 1996, 2047, -335, -1033, -380, -1543, -2168, -7252, 11069, -3581, -337, 925, -3107, 3213, 529, 7711, -9310, 1139, -667, -5505, 2571, -4783, -4466, -198, -3892, 1602, 7770, 2656, -6296, -2509, 657, 3973, -10090, -3452, 4338, 8733, -2027, -94, 2310, 1540, 154, -991, -10230, -3714, -730, -3635, -1555, -1403, 1124, 2252, -2602, -1729, 1738, -2280, -2755, -1776, 496, 2051, 8217, 2852, 742, -3167, -664, 212, -2817, 1833, 1490, 2695, 680, 4475, 733, 3064, -244, -45, 361, 1144, 460, 1381, 3350, -4217, -1222, 5445, 1410, 4336, 2872, 982, 7491, 4182, 2759, 1331, 1999, 4629, -2153, 609, 598, 252, 2369, 4507, 212, -2423, 1256, 745, -3130, -5002, 3859, 2108, -379, -3106, 494, 3502, 3341, 1536, -2040, 2553, 861, -3604, -2558, -350, -816, -160, -3041, -947, 1921, 2544, 18, 1789, -1501, 2324, -8541, -4455, 821, 4821, -2589, -413, 6237, -1268, -3612, -3401, -5615, -1989, -1351, -245, -6093, -5230, 6321, -1794, 3277, 1085, -3465, 3115, -8029, 3201, -1280, -4147, 12441, -606, 2364, 848, -452, 170, -3309, 4439, 3970, -39, -1585, 6404, 3615, 8736, 3751, -602, -4806, -430, -833, 3857, 4624, -3771, 3917, 8883, -4341, 6361, 6516, 2581, 727, 2604, 4198, 1099, 2597, 3637, -1123, 5771, -3573, 354, -2729, 2147, 2412, -5554, -1237, 4631, -4128, -7193, 3016, 1217, -3931, -1822, -1312, 1799, 2656, 4722, -2546, 5821, -382, -7314, 308, 4918, -2169, 3777, 136, 2632, 1028, 2996, -4736, 2866, 6001, 895, -5019, -2358, -2043, 3398, -5516, -4683, -2445, 1327, -3059, -1021, -7027, -3240, -1478, -1102, -5158, -1904, 1256, -4575, 1301, -2051, 2624, 3491, -6168, 1715, 269, -6177, 7476, -539, -1614, -1008, -3533, -4245, -3896, 5733, 2350, -1736, -3826, 3390, -8128, 2883, 708, 1831, 6178, 823, -668, 959, -5507, -2115, 2683, 6331, 3615, 3760, 1616, 3286, 4000, 2309, 7041, 7939, 4569, 8247, -1058, -3560, -5464, 3435, 6309, 3162, -3976, -1376, 2106, 6210, -2506, -7535, 3600, 327, 6605, 1902, -3247, 837, 7241, 73, -2199, -4469, 3333, 490, -1170, -3035, -5854, -3863, 720, 206, 4133, 4296, -757, -1299, -2591, 4248, -7248, -3424, -5038, 4667, 1123, -1278, 4962, -607, -456, -2491, -2083, 2073, -2402, 298, -8559, -5287, 4342, -4128, -1093, -6909, -158, -349, -5348, 1755, -576, -2454, 3047, 1189, -1196, -1756, 1401, 722, 541, 5661, 2834, 5, 385, 1907, -5730, 3694, 4314, 2062, 3534, 7504, 4116, 2528, -6969, -2379, -5949, 5413, 4703, 2415, 263, 2608, 4255, 2494, 4569, 2618, 1885, 6261, 1283, -2882, -4403, 4297, 5207, 2589, 2877, 1000, -2771, -1735, -4327, -8110, 5241, 3555, 2145, 5726, -257, -2598, 6387, 811, -918, 1679, 2893, 1371, 3842, -6197, -1594, -3555, -3453, 3240, 3841, 1033, -2686, 933, 627, 3501, -10161, -2824, 2214, 8704, 282, -1654, 3350, 1731, -1957, -2502, -5363, -3780, 713, -1404, -4048, -1251, 2008, -3141, 8428, -1285, -2313, 6261, -4850, 5045, -8714, -1725, 8975, -5519, 3093, -4016, -2011, 2427, -7666, 656, 1933, -1942, -1205, -140, 5578, 6309, 829, 6051, -1704, 695, 2257, -2049, 1110, -738, 1164, 9587, -4566, 3827, 1972, 1171, 2781, 2496, 3682, 4690, 2921, 3212, -788, 225, -1953, 856, -2376, 2073, -232, -6998, 3214, 4705, -2928, -3758, 1967, 1886, -2478, -1670, 546, 3527, -46, 4772, -1211, 3342, 294, -7053, 2090, -167, 232, -297, -945, -349, -228, 6300, -3048, 361, 1336, -1691, -6169, -2144, 513, 5685, -3632, -6402, -4662, 1567, 2310, -335, -3727, -2371, -1279, -1775, -7838, -385, -1707, -4299, 4566, -8823, -3710, -45, -6709, -243, 2673, 19, 8028, 2671, 4946, -2509, -207, 3413, -4202, 3020, 3833, -4811, 3067, 1415, 3051, 2982, 1717, 6365, 5215, 3145, 1471, -1780, -3451, -1945, 2742, 3532, -1151, 4002, 556, -5098, 7690, 668, 4120, 3533, 2234, 3002, 46, -1468, -1577, 231, 3168, 4334, 5567, -1455, -1927, 1181, -2038, -7173, 8586, -2465, 5151, -3844, -92, 3405, 1966, 4082, -2576, 3772, -1057, -1995, 1656, -5232, -2729, -1666, 2847, 3391, 2108, 1904, -3601, -147, 1381, -5171, -9747, -623, 4922, 5415, -181, -680, 6604, -3740, 772, -1975, -6572, -327, -153, 3458, -5455, -2803, 4929, 76, 3890, -4330, -1349, 1710, -7674, 1443, -105, -2422, 4204, -2541, 3843, -2504, -1705, 487, -4166, 2709, 2354, -2119, 3082, 3520, 4559, 5323, -3689, 5647, 3563, 2766, -1551, 889, 3107, -218, -397, 3337, -973, 2145, 3833, -1019, -422, 2089, 6239, -3204, 2871, 1402, -726, 1765, -1730, 3247, -319, 5712, 1252, -6425, 2017, 6095, 1324, -7431, 4333, 2504, -379, -1906, -2483, 4909, -1289, 5660, -23, 184, 627, 43, -525, -387, -4287, 1257, -4732, 1093, 1387, 2269, -5507, 904, -1136, 3137, -6502, -3771, 1175, 6174, 975, -4069, 3064, 2562, -7, -852, -6929, -418, 979, 804, -4923, -702, 5596, 4226, 6064, 4761, 1405, 6763, -5900, 4944, -607, -7408, 2068, 886, 6481, 2016, -383, -10367, -8380, -4098, 923, 7163, 2888, 8594, 3924, 5767, 5761, -67, -2248, 1069, -3099, 2099, 5204, -1645, 199, 5530, 885, 4454, -889, 1592, -53, 3592, 9958, -2815, 7111, 1175, -762, -4132, 28, 6942, -5724, 1727, -6252, -9595, 1535, 3636, -1751, -7754, -809, 1981, 1336, -5562, -344, 5844, 283, 2781, 1112, 5700, -3634, -4080, -1985, 7632, -5041, -4283, 509, -887, -2387, 2012, -438, 1382, -599, 2615, -6385, -2854, -5655, 3591, 2672, -9340, 157, 418, -1747, -1210, -92, -1329, -4558, -2049, -6365, -4676, 794, -2560, 5025, -3494, 1416, 956, -5875, 2543, -3986, -2440, 2357, 2983, 8336, -4838, -1125, 1037, -4724, 3062, 2820, 1102, 532, 3538, -218, 6392, 1832, 2523, -1233, 2848, 1123, -2043, -1084, -634, 4201, 7686, 1162, 960, 5905, -2385, 7677, 2986, 5628, 2750, 1635, 3547, 2512, 6378, -2280, 2101, 100, 6483, -1003, -4633, 4912, 1948, -1096, -6034, 4510, 4910, -1148, -1034, 1967, -2443, 4386, 5956, 960, 3158, 2060, -6325, -658, 3498, -6180, -3415, 364, 3777, 6533, 5383, -1293, 3880, 2597, 278, -7763, -1636, -6004, 6782, 1426, 5714, 2084, 8361, -2509, -563, -4295, -4646, -3794, -785, -1842, -7016, 675, 3367, -4506, -1568, 5037, 414, -8084, -6505, 7363, -2707, 1460, 2365, 11012, -5329, -4367, 6261, -1237, 3568, -331, -8380, 2786, 3475, 5537, 6367, -473, 4591, -1916, 7970, -1504, -900, 1698, -5182, 10258, 400, -2567, 5785, 6148, 2554, 8403, 1677, 3120, 8233, -228, 5668, -2989, 3418, -4264, 1480, 2564, 8538, 4055, 1790, -3499, 7162, -8022, -6123, 6697, 3152, -3055, -4848, 1680, -403, 1418, 6534, 796, 1469, 3924, -8110, 1391, -116, -5057, 3286, -1609, -974, 1863, 6622, -1988, 5039, -210, -1886, -1815, -1045, -9449, 7171, 184, -2138, 2576, -210, -2596, 2774, -13509, -4595, -3370, 1564, -5223, 9, 5819, -4644, 3418, -3830, 1550, -3516, -7002, -4322, 404, -3042, 2044, 1868, 2469, -331, -797, -93, -3337, 4258, -601, 836, 3070, 481, 2959, 4081, 3033, 6845, 648, 571, 5032, -4580, -3226, -1454, -160, 4224, 1358, 1162, 710, 4997, 2772, 2426, 5120, -2004, 2501, 414, 486, 1816, -144, 1529, 976, 3929, -834, 3208, -3561, 3768, -4107, -1790, 5354, 5904, -1026, 277, 4183, 333, 54, 4340, -3475, 268, 592, -3770, 1101, -764, -251, 410, -1137, 2415, 7632, 961, 2703, 860, 365, 2656, -7116, -515, -553, 4625, -2337, 19, -900, 4745, 888, -2914, -4869, -430, -5394, -160, -7517, 1578, 4493, -2811, -4582, -6528, 135, -1308, -10137, 1693, -2119, -179, 5454, 1187, 6179, -1034, -792, 5461, -1926, 3325, 1769, -1578, -2070, 3506, 2330, 4362, 7067, 1692, 1036, 3546, 368, -971, 1750, -2175, 4715, 8854, -1617, 4584, 4498, -42, 4952, 5009, 1951, 5997, 3361, 2045, -4219, 2276, 1705, -18, -582, 5898, 935, -7944, 4157, 4056, -4926, -8547, 6688, -395, -2943, -1016, -2737, 3145, -143, 1411, -4139, 2316, -520, -3410, -896, -5853, -2727, 1907, -2439, 1101, 216, 2723, -8014, -1570, 1439, -362, -5445, 522, -87, 7199, -3045, -1348, -791, 1963, 874, 679, -7818, -643, -3019, 4237, -2848, -1615, 4840, 4781, 2753, 529, -1877, 599, -10588, 1238, 2261, -1108, 7100, 381, 7108, 1801, 343, 676, -1362, 5759, 2699, -1860, -1331, 4862, 2458, 7634, 666, 4071, 525, 1793, 1257, -783, 1792, -2429, 1631, 6367, -3877, 6189, 4074, 5699, 1935, 2784, 4436, 1726, -33, 3981, -1910, 5307, -2947, 2182, 751, 5015, 2627, -4381, -862, 5415, -11169, -8614, 7714, 2943, -1123, -2454, -2109, -51, 514, 2258, -1875, 5217, 1507, -5214, -2257, -4258, -1430, 3684, -1331, -976, -1593, 4552, -3770, 2618, 1362, -367, -4746, -1127, -5504, 4753, 2, -1532, 2012, 1335, -2602, -2541, -8874, -2348}; +#else + static Q15_T expected[N * HOUT * WOUT * COUT] = {-726, 952, -3886, -4320, -419, -5447, -708, 192, 1170, 2126, 1187, -1411, 2388, -4602, 11102, 1500, 2698, -8034, -4335, -853, -3070, 2686, 1918, -3377, -1704, 2687, -5540, 4147, -4460, 2599, -778, 1399, 4187, -1284, -2798, -4566, 2095, 3006, 2599, 660, 2383, 3851, 6036, -2449, 5683, 4884, -2915, 8476, 656, -2826, -3655, -1933, 4592, 919, 2712, 3410, -1288, -1707, -2891, -2934, 6715, -1470, 2633, 3508, 1109, 834, 1180, 2956, -6079, 1572, 2754, -5195, 5335, -4432, -3784, -2688, 2283, 2828, 8314, 5379, 1599, 1246, 1080, -4991, -8975, -2988, 3197, 5736, 861, 991, -402, -51, 4847, 585, -5091, -3751, 1484, 403, -6199, -6123, 6501, -3793, 5489, -1774, 314, 1743, -7301, 2762, -1466, -2495, 3172, 506, 9364, -5254, -798, -2092, -7907, 1946, 4919, 4233, -343, 5962, -2304, 5520, -1125, 3977, -3531, -927, 1422, -2509, -4970, -350, 3029, 9067, -2616, 2114, 3765, 3494, 59, 3381, 6259, 6505, 616, 5296, -477, 438, -943, 6395, -947, 6173, -3677, -1601, 4029, 4441, -1473, -7239, 529, -85, -1532, -373, 3867, 2255, 2321, 3347, -3421, 732, 2579, -6353, -5088, 1879, -3170, 1348, -618, 1468, -3107, 6879, -598, 2397, -345, 2882, -3683, -2946, -4737, 6338, 4035, 4615, 6565, 6674, -719, -1137, -4065, -4195, 1163, -173, -4460, -5177, 5354, -4038, 5668, -517, -1016, 5029, -8400, 460, -2022, -2848, 3345, -7189, 5471, -4763, -3999, 360, -6997, -1538, 1756, 857, -2674, 6277, 3215, 7871, -1398, 7161, -2810, -357, 3, -892, -176, -3103, 2573, 9364, -4325, 3704, 3112, 2962, -1095, -313, 5589, 2494, -522, 5421, -209, 765, -802, 3340, 783, 2257, -2778, -3604, 4514, 5547, 758, -8772, 1382, 2159, 2573, -2680, 1482, 4090, -2494, 3205, -5728, 4142, -1158, -4670, -5071, -221, -1268, 1499, 2802, 151, -4003, 6272, -2094, -454, -152, -131, -5028, -6365, -4951, 6584, 656, -2182, 1556, 2577, 1265, -937, -5260, 1022, -965, 1915, -1430, -8760, 8509, 707, 12376, 7217, 5861, 1146, -7309, -797, -1314, -8892, -122, -6544, 1878, 132, -2368, -7154, -5162, 202, 3328, 3975, -5672, 7857, -2591, 11271, -3946, 7480, -11855, -1415, 1668, -1244, -1646, -1968, -943, 7778, -6192, 5689, 4778, 10353, -5672, -2697, 8197, 1333, 1186, 5884, 2704, -189, -3893, 7817, -1818, 5528, -4181, -4287, 4004, 10597, 301, -5918, -2965, 2702, -3357, -3381, -2327, 5512, -2262, 7212, -1285, -1460, 1033, -3816, -10287, -307, -2196, 6067, -3333, -1200, -6477, 10435, -1863, 6214, -1723, 3640, -3086, -5128, -4825, 3771, 2359, 3446, -2672, 3865, 122, -993, -3453, -3028, -1768, 425, -2727, -5277, 3534, 285, 8375, 1674, 1939, 5051, -6936, 1096, 4514, -7983, 5613, 1982, 3181, -746, -562, -4330, -1273, -644, -727, 2536, 717, 3074, -841, 6910, -3275, 4868, -6310, 936, 4007, -373, -2162, -2206, -2714, 8604, 565, 7124, 2211, 13686, 4005, 572, 7874, 1356, 6623, 4350, -1561, 3833, -4165, 3257, 2463, -382, -368, -1113, -6103, 5573, -2973, -7407, 3437, -2778, -6112, -724, 405, 2393, 1749, 6729, -2176, 344, -221, -3417, -1924, 4262, -2830, -287, 472, 1021, 398, 6496, 2658, 1266, 2221, -1719, -8071, -4368, 903, 4658, -4576, -6558, 866, 1394, 901, -992, -8474, -2562, -4231, -1057, -3450, -3340, 1020, -2683, 3625, -834, -174, 4709, -10493, 1431, -744, -5252, 5807, 1478, 571, -6794, -2737, -3039, -4854, 234, -1181, 763, -1475, 4754, -4419, 6332, -6538, 1915, -3541, 292, 992, -1429, -2647, -2920, -388, 5907, 1272, 3937, 3083, 3706, 2199, 1873, 8162, 7287, -1553, 10630, -655, 921, -1692, 726, 5451, 3513, 3833, -2181, 916, 2817, -443, -6532, 6908, -3318, 1247, 3325, 1686, 1561, 4219, 2118, -7801, -803, 3946, -3007, -2585, 3012, -2681, -2574, 544, 2520, 3797, 5860, -344, -2432, -1717, -4382, -6441, -3327, -632, 5199, 1534, -1180, 2514, 2028, 1571, -1558, -3262, -1122, -5174, -4178, -2253, -9272, -88, -813, 4659, 449, -578, 6270, -6537, -2366, 2770, -8341, 5871, 1219, 1484, -9060, -4856, 276, -5586, -869, -1014, -3363, 253, 5103, -2649, 9881, -5107, 835, -5680, 1110, 5444, -491, -2387, -316, 6833, 2173, 4726, 4073, 5310, 6492, 3674, -2724, 4813, 4600, -2627, 7864, -2844, -2975, -5222, -2236, 3683, 4551, 1655, 3811, -4920, 8175, 109, -4252, 1225, 1525, -632, 1727, 720, -1696, 4507, 5991, -4597, -1262, 2555, -1475, -2368, 2939, -5096, -3028, 1035, 5733, 6493, 6074, 6599, 190, 301, -227, -10631, -173, -1524, 4727, 4679, -182, 600, 1278, 3675, -811, -10339, -3733, -1330, -1220, -5685, -3857, 2541, -6015, 2902, -2650, -1298, 204, -4174, -2526, 5762, 2771, 9974, 1391, 4387, -6029, -6032, 171, -2428, 2272, 1192, -3585, -1941, 1445, -5726, 128, -2627, 6728, 6471, 176, 4555, -4415, -4380, -3005, 4915, 1878, 3577, 2845, 3726, 532, 6118, 2112, 3332, 6690, -1231, 5895, -2872, 2654, -5821, -86, 7149, 3932, 1508, 5061, -743, -275, -2112, -5420, 9680, 3397, 557, 6101, 1860, -5521, 2832, 449, -6988, -2588, 1836, -2378, 1186, -3760, -5960, -4738, 2145, 1015, 5271, 4758, 4729, 771, 1751, 1721, -7737, -1387, -751, 5492, -229, -1718, 8301, -1629, -2458, -2947, -4397, -2162, -1117, -1246, -5333, -3963, 3453, -564, 6689, 2727, -511, 6455, -9161, 6051, -1151, -3284, 9312, -1848, 1122, 170, -3202, -2296, -4586, 3847, 1226, 1078, -1923, 5702, 880, 5747, -2767, 2928, -3358, -1136, 555, 2308, 297, -3972, -417, 8649, -2951, 6377, 5009, 4149, -3861, 1437, 5703, 395, 864, 5940, 1584, 5879, -1192, 5704, 3068, 1884, -2676, -11216, 2699, 3942, -2379, -4277, 3866, -3129, -2893, 3358, 2171, -138, 1391, 3562, -5274, -2232, 2104, -6725, -5309, -61, -1079, -12, -1153, -1979, 2895, 5765, -3010, 1591, 2045, -2437, -3686, -5978, -2976, 4748, -2001, -2951, -1082, 6252, -875, -2118, -2703, -1100, -4782, -1027, -3884, -5912, 6436, -3397, 6161, 1362, -1178, 4509, -2099, 3436, 20, -4798, 7998, -306, 825, -6817, -4988, -2143, -1726, 2407, -263, -2268, -6420, 5437, -4056, 8146, -4323, 2280, -2566, 1300, 2752, -779, -3084, -1794, -1696, 7202, 319, 3965, 2954, 7399, -2042, 2114, 4252, 7837, -3216, 11887, -1394, 2273, -2756, 610, 2903, -2023, 2352, -3600, 79, 4501, -3346, -5887, 5854, -369, 1486, 5542, 2009, -4987, 2153, 2974, -10796, 869, 4621, -2608, 2566, -3276, -199, -654, 3676, -1285, 4868, 7313, 1704, 1456, -448, -930, -6968, -3526, 1527, 4466, 1154, 2869, 1486, -3095, 3246, -2749, -5196, -2898, -1452, -741, -5137, -4474, 2900, -2281, 6675, 1616, 1921, 4807, -6522, 816, 2594, -3573, 5936, -3033, 5331, -1205, -892, -1719, -280, 1270, 1191, -3610, -1572, 2965, -4150, 4113, -1746, 7860, -1448, 1306, 27, -1569, -4129, -275, -1345, 5559, 1396, 5402, 2966, 6429, 3258, 918, 5423, 5209, 3152, 4569, -3770, 1226, -1282, -151, 2325, 2025, 1635, 1177, -2394, 7352, 1628, -5513, 7473, -2711, -3473, 2900, -531, 2828, 883, 5447, -3204, 912, 2564, -930, 2010, 2397, -4086, 586, 1566, 2450, 602, 6312, 2351, 322, 449, -3232, -4413, -2009, 7056, 5818, -1531, -3553, 2329, -468, 2050, -819, -7423, -2393, -893, 1225, -3100, -3897, 4438, -4210, 6490, 3451, -2727, 6234, -1551, -287, -1096, -7340, 7624, 2508, 5001, -4929, 544, -3809, -3715, -2125, -1033, -5450, 264, 4819, -2575, 8278, -2778, 1820, -6263, 266, 4278, 2454, -1083, -2395, 5532, 5303, 201, 3615, 4933, 5815, -2566, -777, 7143, 4791, -1007, 8465, 600, -425, -3429, -794, 2006, 570, 1280, 1254, -2976, 4024, -1530, -6079, 4024, 102, -216, 142, -575, -5173, 971, -654, -7737, -645, 827, -1975, -757, 3032, -2499, -1459, 741, 3820, 5515, 7374, 4190, 889, -1475, -1957, -8868, -2292, -2619, 4223, 2963, -261, 684, 507, 174, -3120, -6330, -2311, -1708, -1285, -8388, -5675, 3574, -5413, 4222, 566, 2058, 9353, -7162, -950, -827, -5288, 10232, 755, 2549, -6362, -5766, -2025, -6082, 4154, 58, -5279, -2631, 3236, -2992, 6524, -1621, 6358, 2189, 3238, 2031, -2765, -6591, -3259, 8945, 1051, -5, 4477, 6038, 1581, 2781, 932, 6316, 3591, -2252, 7849, -1102, -1279, -4169, -410, 2443, 4057, 3739, 2016, 787, 2546, -487, -3323, 6026, -404, 142, 4110, -470, -695, 218, 6574, -3880, -937, 2201, -3756, 5632, 732, -6084, -3038, -1125, 2297, 7445, 6567, 2364, 1866, 1328, -911, -7003, -381, -662, 8096, 2410, -854, 2770, 2135, -486, -1468, -7956, -3235, -1900, 754, -5983, -10041, 8008, 477, 4981, 2681, 889, 7032, -7060, 2677, 3544, -3841, 1626, -1451, 2421, -4582, -2061, -1608, -9039, 378, 2966, 5263, -2728, 5726, 2019, 6477, -2694, 4850, -5394, 199, 1571, 425, -2401, -1922, 2095, 3930, -955, 3668, 3122, 5595, -4285, 711, 6462, 29, -2669, 6239, 709, -2437, -4348, 1954, 453, 2401, -4094, -5694, 4010, 7160, 63, -4513, -815, 3586, 2221, 2191, 5862, 2499, 408, 4285, -4780, 1158, 3687, -6986, -755, -30, -1027, 1291, -653, 2318, 2357, 4878, 1533, 2412, 432, 2790, -7079, -5318, -4110, 6330, 1372, -1831, 3265, 1884, 952, -2142, -4645, -832, -975, -3441, -5518, -4634, 533, -3059, 3544, 742, 2964, 331, -7505, -445, -818, -2680, 4591, -527, 6697, -8643, -6580, -2917, -8466, 729, 1053, -4390, -5127, 1321, -3382, 2737, -139, 5979, 406, 931, 3787, -3335, -5750, -2143, 5016, 3371, 970, 4494, 5997, 5399, 6219, -226, 3838, 1840, -533, 3649, 245, 6023, -7906, -2819, 4611, 5292, 320, 8382, 1351, 5239, -5505, -3991, 3236, 1929, -2611, 355, 141, -4197, -115, 2288, -4611, -3880, 1042, -5044, 320, 2447, -1284, 493, -509, 859, -814, 4298, 5448, -182, 3753, 1875, -4949, -2432, -2140, 4044, 2128, 2824, 5024, 2298, -2272, -5069, -8435, -3399, -614, -586, -3042, -3961, 2991, -3715, 7148, -2608, -220, 4183, -5742, 1614, -1885, -3491, 133, 1988, 10809, -6419, -4489, 2714, -5231, -1126, 4198, 3050, -2142, 4106, 875, 6928, -3449, 5330, -1559, 1536, 680, -1887, 1056, -2468, 6057, 7085, -1595, 3477, 846, 5482, 3578, 2198, 8678, 5265, 193, 6233, 716, 2856, -1218, 1810, 25, 4424, 1742, 278, 3108, 6723, -767, -5666, 4048, 3190, 985, -290, 2407, 429, -1064, 4509, -3803, 3684, 1338, -3726, -4032, 4129, -4552, 127, 4625, 3607, 2577, 7751, 346, 854, -2194, -5824, -3814, -2496, -1953, 5839, 2626, 3367, 4432, 5963, 1370, -927, -5487, -1007, -1229, 1965, -4797, -2489, 3330, -3564, 5049, -2018, -3288, 3218, -8839, 1204, -4716, -900, 630, 888, 4709, -3402, -3878, 1098, -6588, -155, 1136, -2030, -1433, 5412, 184, 3798, -1867, 7717, -3016, 2215, -169, -1730, -1680, -1622, 2726, 5776, -185, 715, 1169, 3211, -1488, 1150, 4811, 6365, -1533, 2946, -2684, 2936, 164, 3738, -524, 3148, 5542, -2091, 426, 3561, -1484, -4842, 5019, 1686, 1288, -1094, 3521, -395, -177, -1248, -6075, 3112, 3899, -1683, 327, -737, -2977, 63, 1325, -803, 2289, 4440, -34, 5872, 802, -4522, -4013, -406, 867, 4754, 3246, 130, 2889, 790, -1248, -959, -3403, -2530, -192, 862, -5508, -4531, 1753, -5774, 4327, 23, -3284, 3373, -5413, -683, 3976, -3006, 8011, -5306, 4202, -5994, -1984, 247, -3660, 1169, 788, -4215, -1535, 7046, -2666, 2918, -2636, 4463, -1909, -735, 846, -5205, -1044, -1741, 1063, 2994, 1284, 3181, 937, 3491, -756, -1969, 5251, 5658, -1717, 9866, -3398, 849, 195, 546, 2631, 1179, 2766, -3426, -1244, 2870, -1035, -7076, 4810, -1695, 2116, -93, 3154, 5, 3356, 1266, -11973, 4343, 4197, -2907, 1911, -1440, -3704, -734, 2818, 1513, 3532, 2874, -53, 946, 537, -3267, -5206, 1923, 2000, 2918, -1429, 2907, 1847, 1170, 3332, -1006, -5987, -803, 779, -23, -9507, -6962, 6120, -2361, 5382, 5429, -1990, 8878, -10381, 6640, 378, -5503, 7164, -4718, 1382, -1581, -1751, -4422, -5865, -2489, 2006, 5641, -2662, 10214, -308, 7487, -762, 6152, -7901, -404, -2790, -824, 1139, -1471, 830, 7988, -1152, 706, 2882, 5804, -206, 3045, 7272, 2814, 3449, 6540, 186, 187, 393, 7668, 620, 3448, -4407, -12404, 4513, 5431, -349, -6386, 2898, 4953, -1262, 504, 4532, 2572, 1482, 3116, -9194, 769, 3997, -3694, -1322, 2623, -1676, -107, 2043, -2880, 2422, 4640, -1267, 3663, -1338, 534, -3543, -2191, -1719, 2142, -3648, -3516, 2365, 3081, 3436, 1238, -412, 172, -3389, -110, -7096, -6188, -308, -2697, -1187, -191, 3391, 3251, -11840, -3758, 2201, 2587, 7272, 4061, 4142, -2284, -6042, 2067, 1795, 2252, 3393, -2368, -4717, 4834, 773, 5436, -144, 12836, -1366, 5836, 2342, -360, -699, -2208, 8385, 2453, 203, 1134, 5826, 4419, 10141, 3766, 1870, 3302, 9, 1807, -1408, -255, -1239, -3163, -431, 5285, 1622, -5608, 2909, 1313, -3355, -7228, 8553, 415, -1833, -85, -2738, 2104, 281, 5275, -5428, 7834, 3098, -9044, 11712, -6682, -7715, -13, 2529, -1791, 6766, 7386, -2946, 1822, 1861, 74, -7163, 4631, 1538, 5535, -4588, -6092, 244, -2809, 1167, 2482, -9212, -2041, -311, 6, -921, -1389, -3279, -4123, 5805, -9018, -1278, -1017, -5278, -1605, 636, 2716, 11805, 4602, 4914, -2299, -441, 5551, -4325, 3903, 147, -4580, 3110, 4425, 2240, 4828, 188, 7673, 5816, 707, 3355, -995, 2052, -2840, 7218, 4276, -312, 4465, 3166, -2122, 10202, 1221, 5217, 567, 992, 3600, -2422, 1869, -2318, -2496, 2508, 4455, 6881, 5363, 64, 1162, -2187, -4295, 3375, -4860, 4264, 732, 86, 3093, -1179, 3041, -2624, 4878, -2029, -623, 1146, -2394, -701, -7322, -2154, 1340, -868, 2248, 2220, -2889, -1298, 1193, -9583, 341, -2740, 7274, -2519, -2766, 2336, 4579, -2218, -1796, -5346, -1189, 2611, 3678, -3459, -1738, 3781, -739, 2156, -1029, -781, 1230, -7961, -679, -4111, -4803, 3312, -2963, 5043, -1110, 384, 1126, -3359, 5196, 1170, -2402, 1392, 4588, 4912, 11097, 2539, 6524, -12, 2522, 2050, -1931, -951, -2865, 4185, 8598, -6388, 6513, 4462, 1297, 504, 986, 6109, 2388, 926, 4434, -2600, 1954, 628, 3163, 470, 4548, 2417, -1420, -3597, 6691, -2350, -6041, 5747, 285, -1391, -2310, -1198, 4895, -2457, 3787, -1665, 4804, -53, 1129, -6505, -1855, 1150, 2986, -2440, 1056, -4078, 3490, -3960, 738, 630, -2801, -5992, -5889, -4527, 7830, -91, -2868, 2693, 1842, -1106, 1118, -9942, -818, -5561, 2693, -52, -5546, -918, 10013, -896, 3093, 7660, 2536, -9775, 1511, -542, -7456, -3665, 1065, 520, 2768, -4004, -1533, -138, 4741, 1600, 7745, -2251, 4847, 2058, 12079, -3851, 6187, -6544, 2794, 250, 4463, 2014, -4437, 1472, 2889, -3164, 4241, 6678, 10850, -1129, 3010, 7583, -868, 1498, 3504, 2731, 3084, -6433, 6804, -3683, 7895, -5292, -1635, -2026, 7379, -6386, -6051, -3549, 4694, 75, -1733, -1769, -1397, -742, 6775, 4808, -1081, 2283, -6244, -6237, 3794, -387, 6268, -4899, -919, -377, 4356, 2290, 7821, 674, 11, -1186, -3044, -5784, 1510, -1227, 1479, 5572, 7115, -4526, -1253, -6326, -3773, -2918, 2470, -105, -8093, 3603, 1318, -1987, -1139, 5722, 1913, 2260, -4120, 566, -11918, -133, 5246, 4942, -7085, -2548, 3500, -1347, -569, 3669, 2486, 1989, 6777, 2233, 7709, -651, -1838, -5009, 2453, 820, -1211, 3543, -4274, 7759, 4339, -1069, 8293, 4449, 7555, 4594, -775, 6766, 3288, 2874, 3268, -3157, 4368, -1796, 3580, -1393, 6144, -3110, 3937, -7004, 8413, -5399, -8583, 52, 3705, -2225, -2872, 272, -542, 1585, 2510, -1483, 3251, 1098, -4312, -5295, 5742, -3256, 3215, -1453, 229, 120, 6417, 1980, 6619, -2580, 1056, -6655, -2804, -4555, 3031, -1442, 2164, -1416, 5960, -2135, 667, -6228, -4633, 1265, 1212, 1492, -3118, -4624, -2571, 922, -5149, 2646, 3369, -4790, -7393, 1544, -3307, 7969, 2135, 4394, -1742, -2334, 3815, -1519, 1653, 501, -5093, 4217, 4674, 4316, 5963, -4201, 6037, 465, 4262, 2931, 1242, 7637, -2579, 8543, 3011, -2143, 7631, 3446, -4119, 10101, 5359, 4750, -5259, -2224, 285, 2908, 1901, -305, -5590, -1348, 7531, 4661, 7193, -7281, 5067, -2778, -7243, 6111, -5114, -1921, -1854, -7491, -3525, 3287, 5132, -3622, 7208, -2035, -3152, 1234, 4053, -3669, 23, -4970, 4188, 1139, 7673, 2675, 728, -3741, 881, -6477, -2304, 2881, 4998, -1414, 2472, 4404, 5347, -2254, -2840, -11023, -3689, 2152, 2077, -1290, -1456, 4346, -84, 1780, -5319, -565, 3855, -9924, -1676, 5298, -1528, 5453, -340, 3092, -3191, -2658, 4241, -8227, 2296, 3290, 2013, 2798, 3417, 4292, 3914, 1272, 3061, 2969, 1869, -951, 106, 4974, -3509, 1208, 2097, -3231, 4901, 2104, 901, 6842, 539, 3747, 2766, 5758, 2313, -1100, 6460, -1299, 1688, 4950, 5449, -4076, -1508, -42, 9796, 394, -5906, -2101, 3418, -1305, -2168, -182, 6377, 1521, 5082, 473, -491, -188, -4330, -8150, 1518, -717, -441, 795, 2011, 1021, 2800, -581, 848, -2501, 4008, -6755, -2741, -1849, 5429, -4415, -2021, 4723, 955, -416, -1938, -5988, 759, 2933, 3158, -3388, 188, 2065, -7337, 3519, -3436, -4453, 1746, -3046, -635, -628, -533, 4189, -1829, 9908, -2635, -1739, -85, -1966, 173, 2220, -2046, -413, 2854, 5346, 3684, -870, 7841, -419, 2313, -1568, -1594, 109, 1017, 2036, 2643, -2057, 3943, 1118, 898, 4328, 6071, 4706, 3425, 4377, 2899, 714, 1448, -1682, 1547, -2616, 4015, 1751, 2683, -1640, 3166, -3095, -6956, 1613, 3330, -1376, -1503, 2749, 668, 897, 2383, -4764, 2179, 1844, -2565, 669, 4721, -3658, 2835, 978, -194, -4879, 5975, -827, 3557, -466, -3111, -92, -785, 1727, 3453, 5740, 1120, 5107, -103, -875, -1677, -4304, -2142, -1107, 2291, -3746, -4858, 6842, -1039, 5779, -3694, -4336, 3602, -6305, 61, -8850, -6895, 2615, -1598, 3627, -1411, 598, -1865, -7718, 1334, 6778, 6100, 2353, 6723, -3468, 6547, 1522, 2085, -187, 140, -835, 2297, -2499, 1256, -2196, 11208, -5149, 1698, -2954, 1354, -625, 3939, 7377, 2531, 5444, 4786, 1820, 773, -3275, 10277, -3622, 7362, -3988, -5617, 1018, 5692, -756, -7296, -4054, 3804, 1322, -391, 959, 2985, 1871, -5377, -2034, 866, -356, -188, -9604, 4372, 1999, 1001, 581, 2208, -8110, 3616, -3965, -84, -884, 1584, -3387, -9392, -4117, 6733, 78, 5165, 9045, 5723, -3879, -3470, 2514, -1992, 3170, 3436, -2019, -324, 5636, 2036, 958, -2499, -157, 1402, -8791, -759, -7932, -2054, 3363, -1883, 5902, 2747, 1161, 1105, -3796, 2253, 2683, 1825, 3613, 2240, 3857, 5709, 4678, 2989, -1755, 95, -203, 1198, 2975, -1403, 423, 7396, -2784, 1978, 564, 1399, 1606, 6246, 5710, -1047, 5715, 901, -2913, -323, -382, 5436, -4321, 2797, -798, -8412, 1533, 2521, -4490, -6877, 1595, 3315, -2527, -4016, 2875, 8121, 605, 1871, -1074, 5047, -1897, -6237, -7210, -390, 3817, 2433, 332, -1322, -2698, 2850, -6558, 1407, 2474, -3651, -1504, -2611, -2011, 6094, -2964, -5827, 244, 3148, -1703, 1020, -4713, -1663, -2268, 3251, -3313, -3803, -180, -4097, 3515, -7957, -2660, 2309, -4325, 1665, 445, -1911, 4080, -581, 3103, 831, 3673, 7589, -1317, 6664, 2385, -1063, -57, 3221, -36, 4897, 855, 5078, 1800, 2833, 1394, -2521, -1079, 1719, 1408, 3811, 2000, 4335, 4666, 3095, 6404, 1933, 3442, 6328, 1665, 1306, -2262, 3290, -1576, -2866, -696, 4625, 4259, 3141, -3297, 9046, -906, -7079, 7703, 1716, -1192, -1602, -337, 762, 1612, 8893, -5946, 5934, 2759, -2272, 3111, -607, -3045, -3083, 1222, 901, 683, 3736, -1885, -447, 3923, -166, -8200, -466, 4072, 4585, -2169, 4059, -1607, 4053, -489, -3989, -9056, -4716, -1626, -4, -4857, -5187, -901, 834, 3800, -3531, 101, 4767, -7950, -1419, 1493, 351, 3790, -5935, 2553, -1157, 2276, 9471, -2014, 3276, -3142, 1858, 755, 3713, 3909, 4758, 5661, 5669, -308, 1597, 686, -4321, -2248, -283, 2436, 1429, 1593, 2804, 2428, 1359, 3779, 967, 3767, 5371, 39, 6478, -3897, -2259, -939, -2228, -29, 4017, 396, -3320, 3259, 2966, -1393, -7233, 5633, 3073, 1927, -4840, 6691, 2961, -722, 8151, -11368, 6112, 1746, -3790, 3960, -1381, -2078, -1376, 241, 642, 5178, 748, -3419, -913, 4230, -3252, -7593, -2016, -1500, 4556, -4348, -5969, 151, 2363, 3104, -2839, -9198, -2882, -1376, -713, -2974, -2090, 1782, -4712, -2372, -3057, 2744, -992, -4806, -5032, 3006, 3756, 630, 4692, 9714, -1753, -686, 5465, -2303, -2285, -741, -4597, 738, 790, 4334, 1324, -1027, 9764, 1210, 5765, 3948, -6281, 3970, 18, 10552, -4324, 1641, 3202, 4696, 1562, 2100, 4300, 3053, 6039, -189, 182, -2403, 793, -1242, -5771, -3490, 8658, 6488, 1641, 1281, 2274, -1533, -7621, 5251, -586, -2773, -2469, 2827, 2908, -1174, 6545, -7185, 3509, -2150, -5480, 6107, -7876, -1409, 3935, -4142, 2046, 3160, 3214, -3396, 1170, -968, -5736, -2654, 6095, 6364, 6842, -2846, 937, 4369, 2330, 1238, 1937, -8401, -3929, 950, -1689, -3041, -3281, 3614, -6405, 2927, -3320, -2067, 605, -9597, -353, -949, -2052, 7444, 2164, 11021, -3465, -126, 7090, -4136, 3599, -261, -2674, -1909, 4309, 8413, 5537, 6070, 5703, 236, 718, 4607, -3717, 2130, -197, 7378, 3666, -10625, 5025, -298, -2587, 11516, 1494, 1658, -3155, -1583, 5894, -418, 6468, 3138, -2566, -5822, 5751, 149, -8001, -526, 6949, 244, -6654, 5195, 1755, 434, -6690, 3152, 2367, -986, 3611, -7169, 6069, -1875, -7141, 4848, -5898, -4764, -1287, 2743, 2532, 228, 3605, -4728, -4576, 4144, -3272, -7021, -1022, -5689, 2764, -2346, -1623, 4908, 1096, 2280, 417, -6185, -2392, -3780, 671, -8822, -5736, 5831, -4880, 6203, -991, -3327, 11802, -14570, 5356, -1466, -5525, 4815, -6847, 2348, -4221, -1645, -633, -6335, 3170, -662, 3307, -1083, 6448, -2390, 8229, -2575, 6570, -5208, -1138, 723, -2984, -2364, 8, -941, 5376, -1216, 4829, 986, 4623, -664, 1301, 8483, 6774, 4261, 8949, -1971, 469, -914, 3855, -845, 4895, 1216, -9862, 2143, 8433, 2036, -6269, -770, -400, 2013, -1336, 4177, 4981, -682, 5398, -8456, 2517, 4110, -4110, 2974, 2821, -2377, -3195, -392, 2126, 1125, 4384, -3921, 1908, 296, -3331, -5936, -2802, -2175, 2944, -1401, -4787, 1059, 3048, 3331, -1227, -7004, 464, -1317, 1832, -1758, -2141, 5000, 1066, -899, -3731, 126, 4644, -8192, -3656, 4031, -4544, -711, 2013, 7409, -3230, -1018, 4797, -2131, -450, 3687, 731, -758, 6579, 908, 4403, -6753, 7816, -2916, 3454, 1710, -1486, -697, -3070, 2523, 3409, 47, 4319, 2361, 6181, 4106, -3177, 6081, 4535, 1712, 6316, -3388, 117, 763, 3848, 1914, 7601, -885, -2497, -1022, 6491, -5478, -8008, 3109, 1699, -1771, -3217, 4349, 3651, 1260, 6181, -4878, 2094, 5110, -2471, -2904, -5103, -4132, 377, -2336, -3585, 2589, 5269, -5526, 3426, -4560, -3953, -1344, 347, -1987, 4166, -1166, -1169, 2100, 2438, 3797, 2273, -10010, -1131, 3940, -2108, -2156, -3626, -529, -3533, 1809, -3979, 910, 609, -9706, -2262, -512, -265, 8385, -7483, -1474, 576, -228, 2489, -3359, 2890, 2989, -450, -544, 2653, 2180, 6241, 661, 6975, 1892, -770, 701, 3208, -857, -879, -1148, 8499, -4335, 3026, 2873, 6556, 3695, -1588, 664, -5978, 3686, 1848, 245, 878, -1620, -3575, -573, 2050, -3686, -5020, 829, 4462, 758, -4227, -600, -4575, 2064, -6609, -3824, 7807, 1190, 9490, -2066, 7517, -4025, -6193, -2387, -5319, -3234, 3633, 394, -637, -3919, 3647, -6393, -2086, 643, -2261, -8541, -1219, 1779, 3352, -5069, -8076, -1690, 1739, 3103, -822, -7489, -740, 903, -1257, -3826, -2017, 1157, -2195, 3664, -2453, -1169, 3744, -8297, -1565, -2704, 470, 7762, 1391, 2728, 213, -287, 2315, -4534, 905, 555, 101, -691, 1241, 4259, 6477, -1069, 6402, 12, 2657, 1827, -273, 2151, -3945, 4139, 2910, -1599, 5973, 4405, 2419, 6794, 5079, 4562, -351, 2658, 1196, 364, 6291, -3194, -981, -2183, 4031, 3923, -5273, -1732, 3549, 1204, -3078, 2787, 896, -354, -2600, -936, 1830, -991, 3822, -2524, 5631, -2260, -7260, 2903, -51, -1555, -664, -120, 206, 1570, 5369, -694, 220, 2104, -90, -8436, -1385, -2007, 5411, -3469, -3946, 2477, -133, -977, -1554, -8976, -1302, -2667, 360, -3979, -8844, 3446, -1336, 272, -571, 4933, 3906, -8499, 842, -1176, -869, 1354, -237, 5033, 227, -259, 118, 1393, 2746, 4083, -1392, -3987, 5248, -1824, 7778, -3996, 11782, -6614, 3661, -2267, -1321, -603, -294, 4913, 1153, -2089, 6291, 5539, 4030, 3613, 1405, 6791, 6043, -2577, 6828, 825, -1056, -1825, 2646, -4709, 5409, 3278, -6795, 896, 5283, -1747, -9480, 6551, -853, 3047, -1565, -40, 1474, 1291, 7107, -10870, 5535, 4157, -9413, 5653, -1041, -1272, 3306, -780, -1983, 1330, 7699, -7385, -1260, -4366, -366, -2734, -1845, -4674, 2931, -449, -3086, 2877, 3037, -60, 1921, -10163, 2536, 171, 3242, -4406, -4219, 3249, 2516, 1310, 3396, 683, 2065, -6905, 6, -4636, -2610, 3640, -4608, 3165, 2592, -3733, -1509, -4634, 2754, 2454, -2219, -788, 4101, -1475, 5857, -3077, 8158, -1187, 972, -1280, 1053, 854, -5348, 688, 3657, -6065, 3089, 3531, 5488, -1135, 2602, 5852, -1202, 93, 3649, -1992, 3388, -1959, 3478, -3569, 4358, 1069, -5083, 1394, 451, -6124, -5354, 5769, 1413, -505, 642, 556, 6313, -421, 3914, -2839, 911, 970, -5393, 394, -4241, -2052, 3962, -5261, -3211, -408, 3658, -5503, 5319, -842, -1436, -2135, -122, -2614, 3997, -4716, -4233, 4154, 3349, 219, 2113, -3376, 1024, -5420, 2601, -4251, -3420, 1969, 1791, 3228, -943, 2613, 8365, -6796, -1444, -1543, -3013, 4069, -2710, 1658, -1764, -654, -1482, 1703, 515, 1943, 2233, -955, 5358, -2017, 4937, -4015, 7878, -4443, 2351, 382, -1098, 3295, -2590, -865, 4315, 2650, 1980, 2026, 1681, 1948, 1462, 7655, 819, 1545, 7474, -1710, 1093, 1623, 3559, -2014, 8495, -123, -5746, -529, 2177, 1536, -8281, 3350, 3315, -25, -238, 70, 1301, -2476, 3426, -6041, 3799, 2895, -3930, 1260, -102, -5983, 2287, -1166, 402, 4864, 4799, -839, 3342, -1922, -3690, -5762, -3633, 3511, 2372, -4613, -3038, 2895, 1293, 721, 2801, -7383, -2714, -204, -226, -2790, -4426, -1896, -78, 4675, -1476, 2595, 3230, -12437, -586, 506, 4279, 6489, 4067, 7128, 2012, -5301, 1003, -1836, -674, 1094, -1179, -1526, 3653, 2991, 6638, -1249, 12854, -4228, 1535, -2078, -795, 2887, -3043, 7733, -43, -493, 4947, 6612, 6029, 9093, 4542, 6644, 2894, 4112, 2238, 450, 3933, -2142, 526, -236, 1333, 3723, -5082, -68, 3240, 174, -2922, 2624, -1884, -2544, -1242, 1124, 4566, 1494, 11303, -3255, 4431, 2688, -9443, 294, 3266, -1364, -770, 171, -4883, 4632, 2626, 1150, 906, -710, -657, -4311, -1324, -2214, 4115, -2973, -2172, 1102, -506, -83, 760, -6166, 1699, -673, 2582, -2164, -405, 6093, 4316, 3505, -376, -2666, 1687, -5994, 1702, -2073, -8723, 5259, 2547, 6119, -1457, -388, -4573, -4016, -1922, 1514, -80, 2243, 5059, -2115, 8991, -1745, 3673, -4802, 4674, 764, -169, 1570, -1322, 1709, 6865, -3270, 6465, 3100, 9621, -691, -1652, 8153, 4189, 406, 6009, 278, 1867, -1591, 8650, -4548, -249, 3132, -2461, -4616, 5125, -6375, -6452, 2800, -2660, -2018, -2964, 70, 776, 1959, 4382, -1919, 2819, -87, -4414, -7250, 3154, -1688, -224, -2610, -1034, -969, 5504, -1132, -525, 1520, -1993, -3690, -2647, -2257, 4780, 1536, -574, 1665, 4616, -745, -355, -8137, -3405, -472, 2925, -3203, -2261, 3738, 1144, 2704, -3275, 2948, 3464, -8796, -48, -2212, -4138, -2645, -196, 2636, 3487, -1219, -2521, -3783, 4735, 1396, -5443, 1775, 594, -2932, 3757, -2009, 4905, 714, 3726, 438, -3058, -4579, -1527, -4323, 5619, 2126, 5422, 2239, 7539, -1049, 2550, 7977, 1095, 5368, 4327, -1891, 4248, -5741, 3910, -1903, 2315, 1733, 220, -2169, 3101, -4793, -8738, 6894, -3443, -4463, 2541, -1903, 2677, 1900, 3396, -2573, -671, 1534, -2276, 94, -1147, -4618, 1234, -5827, -728, -1241, 4739, -2358, 2982, -222, 2079, -4813, -2062, 4379, 6866, 864, 1233, 1901, 8219, -1755, -2321, -7942, -3689, -3445, 992, -1626, -5152, -1328, 4890, 2400, -1923, 3089, 5066, -5683, -559, -5429, -3505, 3393, 5901, 5621, 368, -2621, 2011, 820, 1693, -561, -3275, -198, 3529, 1928, 10727, 6878, 3835, -2272, 9305, 4007, 3593, 5061, -4105, 10910, 2683, -4858, 10048, 6914, 1424, 5164, 6846, 7268, -4574, -2318, -604, 2688, 5699, -8208, 680, -8441, 7096, 7222, 137, -8110, 2289, -7770, -7085, 6468, -2321, -5472, -1535, -7649, -6754, -192, 3601, -2772, 6486, -2268, -10607, 6450, 3637, -3485, 986, -9240, 4099, 1429, 7091, 257, -328, 5474, -851, -4305, -778, -8203, 4153, -4270, -3523, -3879, 6217, -7589, 24, -9887, -8831, -3974, -2894, -3913, -5968, -337, 5606, 3549, 784, 6617, 6210, -9153, 1071, -5355, -3005, 3567, -1376, 458, -1036, -2161, 2551, 1749, 1779, -190, 3665, -3954, 4689, 2222, 9068, 4517, 3487, -2491, 143, -2917, -1629, 4882, -2554, 6685, 5988, -1026, 3975, 5412, 2138, 79, 4292, 4689, 2709, -3798, 9475, -948, 206, -375, 4490, -670, 5128, -658, -9027, 2897, 3398, 1012, -6785, 5678, 5641, 5803, -1802, -49, 4772, -260, 3673, -5067, 3093, 2439, -5465, -1888, -2037, -1602, 4932, -1165, -3606, 6881, 5040, -3142, 1592, -1645, -223, -7532, -6564, -2969, 5020, -1266, -6063, 2028, -3744, 2735, 3032, -6856, -3606, 695, -1331, -2200, -1532, -737, 1608, -750, 2231, 7357, 4541, -6771, 1729, 3342, -3753, 4955, 5921, 2713, 5146, -1634, -699, 1816, 964, 1013, 410, -2623, 893, -3027, 5271, 447, 3172, -2852, -732, 37, 2087, 2653, -6445, 4783, 592, -3882, 6233, 3228, 959, 3383, 2978, 3337, -1598, -1526, 8909, -1303, 906, 889, -441, -1877, 5300, 4493, -1601, -2295, 1488, -2944, -5224, 8341, 3629, 4525, -3893, 1056, 4014, 2128, 3056, -387, -3322, 2248, -5976, -57, 399, -5637, 6505, -2858, -350, 3436, 2403, -2411, 813, 91, -1869, -3989, -7883, -1713, 3313, -2507, -4412, 8174, -2236, -1178, 1699, -6405, -3051, -3245, -1537, -1408, -4078, 2776, 62, 5805, 719, 3669, 9306, -7675, -621, -2265, -7219, -895, -5750, -3054, -5965, -974, -3573, -5663, -982, -181, 3190, 1920, 220, 118, 7272, -6632, 3030, -4985, -399, 3824, -2672, -2424, -1639, -230, 7692, -2258, 6245, 2891, 7679, -3938, -3670, 6641, 2930, 4338, 4553, -881, 1814, -1738, 2069, 1484, 3220, -3764, -892, -1380, 5584, 2082, -6018, -1205, -1269, 809, -1133, 662, 6254, 1807, 7617, -919, 894, 141, -1346, -5093, 3942, -3748, 990, -1019, 1084, -2805, 5296, 1914, 4790, -409, -3501, -8494, -1785, 2808, 3954, -717, -3501, -2565, 4039, 2483, -2328, -6040, -1288, -5237, -1531, -2814, 604, 3937, 1787, 1798, 1358, -3310, 2434, -13118, 4028, -2139, -1810, -1207, -4621, 2741, 928, 3765, -551, -7863, 3511, 216, 6234, -1876, 4719, 4044, 6915, -433, 3960, -4186, -1064, -1852, 3019, -182, -3166, -655, 8225, -5635, 3765, 3539, 3671, -3772, 3488, 6624, 4014, 5671, 5525, 2056, -1157, 1530, 2162, -714, 5133, -6472, -9787, 4855, 8849, -1662, -5938, -2609, 2602, -1369, -1838, 544, 5639, 1323, 6966, -3842, -334, 2818, -5906, -9671, 3981, 905, 4672, -1967, 1766, -13, 1679, -1916, 1547, -1481, -2154, -3887, -1343, -4706, 3281, -2091, -3178, 4464, -1447, -1710, -3635, -3691, 1166, 1694, -226, 1240, 105, 1248, 1028, -153, -7898, -3835, 2964, -5411, -3697, -2264, 500, 4998, 1860, 308, -650, 2888, 4413, -2413, 617, -862, 2810, 1418, 3328, 4930, 4652, 1199, 2765, 3179, 1469, -1528, 5036, 3129, -3460, 1318, 6948, -2884, 3924, 888, -3, 5548, 5874, 2183, -968, 4644, 3488, 25, 1587, 3215, 2372, -1148, 5661, -2300, -6157, 2730, 2686, -498, -5227, 298, 5237, 335, -2875, -1449, 6405, 1013, 2306, -2145, 5191, -106, -2283, -2610, 1166, -2146, 1299, -3138, -4515, -1363, 3946, -4900, 1467, -3379, 607, -5746, -2550, -2842, 4960, -4161, -3897, 3852, 1666, -3024, -114, -4926, 1017, 1600, 1421, -2242, -2511, 759, 2151, 1873, -4447, -1657, 485, -9539, 1393, -3003, 4014, 1421, 2381, 6128, 564, 484, 2440, -4124, 3708, 4136, -5990, 1831, 733, -279, 324, -3452, 7590, 7874, 5373, -2167, 294, -2561, -2607, 2454, 3498, -3160, 2039, 3947, -2049, 5454, 744, 3088, 4478, -2098, 2832, -606, 4228, -3653, 1836, -655, 6443, 7451, -2028, -1593, 90, -3202, -5316, 9884, -924, -2992, -700, -3236, 983, 682, 4139, -3676, 2215, 1144, -6384, 6050, -2040, -3183, -1527, -283, -2873, 1177, 5265, -7687, -3989, -450, -3292, -1919, -1247, 187, 5008, -2174, -1318, 4277, 4523, -3375, 431, -9128, -861, -348, 3414, -2804, -532, 181, -1845, -308, -5809, -6518, 2249, -5570, -2142, -3052, 2387, -139, -3844, 5600, -454, -849, 7760, -5773, 4792, 658, -4371, -905, 2096, 2035, 4157, -1849, 5067, 3101, 8022, -4649, 4531, 6407, -4153, 3419, 3267, -806, 3673, 2528, 2579, 6686, 3720, 4994, 1729, 1863, 3529, 594, 1986, -2754, -2973, 1853, 887, 5787, -9474, -2273, 3449, -2624, -4179, 1211, -1778, -206, -3190, -2201, -2999, 1546, 3313, -7009, 8842, 461, -7700, 1185, 1247, -992, -4112, 635, 820, -1093, 5737, 21, -3467, 1710, -4275, -4919, 2934, -5169, 3397, -6993, 441, 753, 624, -2263, -3780, -10844, 477, 2967, 4803, 134, 940, 4247, -4937, 4408, -5342, -5285, -2399, -8083, -1945, -3794, -300, 5, 2954, 9363, -482, -2216, 2447, -5292, 2997, 2607, -4123, 189, -279, 3041, 757, 1086, 5687, 3106, 1318, 119, -1961, -1887, -1636, 854, -74, -3004, 1509, 764, -3791, 9720, 2428, 2791, 1705, 782, 369, -2040, 856, -3057, -4829, -3059, 5833, 5292, 3303, -3592, 2923, -2871, -2392, -1199, 3073, -2496, -2682, -25, 311, 724, -4490, -4684, 545, 41, -4332, 150, -1227, -1779, -3423, 1114, -868, 34, 3269, -359, 876, 3232, -2728, -2372, -852, 424, 3341, 2806, 118, 6612, -1365, -2513, 367, -5942, -1863, -411, 2881, -5151, -302, 5270, -222, -761, -3363, -4115, -252, -4592, -2444, 4129, -2245, 7856, -895, -374, -1426, 2882, -429, -3127, 3325, 4359, 1254, 1617, 1862, -958, -1266, 3250, 2452, 3953, 3197, 533, 271, -745, -1896, -415, 3353, 3978, 2173, 1474, 81, 9738, 1508, 3758, 3617, 3657, 859, 1810, -6473, -3975, 3978, 3919, 6555, -1580, 1907, 337, 142, -2047, -6420, 5405, 1349, -2439, 3281, -325, 3497, 3956, 1022, -4718, 1535, -13, -2889, -2782, -2133, -3368, 645, -4084, 3365, 1982, 833, -4914, 20, 2296, -1526, -4453, -2005, 6215, 5818, -3916, -5615, 1775, 569, -1189, 1094, -4387, -431, -2238, -221, -2179, -5337, -83, 1715, -2519, -2112, -1391, 726, -8855, 3617, 2214, 611, 3263, -2194, 2610, -23, 1364, 4550, -2162, -762, 3568, 3611, -2263, 4615, 7023, 6780, -3192, 5828, -4562, 1432, -5435, 4030, 4726, -1705, 2841, 5961, -3348, 4857, 5099, 3478, 2621, 4423, 7521, 2897, 2149, 3447, 557, 1221, 564, -604, -2074, 2797, -4153, -8589, 3676, 3218, -2895, -8171, 3613, 553, -334, -1788, -789, 6386, 3369, 4552, -5088, 4598, -232, -6123, -3986, 3646, 352, 5383, -1335, -1308, -2595, 2659, -3701, 672, -2245, -465, -3426, -2480, -2674, 4551, -4040, -3122, 2072, 5165, -1077, -314, -5338, 2082, 473, 2857, -5168, -4163, 3526, 1032, 1682, -2194, 2134, 5939, -17676, 3424, 565, -2887, 1822, 2337, 7122, 4466, -3287, 2382, -20, -68, 613, 1413, 495, 3303, 4795, 7838, 1793, 6327, -1859, 4952, -759, -1399, 5759, -3164, 4838, 1575, -7271, 7164, 1572, 1047, 3428, 5059, 9867, -230, 5471, 1366, -2264, 2223, -469, 5137, -6043, 5680, 2402, -7433, -1885, 1831, 236, -10141, 5807, -1458, -3895, -6711, 820, 8094, -2264, 8560, -4594, 1560, -1270, -5369, -258, -548, -2621, 2763, -3273, -3511, -2691, 2861, -9611, 276, -695, -5135, 935, -3932, -7391, 2535, -2293, -8550, 1920, 3293, 2003, 5446, -9968, 1475, -1111, 3636, -2728, 613, 5570, -118, 2018, -1659, -5030, -1703, -1895, 2545, -3470, -7530, 5932, -986, 1668, -6044, -2412, -2659, -10276, 1579, 309, -3569, -344, 3613, -3814, 7019, -3178, 3509, 558, 732, 1427, -1385, -1947, -2776, 1710, 7272, -641, 3316, 3074, 4987, 1277, -2677, 8006, 8858, 3610, 8901, -867, -1451, -7276, 7399, 2053, 3910, 508, 5782, -382, 3063, -7234, -3459, 3056, 220, -2458, 2383, 241, 1871, -316, 386, -638, -2461, 1021, -3180, -6271, 468, 482, -470, -4799, -639, -173, 4221, 1931, 2904, -2391, -2197, -1980, -3638, -4655, 5982, 2222, 1693, -1530, 5521, -3388, -750, -1713, -3211, 920, 1706, -1604, 3922, 983, -1715, 2530, -3532, 8, -4332, -8053, -1628, 2230, 198, 5159, 94, 8715, 803, -3117, 2628, -1155, 4329, 1338, -1305, 2465, 2669, 3828, 5312, 3960, 5652, 5245, 3023, -1906, -463, 1097, -3486, -407, 4945, -845, 3756, 3291, -652, 8273, 5386, 5222, -2756, 3788, 1633, -1293, 1871, -3222, -3757, 372, 6356, 3428, 1786, -1207, 1965, -4410, -3527, 5246, -396, -2627, 90, -3354, 768, -1055, 3335, 694, 1493, -1955, -2498, -222, 489, -3684, -3331, -3016, 64, -676, 2488, -1543, -2352, 2639, -797, -3626, -2639, -372, 6318, -4656, -5482, 4194, 701, -218, -558, -7610, -4073, -2275, -2986, -8833, -986, 124, -2463, 5892, 686, 606, 4277, -6560, -376, 1622, -2148, 11532, -114, -2107, -3954, -337, -3942, -7893, 2633, -1440, -1255, -405, 457, 257, 3453, 87, 6463, 5708, 1287, 277, -1327, -3818, -4460, -1466, 2553, -1492, 2562, 4030, -4092, 3164, -218, 5282, 2330, 2301, 6567, 77, -495, -3719, 4096, 4260, 452, 1907, -4191, 1570, -1476, -777, -3092, 5019, -3420, 2409, 2772, -2400, 7671, 2705, 4217, -437, 1533, -2786, -4955, 2329, -2077, -3383, -2090, 547, -520, 3995, 2282, -354, -1912, 1311, 724, -10273, -3269, 4931, 8264, -1851, -5106, 1448, -2979, 2913, -433, -4725, -805, 2895, 4021, -3571, -2347, 1528, -7214, 3435, -20, -527, 477, 1825, -605, 1652, -8937, 2873, 5552, 1182, -2201, 2511, -5715, -2412, 4569, -737, 1251, -384, 3083, -927, 6100, -245, 5427, 3270, 2912, 1603, -1531, -2264, -2081, -1075, 2513, -104, 5530, 3990, 5306, 6028, 2686, 8798, -5543, 3342, 5476, 6277, 5394, -2834, -2393, 164, 2880, -1147, 1528, -6342, -825, -1412, -1759, 650, 1786, 722, 1043, -219, -2763, -236, 4132, -4422, -807, 3878, -461, 1848, 1731, -4255, -3668, -5388, -401, 2914, 5858, 2258, 972, 76, -2997, -7001, -2374, -2000, 2381, -35, 385, 5190, 5609, -2688, -2616, -2803, -5584, 2345, 2941, -2871, -1084, 4657, -419, 2481, -3887, -2630, 866, -5318, 2368, -965, -1088, 6335, -424, 5501, -176, 1246, -4012, -7271, -300, 3456, 1689, 4446, 3466, -556, 3840, 908, 3405, -2944, 515, -686, 2926, 1396, -1918, -966, 5721, 1050, 3630, 1508, 1074, 1249, 2445, 7095, 4427, 3649, 2500, 830, -2062, -757, 5490, -1180, 644, -1431, -3465, 2833, 2241, -463, -9661, 1826, 1550, 181, 4136, 4296, 4530, 3158, -302, -3150, 640, 121, -5167, -5439, 5596, -356, -36, -1190, 2054, -791, 4576, -1445, 95, -318, -33, -3203, -2954, -1059, 7049, -617, -1535, 3150, 4503, -3218, -2334, -1822, -590, -2221, 4003, -4852, -1521, 3245, -683, 3294, -2272, -5857, 2096, -3639, 4451, -507, 465, 9738, 1348, 8904, -1101, 1796, 3222, -4173, 1633, 4104, -6762, -157, 1675, 3632, 7772, -1958, 5195, 833, 5493, -2092, 230, 2597, -2062, 1095, 7463, -789, 1479, 1865, -1633, 8243, 3965, 5132, 6606, 2381, 7273, -2326, 2060, -2204, 2798, -69, 2206, 6049, -9803, -2032, 4714, -7430, -1866, 4825, 1764, -4266, -1893, 2205, -3166, 1629, 602, 1087, 5184, 3544, -5460, 465, 1162, -1825, -2990, 4445, 2370, 2335, 4041, -778, -1101, 3479, -3071, -3474, -779, -4636, 7409, 71, -5987, 5013, -2209, -1411, -532, -8249, -1530, -2673, 1112, -3515, -2310, 724, 3135, 8602, -119, -7179, 675, -4741, 2006, -1785, -4741, 8553, -4914, 7367, -7101, -314, 1998, -4641, -55, 3013, -4972, -1397, 2416, -3414, 6327, -6151, 4398, 3443, 3223, 2112, -198, -977, 680, -760, 6118, 2284, 967, -598, 2257, 2010, 1115, 6266, 10071, 1412, 9394, -3923, 756, -6333, 2255, 2430, 3615, 1488, -3743, 2339, 5327, -4381, -5880, 5724, 967, -4182, 1525, 982, -1066, 2653, -1335, -436, 680, 305, -722, -4381, 20, -1996, -5160, 3866, 4030, -1999, 4964, -316, -3123, -207, -4052, -2721, 1148, -2226, 7379, 552, 358, 6875, 1082, -1178, 1178, -1530, -2755, -3963, -114, -4425, -2881, 9901, -2902, 4558, -3808, -4906, -856, -988, -2360, 4770, -4801, 6673, -3720, 6500, -6152, 161, 2609, -1543, 1731, 2350, 695, 483, 3233, 232, 3915, -920, 3134, 1011, 112, -1177, -2428, -2995, 10, -2357, 4581, 2024, 1935, 4046, 7476, 4035, 1220, 4238, 8459, 5605, 7146, -1428, 3900, -1971, -3722, 3956, 1718, -180, -1906, 3105, 6262, -1473, -5892, 7675, 3453, 2610, 1561, 2335, -3167, 1737, 9591, -8858, 5423, -1423, -3082, -1431, 2164, -1831, -1496, 4055, 2421, 1232, 4416, -1145, 434, 1117, -804, -7990, 2287, 3441, 3805, -862, 2441, 1802, -1228, 1511, -3782, -6433, -1973, -619, 3, -7471, -4137, 6673, -4315, 6340, -1501, -2600, 5751, -6406, 4153, -1202, -3790, 10577, -5981, 2794, -4621, -2442, -1496, -5195, 1600, 2374, 2510, -2, 3890, -4049, 5843, 803, 3442, -3183, 367, 1440, -1692, -225, -2442, 409, 6381, -302, 3903, 3463, 4667, 2128, 3258, 7068, 4743, 5926, 4508, -1727, 553, -5876, 3076, -2111, 1621, -37, -4287, 2517, 3930, -699, -8341, 2118, -832, -6, 0, 2264, 3692, 1311, 6649, -5455, 3354, -83, -5084, -181, 2237, -2434, -2683, -2739, 2373, -841, 5699, -2182, 46, 1201, 2438, -7145, -1475, -2816, 4391, -5143, -4745, -761, 1614, 3451, -2091, -5330, -1285, 225, 4562, 316, -3099, 3717, 2162, 4411, 1912, -331, 3409, 3037, 7661, -3839, -4774, 2907, 833, -1013, -299, -546, -3443, -2089, 2562, 1097, 4041, -2129, 2509, 1408, 9698, -486, 244, -7314, 2298, -968, 4207, 1607, -4541, -3092, 9952, -1307, 3166, 5440, 4876, 2377, 5050, 8755, -3460, -1841, 5168, 2090, -633, -4208, 6700, -4491, 1324, 1037, -3097, -1614, 2064, -2625, -6494, 4171, -2552, -6368, -1366, -2870, 1774, 2107, 6227, -2339, -2323, 2341, -4085, -2985, 3308, -2504, 945, -6303, 2132, 799, 8042, -3529, 1591, 4481, -3934, -2977, -7307, -1658, 5795, -903, -4950, 679, 7811, -2433, 1770, -4041, -3341, 694, -1840, -5795, -1726, -1473, -5162, 1923, -7274, -1799, 4162, -4499, -1998, 3114, -2491, 5625, 1597, -155, -2452, -4063, 844, -5047, 328, 492, -2281, -634, 3826, 1090, 1491, 3285, 6961, 6414, 4858, 475, -2338, 1782, -3315, 4962, 862, 2192, 6583, 1760, -4058, 5856, -971, 2440, -2873, -2139, 1267, -1382, -57, -757, -4178, 2975, 7388, 2690, 4489, -1847, 1942, -462, -7873, 5929, 609, 2623, -1704, -2966, 792, 2872, 6025, -4153, 1265, -1137, -176, 1578, -1349, -8824, -2432, -732, 3128, 1541, 3573, -588, 722, 3879, -2318, -8382, -2597, 2107, 4186, -1166, -3918, 1873, -68, -413, -652, -5221, -6594, -557, -1492, -5483, -2211, 1211, 523, 304, -3150, 1224, -2465, -8407, -890, 1665, 621, 5173, 1314, 6177, 1600, -2006, -334, -2456, 2200, -1777, -8136, 2582, -2266, -1323, 3255, 1724, 7176, 5391, 2852, 2136, -1283, 3220, -1061, 5063, 4731, -342, 4084, 5920, -367, 2341, 6942, 4227, -63, 1292, -383, 996, 6330, -4251, -1646, 2315, 4176, 4765, 7598, -3147, 1093, -2498, -6721, 10339, 1917, -1455, 1626, -3851, -1610, -194, 4529, -232, 735, -1256, -4583, 709, 72, -5068, 2888, -5046, 5229, 2509, 2418, 3128, -70, 67, 2754, -4235, 1024, -139, 5378, -727, -2637, 6387, 2430, -2530, -1952, -8660, -2871, -2276, 1646, -4957, -7183, 5017, -1908, -3644, -517, 337, 1133, -7685, 1705, 569, -4058, 9032, -1009, 5646, -2184, -1945, 5372, -1005, 872, -2263, -2909, -2066, 3606, 3909, 10442, -1093, 4892, -729, 5900, -3156, -186, 3802, -1951, 3970, 2728, -2278, 3811, 6160, 2727, 830, 3128, 5527, 1599, 4457, 4644, -3943, 434, 373, 2619, 1507, 4000, 3189, -11034, -2561, 9093, -196, -5956, 4036, 295, -6136, 62, -1513, 8736, -2375, 8984, -1352, 830, -1586, -5156, 940, -3230, -1031, 5295, -2152, 1981, 3230, 6312, -4515, -508, -3134, -7086, -6530, -2479, 1270, 6680, -5247, -11357, -511, 2982, 7815, 1698, -7890, 440, -8124, 3579, -5637, -8740, 5945, 3667, 1929, 1950, 1604, 11874, -3610, 1602, -2197, -11445, 4680, -949, 1779, -5835, -2495, -5501, -4055, 2018, -2964, -1047, -2977, 6253, -6014, 9338, -4130, 5788, -7526, 5041, 1995, 212, -5048, -1642, 695, 1956, 1406, 4043, 6139, 4459, -2185, 2644, 9383, 5241, -547, 9976, -54, -3713, -3033, 5193, 1497, 7196, -532, -1213, -2009, 7278, -6997, -8522, 4331, 3623, 995, 2933, 1226, -4004, 6895, 1998, -9256, -2844, 6917, -4124, 2359, 4181, -333, -2404, -5540, 2042, 5680, 8031, -2251, 2790, -2467, 192, -5269, -7918, -3194, 6564, 3686, 2718, 1891, 2057, 671, -1113, -6812, -3396, -1194, -1457, -5018, -464, 2214, -1701, 2368, -2466, -1985, 3665, -8666, 529, -931, 1163, 4636, -2222, 5207, 2588, -737, 1396, -5552, 1112, 1169, 356, -1138, 2574, 1195, 5724, 291, 1808, 2063, 2832, -1154, -2161, -1296, -2873, 2252, 5657, -848, 5002, 3173, 3055, 4802, 1634, 2391, 3392, 1988, 4623, -155, 3819, -245, 3850, 2437, 3443, 2455, -5686, 2352, 2458, -1761, -7499, 6976, 2160, 1049, -1589, 444, 819, 359, 3075, -2791, 172, -77, -6529, -1279, -2105, -3861, 517, -804, 1308, 11, 3547, -5619, -674, 1031, -842, -7733, -791, -4511, 5330, -3184, -1562, 1150, 1963, -2870, -2986, -5491, -1445, -4791, 3103, -6450, -6948, -1760, 3142, 5310, 1236, -2991, 7844, -3949, 3047, -3304, -5635, 4816, -3040, 1298, -7851, 70, -2886, -8751, 2906, 649, 246, 1129, 8247, -785, 4729, -7481, -923, 698, 2432, 800, 1787, -333, -2255, 2505, 2397, 2239, 1537, 3771, -1276, 2116, -134, 6853, 2674, -2016, 7666, -3017, -1743, -6850, 2588, 3386, 6879, 4565, -4838, -2432, 4681, -6183, -2272, 197, -2052, 1355, -2449, 210, -6002, 4570, -2826, -5217, 916, 1505, -4628, 967, 4776, -2893, -8747, -1959, 1107, 6552, 5024, 2094, 1657, 1575, -2503, -9651, -4576, -7563, 3493, 79, 1993, 4013, 287, -1750, -3121, -7388, -4352, -1864, 728, -4121, -3454, 4298, -74, 5293, 1927, -2553, 8545, -9405, 3440, -816, -2624, 5692, -3690, 2145, -296, 2412, -1642, -9348, -170, -1286, 2366, 938, 4960, 4065, 4453, 293, 5433, 801, 2625, -550, -2503, -2274, -2701, -3162, 6426, -490, 3337, 2337, 23, 1274, -1449, 5933, 87, 2758, 3449, -888, 1646, 23, 2669, 1103, 2078, -1782, -8895, 120, 3008, -846, -4501, -216, 2352, -4886, 1270, 1014, 4795, 1874, 3990, -1798, 2208, 1754, -2033, 2406, 2673, -3757, -2006, 1481, 767, 958, 4389, -3589, -292, 2378, -3387, -6176, -2151, 2099, 4229, -2795, -5286, -884, 3344, 97, -2637, -5959, -2887, 1256, 2446, -8450, -1395, 9359, 175, -4243, -6877, -4250, 2132, -15855, -3102, 2019, -763, 5404, 547, 9339, 256, -1157, 778, -3359, 5212, -795, -5850, 2554, 5052, -1318, 2217, 4383, 7851, 2030, 1373, 2626, -2086, -1120, -4595, -390, -1189, -4113, 1440, -579, -753, 8208, 4173, 3397, -523, 3788, 6492, -2001, -910, 1376, 2825, -3327, 7588, 539, -4031, 2958, 753, -4167, -9116, 6557, 705, -6109, -4080, 707, 7454, 792, 3052, -4650, 1158, -1825, -7637, 4120, -4129, -7322, -4935, -3492, -372, 4294, 746, -8026, 2735, 3117, -1233, -4744, -1742, 3927, 3707, -1847, -1788, 7000, 6261, -2136, -1343, -9779, 550, -4384, 306, -2821, -3697, -1518, 722, -945, -1739, 3174, 609, -8245, 3012, -5919, -2412, 5417, -2662, -761, 650, 305, -1064, -2131, 3683, 1430, 2034, -1083, 4524, -3447, 6394, 194, 5756, 226, 2568, -1119, 2487, 861, -1346, 409, 3397, 2466, 3592, 3526, 1297, -2105, 4653, 6060, -10, -1532, 5083, 704, -158, -5170, 851, 1484, 5786, 3489, -3141, 955, -439, -3452, -8524, 3030, 2095, 2484, 3222, -2987, 985, 5643, 1827, -2509, -359, 1892, -1880, 1678, -2098, -1209, -2080, -4578, 793, 2980, 3117, -752, -475, 294, -2224, -7446, 438, 127, 5067, -2206, -3164, 2644, 3596, -219, -2747, -1209, -5059, -2688, 630, -7877, -10411, 2636, 2742, 5553, 364, 2472, 7973, -6504, 1982, 1098, -6597, 7290, -2445, 1486, -9286, -2119, -5621, -3073, -908, 5407, 3691, 100, 10676, -3455, 7508, -3896, 4517, -5250, 1382, 237, 2037, 696, -2737, 780, 5881, -957, 1827, 1441, 3646, -1410, 971, 7921, 5351, 1796, 15097, 152, -4237, -3112, 6957, 3236, 9392, -4588, -3384, 4425, 3327, -4482, -8670, -174, 7360, 1161, 3026, 3965, -1983, 4161, -831, -4248, 1568, 5399, -3775, 113, 7187, -2742, 183, 1379, -302, 1410, 5938, -729, 2281, -5472, -2089, -3426, -1528, -6029, 4269, -2504, -1150, 2143, 332, 444, 723, 1072, -3618, 124, -311, -4343, -3267, 293, -3431, 4327, -3394, -2483, 2830, -8969, 1568, -6078, -3416, 7290, 2434, 1132, -1245, -333, -881, -5504, 4320, -121, -963, 3075, -1975, 704, 5731, 1524, 5913, 5065, 2983, 3353, 2584, 1098, -1455, 225, 5517, -1051, 6122, 4022, 2853, 8243, 528, 3686, -457, 200, 3071, 4858, 1203, -3710, -2549, 3942, 2542, 1962, 859, -3593, -824, -4390, -3824, 3773, -2861, -2413, 1071, -8104, 646, 2415, 3167, 3099, 1000, -1995, -3368, 2731, -531, -3914, 35, -2614, 8984, 2583, 3380, -31, -3981, 3766, -2379, -12923, -2491, 3581, 5947, -1195, -5742, 4864, 4575, -768, -1840, -5860, -2208, -166, 5446, -2903, -1551, 8278, 5586, 2509, -3019, -1872, 6410, -10348, 5292, -3369, -6925, 4787, 1893, 1727, 4773, 320, -3012, -5465, -571, 5959, 7057, 3452, 8699, 2272, 6934, -3004, -2388, -4618, -697, -2806, 2604, 2510, -3936, 1449, 8898, -4964, 5494, 1873, 1009, -1450, 1953, 7170, -187, 1613, 6354, 3757, -2029, -1565, 11235, -1977, 3438, -3522, -10308, -2593, 3995, -5005, -5514, 93, 2193, -1626, -3942, 572, 4421, 2093, -1057, -509, -3793, -292, -4617, -11963, 3498, 2156, -161, -2325, -5951, 2363, 3689, -7479, 2299, -1996, 1444, -2635, -8545, -12044, 4654, 2577, 1486, 2731, 4231, -2399, -676, -4780, 1882, -1130, 1922, -3993, -1587, 698, 1303, 4933, -8747, -1649, 1776, -9692, 2205, -711, 4532, 6311, 69, 6928, -3150, -963, 6679, -2505, 2184, 3183, 1701, -1626, 1568, 3561, 5131, -1887, 8524, 2667, 4069, 2222, -1400, 3326, -1510, -736, 6960, -1630, 4690, 2118, -2322, 11431, 2167, 2759, 2415, -995, 5259, 55, -1882, -231, 1009, 915, 5069, 2761, -6459, -249, 2230, -3318, -7365, 4885, 949, -3434, -2386, -7266, 1036, 384, 4649, -3395, 4152, 736, -5734, 2248, -2390, -3421, -2705, -1258, 2652, 1010, 4759, -4442, -3508, 1222, 1064, -11563, -1732, -2107, 5154, -2912, 194, 8060, 916, -150, 889, -8774, -849, -7553, -5038, -9951, -7166, 787, -1384, 2028, 198, -2593, 4735, -3826, 2381, 3103, 165, 9298, 1253, -821, -7890, -4017, 4110, -3712, 387, -1679, -3353, -1172, 1149, 2481, 3552, -5349, 5003, 5451, 3902, 4634, -3931, 301, -2768, 4035, 1030, 1273, 464, 4736, 1446, 3659, 2178, 4609, 6148, -4095, 9853, -264, -2512, -4018, -3962, 8612, 4212, 5717, -2060, 1764, -2110, -5374, -6591, 6867, -552, 1855, -516, 1443, 3144, 4358, 5883, -7440, -2367, 2395, -755, 8549, -9593, -2191, -3958, -402, 3151, 11381, 2424, -1763, 1380, 436, -5540, -11296, -699, 7569, 7842, -2913, -3484, 5140, -5241, 7656, -159, -7631, -3272, 842, -1934, -6779, -3036, 3252, -2185, 5853, -4140, -4826, 6264, -1508, 315, 606, -2866, 12025, 724, 6375, -6446, -190, 513, -9446, 2032, 2064, -5189, 2577, 2605, 4948, 7475, 3689, 1760, 6870, 4076, 1576, 2496, -3419, -4106, 3003, 1335, -4608, 7249, 3747, -5004, 5257, 1172, 5309, -2587, 3359, 4089, 2468, -1349, -992, -6319, 2470, 4008, 1904, 496, -1293, 3177, -1620, -3325, 3552, -636, 1280, 662, -28, 1501, 2442, 6733, -1520, 2215, -4433, -4748, 1172, 4417, -422, -2978, -636, 6921, 2565, 3026, -1548, -3986, 1380, -1574, -10194, -5557, -2764, 7885, 1123, -3799, 1183, -3731, 352, -3629, -5450, -1880, -4844, -2735, -2437, -2631, 5094, 1805, -2343, 1018, 3521, -1778, -2582, -1676, 1990, 602, 4754, -627, 6363, -6409, -6212, 3207, -556, -936, -877, -6069, -2976, 3445, 261, 5436, -6366, 8677, 1102, 6409, -1082, -2190, 2847, -1545, 2593, 3629, -225, 3486, 2230, 8464, 1894, 139, 5140, 8661, 619, 9794, -3300, 2419, -426, 1086, 835, 1046, 4644, -4780, 1751, 4556, -2404, -3830, 10048, 1644, -2224, 2512, 1694, 1233, 407, 6744, -6736, 1561, 2342, -4716, 2324, -3909, -707, 4653, 2437, -3161, 3061, 3106, 74, -974, -5911, -9823, -2170, -1283, 3248, 5230, -3459, -3818, 5714, -3062, 3788, 1351, -9265, 377, -4417, 123, -5089, -7583, 5161, 3386, 3959, -1772, 551, 7685, -12734, 5783, -126, -2582, 2571, -3462, 3602, 1936, -2825, -462, -2522, 3127, 5974, 5577, -3850, 6264, 1089, 7584, -3302, 4120, -2690, -1040, -1802, 5710, 1491, -1973, 5189, 3985, -3803, 6900, 2989, 7531, -59, 5796, 5730, 4555, 3979, 3784, 1303, 249, -3316, 1359, -4480, 5146, -4458, -7094, 2166, 9130, -1448, -10889, 3671, 8034, 3555, -1531, 2495, 5623, 2440, 2629, -3562, 2115, 1125, -5676, -5346, 2262, -1406, 5100, 441, 56, -2179, 3811, -4415, 1447, -1696, 501, -3388, -2627, -7168, 4300, -1064, -1409, 4730, -1518, -725, -2553, -4733, 3747, -539, 1082, -3367, 310, -779, -8090, -3426, -5016, 1097, -823, -3033, -2592, -2291, -2668, 2093, 4084, 7048, -2007, -2798, -498, 751, 3382, 2630, -3885, -5795, 2077, -2611, 4800, 5433, 3341, 3688, 7675, 535, -416, -3177, -4992, 8799, 3171, -5435, 5842, 4942, -4684, 2749, 3775, 4208, 808, -2008, 3127, 1106, 1967, -5169, -2217, -3788, 4217, 1331, 1924, -5395, 1312, -967, -7862, 7295, 5346, 696, -920, -2300, -1685, 3060, -3463, 225, -21, -1105, -2357, -403, -2691, -6549, -59, 192, 3604, 689, 6735, -362, -2290, 4944, -366, -5231, 2695, -3928, 4096, 790, 2390, 2273, -2718, -4783, -2841, -4692, -5137, -2521, 3031, -4871, -5224, 6887, 2458, 2382, -3967, -443, 3927, -2666, 3012, 188, -6670, 6879, -3369, -4222, 484, 2972, -412, -5198, 2045, 355, 3200, 3483, 1570, -1011, 7605, 386, 2990, -2331, 2792, 2293, -3876, -2452, -804, -6107, 8017, 754, 5388, 2478, 9613, -1704, -2450, 7721, 4508, 4452, 4425, 795, 1103, -3135, 8540, 1825, 1382, -2801, -784, -57, 5798, 165, -5241, 1491, -1677, -2183, 2031, 2883, 1839, 149, 4891, -965, -1608, 1803, -1425, -6766, -101, 2034, -1210, -4876, 3007, -2681, 2889, -1673, 2218, 1538, 2044, -7797, -3467, 5406, 5938, 2158, -2627, -1612, 9356, -291, -4283, -5293, -3498, -3257, 1687, -4174, -2874, 1845, 5441, 5417, -953, -4374, 7487, -18578, 6276, -1051, -4601, 10386, -4094, 2894, 2102, -865, -2389, -6219, -331, -828, 5749, 797, 11428, 5652, 7076, -2095, 890, -5766, 1556, -676, 5435, 7667, -1721, 1930, 10325, -6244, 4358, 2123, -423, 842, 5754, 8676, -937, 5656, 5598, 1309, 599, 628, 6452, -1182, 6154, -1010, -9012, -1070, 7818, -3638, -10292, 4370, 1338, -6329, -4504, -1080, 6212, 474, 5325, -988, 3142, 447, -6231, -5346, 8652, -1688, 3571, -4958, 844, -829, 3866, -7469, -517, 77, -295, 2652, -5469, -5484, 7032, -1279, -2138, 287, 6541, -45, -936, -5640, -565, -4065, 522, -7741, -2322, 4103, -5290, 2311, -1807, -6187, 5265, -11859, 2716, -21, -2103, 10034, -1796, 2790, -2356, -1661, 4537, -4401, 1824, -520, 2142, -4224, 4170, 3529, 4628, 130, 2051, -2116, 363, -1714, -1292, -1684, -2819, -889, 10118, -1840, 3857, 5014, -90, 5847, 3375, 4398, 1799, 1085, 8240, 423, 2767, 362, 3685, 5711, 2291, 367, -11688, 421, 2816, -5223, -6114, 8162, 276, -3786, 1271, -1543, -850, 253, 3070, -9927, -28, 1808, -6232, 840, 1099, -2398, 1019, 560, 749, 2950, 5088, -7778, -1719, 3798, -2653, -8079, -3377, -4041, 4180, -5293, -2108, 341, 2149, 343, -3252, -6289, -1284, 777, 816, -2122, -1808, 5483, 793, 5728, 1285, -2022, 5598, -2933, 4183, -6118, -6832, 4335, -774, 8906, -2025, -1245, -493, -6326, 2403, 1777, -2185, -1208, 3331, -7, 8428, -133, 2339, -993, -768, 732, 1776, 2856, -3122, 3249, 9941, -3300, 5311, 2438, 6015, -264, 3914, 5939, 4891, 630, 4236, -1075, 5607, -3462, 2533, 337, 3402, 1959, -1217, 674, 7147, -5067, -6684, 7485, 2396, -2038, -100, 1439, 196, -1731, 1868, -2222, 3047, -829, -2291, -2407, 1103, 407, -365, 581, -83, -4506, 5791, 1, -229, 2106, -3067, -3648, -5478, -2642, 5428, 1190, -555, 1372, 5331, -1815, 195, -4790, -1025, 1718, 4398, -2593, -5290, 3925, 5364, 3287, 2957, 2276, 2021, 2189, 1473, 315, -6485, 7168, -3800, 3918, -1096, -1636, -1700, -1272, -217, 3598, -4416, -409, 2677, -3884, 7579, -3287, 2969, -2403, 2917, 399, -645, -547, -1790, 1065, 4221, -1036, 5181, 2669, 6627, 1433, 1774, 6310, 1309, -740, 7414, -2541, -1390, -3673, 5061, -5173, -45, 1439, -8821, -2770, 2122, -5308, -6135, 9235, -4410, -2330, 47, 2156, 870, 1868, 6075, -7251, 1926, -75, -6135, -1530, -4233, -2352, 1319, -44, -1713, 875, 7414, -960, 1275, 955, -4883, -4514, -1341, 1669, 4644, -967, -2412, 1728, 3220, 4030, -846, -6380, -2495, -2895, 884, -2097, -4483, 2201, 6875, 4880, 1829, 6201, 3260, -3685, 324, -1971, 75, 3436, -2513, 4187, -6651, -3381, -4409, -5830, 2272, 4022, -5677, -346, 4469, 517, 7894, -1360, 6440, -2675, 3850, 866, -1996, -574, -4073, 5350, 8115, -3656, 4848, 5147, 3785, -27, 1811, 5962, 3340, -2663, 4840, -2863, -1439, -4210, 570, -4454, 5153, 363, 1122, 3958, 7641, -3519, -7249, 6699, 183, 1037, -703, -366, 3910, 1691, 5861, -2051, 3265, 604, -4838, -2521, 3219, 132, 5060, -431, 601, -3390, 5386, 566, 1739, -1543, -307, -3821, -3735, -5247, 6017, -3016, -2688, 3974, -948, -3930, 851, -8646, -27, -5916, 1415, -5028, -6377, 3799, -867, 2588, -155, 2274, 4501, -7001, -2223, 1414, -4171, 7509, 2619, 6335, -2761, -2909, 3025, -2297, -230, -523, -1668, -951, 5423, 6234, 7049, -1899, 6214, -1748, 4476, -306, -1349, -2108, -1945, 5865, 4576, -3789, 4388, 5920, 876, 6008, 77, 5028, 2942, -1070, 4550, -2375, 950, 1103, 3177, 166, 2539, -396, -5360, -2529, 5343, -2883, -7048, 5162, 1172, -273, -1445, 898, -1118, 1936, 4981, -6739, 1740, 1523, -6193, 2142, 1480, -3558, -19, 3994, -1078, 5970, 6279, -2572, -224, 2349, -910, -6676, -4326, -3786, 6332, -1341, -2215, 2743, -2070, 59, -23, -8058, -505, -4150, -1300, -6329, -2272, 3772, -3778, 4806, -927, -1765, 66, -2245, 4399, -257, -5326, 5025, 3224, 5340, -8114, -2045, -1683, -5684, -2189, -93, 3539, 479, 5904, -1230, 4142, 221, 990, -2042, -69, 472, -83, 1180, -1440, 2065, 7820, -1094, 3968, 2395, 13, 746, 2095, 7096, 6051, 4033, 7028, -2088, 3827, -3245, 6514, 1868, 4280, -173, -6124, 3496, 4327, -2869, -3104, -2329, 4526, 925, 3095, 8479, -2724, 1544, -3149, -4710, -856, 2634, -1176, -3284, 3507, 447, -6638, 152, -1054, -363, 2274, 4309, 2687, 292, 1051, -4608, -3330, -4064, 981, -5002, -2164, 406, 2088, -2769, -1763, 4660, -2071, -337, -528, -3366, -1636, 3730, -2121, 7769, -494, 1134, 2253, -9277, 871, -1127, -2931, 5795, -367, 4709, -1684, -4017, 954, -3324, 1652, -271, 3259, -478, 5482, 2308, 7515, 2361, 6372, -1460, 3450, 789, 2551, 2252, -1745, 3690, 7975, -2976, 4262, 5706, 3792, 5375, 7693, 7294, -294, 7698, 549, 859, 3634, -5759, 1912, -1942, 5070, 1783, -339, -1865, 7247, -1920, -5278, -92, 5105, -7007, -3231, -891, 405, -2175, 5567, 1237, 4058, -303, -4085, -3025, 4369, -1405, -633, -6367, 880, -4032, 4731, 2796, 2183, 3240, 4683, -2739, -3841, -2585, 6184, -5431, -2095, -2956, 6728, -1046, -3483, -2992, -2701, -1003, 1489, -4788, -2808, 1909, -1557, 4299, -1309, -2831, -1118, -3526, 3233, -2115, -177, 7943, -1876, 5437, -1102, 0, 613, -3582, 946, 1254, -158, -2839, 3438, 1568, 3220, -570, 621, -893, 1016, 865, -1261, 2805, -1978, 703, 5860, 279, 3025, 1108, -652, 3494, 4893, 6637, 3243, 6038, 5876, -4271, -1756, -1683, 4805, -286, 4002, 915, -4859, 15, 6150, -5058, -8326, 5982, -295, -1708, -250, 3389, 1964, 3507, 2964, -6231, 4905, -1465, -4137, -902, 1751, -2325, -2666, -386, 235, 1114, 4881, -3832, 398, 1232, -2992, -3507, -2210, -568, 6488, -2686, -4843, -1145, 4468, 1286, -334, -3669, -652, -3218, -1807, -6233, -6326, 4740, -3628, -1390, -2290, -313, 3649, -5506, -613, -361, -4216, 12371, -1670, 3627, -4385, -2620, 3788, -128, 3674, -1438, -5519, -2410, 2023, 70, 7592, -244, 4928, -818, 3033, -54, -1177, -2265, -2854, 819, 2004, 1500, 4155, 4856, 3290, 3737, 540, 5204, 1592, -894, 8864, -2630, -2859, -2124, -1258, 1051, 3750, 2227, -3427, -1650, 1085, -871, -3826, 5067, -1639, -1239, 2710, -1651, 757, -1539, 4913, -6801, 806, 339, -4990, 8757, -3626, -1476, -1188, -1314, 1631, 6731, 5703, -3668, 566, 1456, -5304, -8974, -2399, 5516, 5586, -1813, -6027, 2462, 1552, 3295, -394, -8600, -2493, -3827, -1104, -2853, -9092, -735, 2595, 4391, 347, 4471, 8709, -3935, 4716, -2230, -7954, 5518, 2151, 3552, -4599, 693, 2333, -6446, 3605, 582, -917, 1286, 3941, 1069, 9392, -4163, -1259, -1164, 1245, 4500, 1550, 567, -2724, 2558, 5165, -3794, 7012, 4600, -749, 4336, 708, 5605, -3258, -1811, 6346, -2225, 3751, -4200, 1177, -4404, 9061, 3865, -6761, -3894, 2839, -4450, -6370, 2530, -4978, -4164, -7215, -2026, 179, 813, 7889, -2517, 4183, -757, -8556, 4476, -884, -2644, -476, -2778, 3150, -443, 5497, 140, 342, 1823, -6640, -9313, -6165, -3725, 3392, -2241, -3442, 2652, 6609, -1914, -154, -8645, -8038, -1268, -2933, -4959, -1321, -602, 3046, 6329, -3058, 366, 522, -9207, -553, -2333, -2236, 4648, -703, 8806, -5405, -3352, -84, -2877, -553, 1062, -1983, 2509, 3083, 3330, 5053, 1100, 6057, 2052, 2426, 362, -2618, 3351, -263, 8550, 7862, -974, 5602, 3561, 1729, 5715, 3308, 5608, 4630, 2091, 3229, 1048, 3499, -2416, 638, 2625, 3364, 1682, -4040, 3217, 4060, -1444, -6508, 7733, 1912, -2349, -2882, -1307, 1670, 1130, 5165, -1669, 5421, 824, -4414, -5193, 1646, -3307, -704, 216, 2390, 3637, 3728, -1598, -2129, -1192, -3301, -5551, -713, 2547, 6071, -264, -2301, 3426, 1803, -460, -22, -5783, 777, -2660, 4799, -3239, 2110, 3671, 3322, 3549, -4624, -350, 1330, -9929, -2500, -2602, 1269, 883, -1189, -1030, -1244, 2404, 1900, -6023, 2818, 508, 2698, -1871, 1508, 5308, 5288, 3270, 3383, 3348, 2965, -619, -25, -1070, -5111, -3235, 5413, 392, 3116, 1082, -2196, 2525, 1996, 6608, 927, 1429, 6458, -1238, -2781, -691, 4265, -496, 3485, 704, -7366, 3223, 941, -1332, -5016, 2033, 542, 679, -2593, -2024, 3292, 2085, 6295, -3774, 1529, -466, -3863, -5635, 893, -1796, -26, -1239, 464, 22, 2667, -3903, -1284, 2421, -4898, -5051, -2194, -1467, 4820, -1904, -3687, 5126, 257, -1864, -788, -5989, 214, -671, 2164, -2073, -2972, 368, 8250, 3407, -1206, 6607, -939, -12825, 1729, -2451, -438, 1420, 2128, 7887, 1307, -2431, -981, 889, 3387, 3659, 1181, 607, 5672, 2891, 6608, -2141, 8797, -1806, 1862, -3523, -1620, 1952, -2165, 1858, 6682, -1892, 6469, 4052, 6088, 8228, 5631, 6317, 3640, 302, 6330, 21, -459, -2842, 1842, -3614, 4558, 2644, -4992, 2975, 4473, -8588, -3674, 4507, -238, -794, -3430, -1372, 3007, 1369, 5362, 673, 4336, 4226, -7209, -2746, 4463, -3286, -343, -1982, -3351, 367, 4163, -2585, 3435, 814, -577, -3353, -5141, -6308, 5097, 636, -2033, 2685, 7384, -2334, 2935, -6399, 55, -672, 1063, -79, -480, -4170, 372, -2498, -6990, 1134, -1546, -11013, 593, 284, 7214, 5196, 3045, 9439, -737, -666, 5044, -2288, 5148, 3917, -3917, 905, 1368, 2463, -775, -75, 6704, 8536, 4579, 726, 212, 3902, -3198, 7805, 3004, -1203, 5719, 1384, -8601, 9983, 3015, -1942, 6404, -6429, 2940, -668, -713, -1127, -3115, 1339, 5837, 8266, 2311, -1264, -66, -6607, -7273, 6162, -646, -1832, 763, -3754, 12, 2819, 2941, -2282, 3298, 1384, -5189, 6621, -3881, -2178, -3995, 1154, -213, -919, 3002, -1936, -4333, 916, 999, -6523, -85, -2535, 3619, -2236, -1444, 7702, -1671, -4003, 231, -9064, -958, -2463, -3212, -3703, -2335, 4643, 965, 250, -3375, -198, -140, -9416, 124, 2123, -1916, 8479, 3827, 5144, -93, -52, 167, -4032, 1366, 2986, -2342, 1491, 2479, -4337, 1577, -871, 2121, 485, 774, 1776, 402, 4979, -1648, 1968, 5640, 2697, 934, 4317, -828, 5960, 3704, 3463, 2982, 3094, 6007, 2671, 3120, -3068, 2977, 2166, 7408, 511, -7871, 2022, 3889, 71, -5966, 4314, 2152, -529, -323, 1690, 2059, 2325, 3834, -841, -281, -583, -7934, -3502, -2496, -266, 1995, -1564, 3526, 5917, 3790, -1715, -571, -1203, 897, -5112, -1155, -1378, 3633, -4576, 4963, 7249, 4844, -1851, -2149, -7886, -2316, 3249, 2819, -2364, 1548, 2485, -4938, 4931, -4684, -3131, 310, -10152, 37, -3869, -2154, 7030, -423, 8778, 694, -2593, 1953, -4619, 1738, 216, -6419, 1473, 3530, 2775, 6588, 3393, 10188, 1568, 1085, -79, -1509, -1149, -1230, 2063, 5296, -1961, 3287, 2470, -118, 8052, 714, 5956, 921, 8110, -695, -3449, 3981, 838, 3335, -2402, 3702, 1851, -5166, 1209, 6782, -861, -4629, 1585, 903, -7467, -2600, -2156, 3443, -2461, 2070, 2377, 1686, -656, -2947, -5537, 1248, -6082, -3948, 69, 3043, -1264, 2697, -75, 1991, 5227, -2990, -3546, -3599, 1683, 5328, -1597, -7038, 841, 7704, -3200, -1741, -3391, 1427, -6286, -2377, -6744, -4195, -3059, -2784, -2618, -5878, -1524, -403, -6556, -5508, 3800, -3036, 6700, -1396, 499, -10701, -4313, 2373, -1010, 9671, -3237, -9628, 3239, 3172, -320, 5186, 5357, 6152, 1016, 5945, 298, -6154, 701, -1201, 9460, -3156, 4018, 4831, 5949, -4515, 7404, 1331, 3379, 3808, -3975, 5947, -2549, -701, -2264, -2463, 6617, 9451, 8860, 8256, -8143, 1913, 907, -6612, 14184, 6390, 291, 4456, 424, -4042, 4776, 6128, -10628, 3650, 5262, -2001, 6676, 3656, -5681, -3378, -3797, 3271, 9407, 21, -669, -361, 4395, -6754, -6447, 4130, 376, 7528, -2147, 805, -5940, -1269, 3495, 1850, -10109, -6211, -3240, -310, -9729, -3957, 2244, 863, 208, -393, 4086, 6153, -4483, 3638, 581, -7194, 104, 1651, 5944, -705, -1824, 942, -4016, 1567, 1842, 1094, -1587, 6062, -1678, 7060, 8001, 5230, -1740, 2915, -1596, -2450, 1551, -1705, 6670, 3646, -832, 6757, 1699, 5382, 2208, 5343, 6854, 4882, 4269, 5414, -4072, -3525, -2973, 1254, -992, 6948, -3274, -1334, 1036, 9105, -6949, -7247, 812, 5413, -2531, -5659, 3147, 5150, 5108, 5496, -473, -2668, 4436, -3347, -2321, 1415, -2825, -2763, -3326, 128, -413, 1674, -2678, 3269, 2880, -1443, -3121, -3461, -191, 3234, -4047, -996, 3333, 1564, -129, -30, -2523, -1923, -2816, 1124, -4981, -2466, 6419, 1621, 4231, -2277, -2836, 5029, -12067, 6972, -4724, -7731, 10535, -2863, 2768, 3303, -944, -2807, -5711, 3722, -1639, 805, 2092, 5098, 4585, 9095, -761, 667, -1268, 2018, -2584, 2544, 1762, -162, -2790, 8423, -2428, 4293, 3693, 1471, 2623, 5194, 7467, -2179, 3416, 4006, 1085, 4380, -1511, 6041, -3238, 2183, 1723, -9542, -845, 4433, -2939, -5615, 1654, -225, -4587, 516, -2387, 3967, 1109, 8142, 1495, -1349, 303, -5846, -981, 2418, -2371, -1287, -5224, 589, 4845, 3880, -4301, 3078, 2258, -3302, -1757, -2111, -3863, 4995, -1566, -2612, -1429, 10525, 1161, -930, -4253, -1822, -1844, 532, -3062, -811, -2213, -1776, 407, -3816, -2452, 2917, -7797, -411, -2430, -873, 8026, -591, 1004, -2304, -2812, 1551, -6045, 2557, -2157, -2486, -1767, 812, -154, 3042, 2493, 5029, 1215, 3043, -1209, -491, 655, -5708, 681, 3869, 979, 5538, 4886, -1699, 4525, 1742, 5607, 2048, 370, 6871, -1314, 1677, -5032, 2471, 4106, 1399, 2671, -1645, 977, -859, -5053, -7734, 6489, -1888, -3961, 1753, -563, 1813, 2191, 7391, -4528, 873, -1488, -6707, 1780, 2992, -2643, -2261, -1905, -408, 3188, 4287, -3340, -2307, 4074, -4789, -5618, -1135, -2894, 6452, -5932, -7227, 315, 5076, -3571, -276, -5636, -2044, -377, 515, -77, 375, 3048, 6592, 5213, 1593, 2064, -1635, -5565, 2591, -553, -1368, 618, -484, 7076, 2213, 105, -122, -2114, -873, 2344, 195, 2019, 6934, 1106, 3514, -379, 3659, -2674, 871, -310, 3380, 3004, -2365, -1383, 5919, -3403, 1575, 645, 241, -2605, 2239, 7096, 1449, 5153, 7156, 203, -812, -1592, 8638, -3573, 9151, -448, -5257, 4856, 4356, -5213, -6764, 3951, 947, -2210, -3158, 2450, 6934, 905, 2096, -530, -2958, -807, -5553, -3857, -1632, 533, -513, -4844, -1429, 2471, 2080, -4253, 68, -3166, -352, 1130, -6332, -4209, 6695, -4515, -7308, 3856, 2515, -2825, 1092, -1973, -1552, 1289, -313, -1470, -2451, 2483, -2959, 3412, -4471, 1121, 4378, -5412, -3196, -1866, -2127, 3639, -2241, 3383, -2144, -3457, 59, -5781, 3768, 2211, -2804, -555, 2440, 2589, 6333, -160, 8043, 2775, 3482, 2161, 5054, 664, -2781, 8087, 1658, -2251, 3689, 3154, 1976, 2339, 5417, 4657, -3141, 1506, -408, 6303, 2865, -5906, -2686, -3577, 5940, -1122, 1926, 712, 6904, -2124, -5775, 2906, 4942, 4160, 264, -3562, 212, 993, 2666, -2096, 2320, -2250, -3781, -825, 1058, -780, -552, -1573, 5340, 1164, 5750, -1266, 162, -723, 3072, -5157, 3157, -3322, 6040, -1141, -771, 3932, 301, -5279, -5113, -5116, -1912, 2660, 2528, -4032, -5272, 2823, -1116, 2257, -5267, -3471, -1979, -7237, -1308, 2737, 6021, 4613, 2196, 6708, 1501, 370, 5865, -3888, 6257, 944, -6722, 3129, 2480, 8918, 2029, 3120, 7287, 5618, 5956, 1991, 3708, -1801, -3249, -1504, -1857, -4581, 1039, 3720, -3438, 6216, 2263, 3273, -6656, 1327, 2693, -843, -2427, 286, -5022, -1127, 3570, 3048, -4128, -162, -1641, -4490, -6063, 7798, -2398, -103, -650, -4343, 5885, 1143, 6377, -2742, 7313, -852, -2584, 11511, -6170, -2415, -1661, -6085, 4470, 3806, 1003, -7702, -2209, 2665, 3738, -7303, 2577, 7167, 8323, -1479, -5664, 3748, 2466, -1914, -2043, -8785, -669, -7318, 1554, -6860, -4565, 4850, 4946, 1935, -687, 6442, 2845, -7631, -2376, 2250, -3925, 988, 6439, 2107, -1795, -1606, 831, -1731, 2121, 2264, 1971, 1214, 6881, -504, 7331, 130, 2975, -2636, 5783, 4253, -2572, 2075, -2955, 7375, 5281, -1541, 6620, 1950, 13058, 1265, 4153, 8652, 4530, 4788, 3740, -5609, 2301, -8018, 8994, -2480, 6039, -2512, -329, -121, 4331, -7397, -8368, 8347, 2646, -1146, -1866, 1849, 3809, 1714, 1417, -958, 3176, 1973, -7495, 2006, -1481, -5642, 1705, -7447, -5532, 4742, 3059, -5298, 3670, -3272, 6447, -5088, 1630, -8644, 8894, -4116, -3838, -2062, 5510, -3621, 3371, -7013, -1444, -1829, 3922, -6574, -2248, 3653, -2118, 1713, -4333, -1932, -693, -3992, -190, -959, -6354, 7544, 282, 3894, 104, 2254, 462, 921, 4571, 2166, -3257, 1584, 2771, -871, 2590, 3369, 2897, -476, 5347, 4120, -1643, 2604, -1150, 1015, 4406, 2296, 4521, 574, -856, 6380, 2981, 5017, -286, 1725, 1342, -895, 1856, -1563, 425, -1694, 4667, 2918, 1860, -5359, 1607, -1500, -6286, 6614, -352, -6050, 145, -341, 215, 3402, 2695, -1060, -39, 816, -2299, 136, 2370, -7884, -1882, -2740, 7349, 3570, 6274, -3961, 3686, 6875, -4426, -2818, -415, -18, 5774, -885, 2106, 593, 6551, -546, 45, -6638, -7423, 256, 822, -3801, -1843, 11, -4873, 2767, -3612, 1888, 653, 2040, -4141, -2132, -1773, 9973, -172, 5130, -5672, -1428, 5815, -1194, 480, 797, -2665, -607, 1026, 3727, 4809, 4901, 6636, 3511, 3028, 1596, -5475, 2255, -496, 4017, 4457, 1658, 3455, 1879, -3351, 11584, 3392, 1463, 2461, -2195, 4606, -223, 2591, 1686, 2762, 2903, 2290, 1047, -907, 2318, 3580, -6808, -5725, 5074, 2188, -1699, -4110, 793, -1311, 1642, 6863, -1118, -616, 2375, -1801, -3521, -620, -3164, -5058, 2492, 4252, 3173, 4247, -1673, 2170, 5275, -380, -9539, -3702, 1914, 5359, -582, -5941, 7261, -1938, 361, -3344, -4661, -4498, -221, 3172, -1878, -3340, 6279, 763, 3864, 239, 1415, 5896, -3315, -775, -608, -9060, -3799, -1312, 5119, 5296, 1664, 213, -6320, 4016, 198, 5119, 747, 3138, 3364, 10581, -4118, 113, -3086, -1766, 449, -2811, -3209, -2872, -3557, 9623, -2008, 4564, 3253, 6497, -1628, 1314, 7853, 525, 6931, 5539, -1398, 3077, 2012, 12148, 5110, 2642, -3743, -4649, -4369, 6432, -4497, -8866, -514, 2506, -2748, -5901, 1623, 1276, 133, 6908, 1560, -34, 2359, -1363, -12213, 2727, -1123, 1393, -2238, -3288, -1320, 4646, -3509, 6020, 454, 1087, -3535, -6440, -6576, 8025, 3588, 6796, 3422, 10812, -2569, -3828, -9376, -1382, -4346, -1431, -2989, -5691, 672, -1244, 777, -3854, 2217, 2906, -4054, -3960, -3509, 124, 3293, 2316, 2582, -3842, -3837, 3801, -2274, -1382, 1122, -4264, -2680, 4139, -2100, 2576, -2431, 5151, -1880, 3786, 249, -2004, 558, -4234, 2755, 3196, 1638, 3045, 4507, 688, 3690, -2514, 3197, 6813, -2904, 8653, -3289, 3255, -3856, 3895, 876, 2606, 4499, -1619, -871, -1187, -3709, -7240, 3802, -2731, -1762, -571, -2182, 1111, 3110, 2125, -5146, 2371, 2979, -2630, 1207, -1397, -3517, -1556, -573, -1896, 4002, 4335, -2630, 3949, 490, 847, -6708, -2438, 3880, 5530, -1301, 69, 3322, 75, -2933, 1257, -8387, -5625, 3219, 1114, -6461, -3601, 6484, -2469, 5072, -2863, -6081, 1823, -3726, 2699, 3877, -3194, 5401, 2453, 6595, -801, -340, 2058, -4559, -2302, 3462, 82, -89, 8240, 4778, 4868, -2973, 4070, 2702, 2268, -886, -1628, -197, -4888, 3161, 5809, -3943, 3000, 3234, 4278, 2811, -733, 4776, 1104, 3957, 7222, 580, 1731, -242, 6139, 2366, 2689, -2618, -4197, 1604, 2639, -3598, -7157, 1283, 7061, -481, -3032, 5578, 4653, -1168, 2043, -3536, -1722, 3791, -1071, -5522, -905, -1151, 95, -279, -1494, -704, 4307, -7088, 4165, -2746, -2512, -2469, 133, -1544, 3453, -915, -735, 2447, 5282, -1929, -1170, -1712, -1033, -4390, 373, -5968, -5175, 115, -2490, 6504, -4047, 2405, 2222, -6788, 1348, 1087, -579, 5348, 1882, 4310, -2365, -3137, 386, -1457, 3495, 1599, -2864, -642, 3327, -1897, 4179, 1363, 7963, 923, 3411, 474, -2703, -650, 682, 4887, -515, 144, 5876, 3824, 238, 2834, 4401, 7180, 3511, -479, 5157, -3108, -902, -6135, -1020, -693, 4327, 4864, 1611, -3356, -489, -5022, -6314, 3172, -1587, 875, -2943, 2570, -1393, 3152, 2519, -7018, 2901, 2857, -6196, 3845, -2400, -2284, -4214, -3047, -2271, 86, 4304, -495, -14, 2582, 1207, -4531, 468, -1038, 5629, 1739, 305, 2541, 205, -784, -2003, -3950, -3737, 384, 184, -5071, -3786, 715, -1674, 4302, -1087, -24, 4842, -9468, 4993, 617, 1903, 10800, 2807, 910, -3930, -821, 1765, -3304, 2349, 964, 1127, -644, 4898, 4798, 7823, -1807, 7235, 2759, 850, 930, -482, 3382, -2816, 5411, 4015, -2803, 5228, 6035, -1988, 2378, 2768, 7211, 1743, -889, 8706, -1302, -429, -2558, 791, -260, 4838, 3873, -5357, 2928, 2689, -3191, -4810, 2757, -864, -3046, -1717, -885, 5042, 2139, 7591, -2236, 1138, -218, -5494, 5131, 1617, -1030, -4081, -2017, -2027, 4165, 4683, -2838, -2079, 2446, -3307, -6378, -2172, -4006, 6670, -5737, -9836, 1022, 4586, 2532, 195, -6679, -58, 663, 1472, -7337, -2965, 2042, -4381, 7015, 458, -2181, 6957, -12274, 7529, -4455, 140, 6960, -434, 986, 4839, -861, 4223, -6851, 1151, -1773, 3868, -4513, 3146, 3022, 5720, 2379, 5205, -803, -701, -2819, 190, -599, -2349, 1764, 7934, -5906, 5259, 1987, -844, 1302, 4573, 3547, 5143, 4029, 6269, -3003, 4213, 2773, 4670, 1314, 1415, 3362, -10130, 3054, 4742, -1471, -2982, -1383, -3425, -4646, -476, 6712, 4000, -1527, 6432, -6774, -889, 3780, -5009, -477, 3057, -198, -59, -2622, -1913, -2832, 399, -1814, 1294, 1641, -1941, -2361, -4541, -4912, 1726, -7024, -11926, -2380, 3878, 162, -1347, 405, 80, -1481, 261, -5861, -2448, 4473, -2782, 5478, -1997, -1667, 3237, -6010, 2259, 2781, -4058, 8839, 2559, 5436, -2813, -3972, -180, -4115, 2495, 1824, -873, -1100, 5369, 701, 3925, -2619, 4183, 4016, 1460, 760, -3652, 2835, -2553, 5811, 7558, -1559, 7714, 4043, 2356, 6336, 1700, 6916, 5456, 1212, 9716, -3252, 5614, -1720, 2159, 2748, 1417, 318, 1887, -3072, 5269, -172, -6004, 4029, 800, 565, 754, 6132, -2870, 2634, 2185, -3857, -108, 4609, -3781, -5437, 3174, -6247, -3200, 296, 1517, 4530, 4034, 1695, -457, 987, -1865, -2141, -3959, -7704, 7302, -939, 751, 2958, 5218, 342, -847, -3871, -426, -1980, 2691, -5358, -1572, 2735, -4438, 3331, -2635, -3763, 1395, -5224, -2591, -784, -2379, 3884, 274, 2032, -2430, 1550, -1633, -4594, 6079, -1377, -1835, -1925, 3436, -548, 6142, -959, 8448, 2444, 5070, 1366, -4345, 334, -2836, -43, 8696, 175, 2799, 3518, 2805, 2120, 2905, 5212, 2551, 1098, 6076, 953, 3867, -2384, 77, 4189, 4909, 1468, 119, -1674, 4658, 433, -3440, 4361, 1223, 261, 2509, -1236, 680, -1841, 1963, -3740, 5191, 3447, -1701, 3268, -748, -1910, -296, -4078, 1976, 2011, 7384, -3985, -539, -1349, -499, -7886, -4087, 2103, 6615, -4050, 1010, 55, 1242, -1717, -694, -8718, -3195, -29, 1221, -1934, -949, 2409, 1169, 6137, -3199, -2814, 4886, -9148, 6961, -7526, -4077, 2054, -565, 1315, 734, 1218, -2137, -7730, 3388, 69, -42, 6564, 388, 1295, 6384, -2691, 2278, -684, -1377, -1462, 1719, -2686, 305, -2902, 6374, -169, 3903, 3391, 4904, 947, -1053, 5454, 5976, 7673, 4386, -61, 4491, -2826, 2200, 1106, 3819, 2982, -3792, 1723, 3629, -3019, -2133, -2563, 92, -63, 136, 3914, 2209, 2801, -398, 1975, -1064, 1929, -2901, -4634, 6211, 127, -1485, -989, 2711, -2133, 1220, 1770, 2215, -58, -6733, -3475, -3704, -1507, 2788, -1581, -5498, 884, 6390, -4519, -1385, 455, -245, -1451, 1691, 312, -5280, 5384, -3507, 5138, -3825, -1267, -581, -2910, -7365, 5713, 2293, 9299, -1076, 6103, -6128, -361, 4441, -957, -227, -1979, -2672, 2167, 3563, 3124, 5299, -4345, 7313, -416, 2812, 5482, -5167, 1500, -1021, 1608, 1245, 1002, 2862, 3961, 3026, 2127, -3158, 4271, -1192, -1766, 5511, -660, -1102, 1483, -2776, 1241, 3168, 2200, 4878, -727, 3746, 1965, -5228, 3504, -1912, 270, -876, 763, -27, -860, 7748, -7880, 3489, 434, -2642, 1386, -1116, 356, 672, -1047, 4448, 3275, 6856, 1091, 803, -2771, -3654, -9205, 1991, 4473, 5740, -173, 24, 6898, -461, 1777, -4065, -8600, -2174, 2836, -1612, -5366, -642, 3152, -5574, 477, -4044, -4515, 1249, -10035, 1085, -1611, -3365, 3999, -1377, 2957, 2084, -1404, -154, -8342, 3202, 1910, 1251, 3971, -570, 404, 4336, 2325, 4410, -1625, 3250, 1771, 2102, -2275, -1262, -5103, 3807, -441, 1372, -2681, 5920, 3355, 472, 4671, -903, 7646, 1742, 4521, 649, -1103, 3859, -424, -240, -509, -5288, -3991, 2006, -1457, -5832, -2230, -1418, 1531, -1327, 2129, 4390, 2514, 1615, -2847, 1133, -1604, -3935, -735, -1308, 1323, 1188, -663, 3570, -334, -284, -2343, -1616, 511, -2985, -5551, 336, 542, 4487, -3597, -3655, 2630, 3731, 1300, -2336, -4638, 62, -1113, 1835, -2084, 572, 4890, -5636, 663, -1687, -5951, 640, -8518, 3245, -3952, 688, 5844, -3366, 3752, -816, 586, 2825, -2692, 2361, 835, 2077, 21, 3076, -1110, 6573, -274, 5252, 1188, 1348, 2590, -3463, 2186, -1134, -5481, 9039, -1459, 2103, -1846, 2044, 15, 4707, 3467, 6915, 5428, 2857, -2426, 5292, 3241, 2839, -4525, 5383, -492, -5278, 2239, 6651, -1720, -7454, -2394, 2416, -5144, 493, 4413, 2038, -665, 957, 29, 817, 171, -3014, -3996, -2606, 1539, 1189, 3081, 1407, -7736, 2625, 858, 1180, -65, -1751, -1312, 412, -400, 1880, -5201, -353, 5043, 5235, -1286, -2781, 126, -3253, -2112, -2730, -6590, -3077, 2407, -1622, 780, -2364, 203, -825, -6772, -3544, -1483, -928, 5358, 40, 332, 628, -1019, 493, -3442, 6181, 2379, -1352, -1495, 1152, -3837, 1586, 866, -481, 799, 3372, 1285, 1365, 501, -4721, -226, 3339, 2262, 1608, 2437, 2498, 3891, 5275, 5850, -4058, 2403, 4089, -324, 192, -8716, 1200, 2201, 3994, 942, -4548, -774, 200, -2211, -6809, 9563, -3188, 6578, 373, -1915, 4277, 4270, 1574, -3961, 3667, -1687, -5717, 6266, -6470, -2631, -1080, -7009, 173, 6619, 5412, -7385, -1131, -297, 6822, -8984, -1381, 1650, 7799, -3430, 326, 163, 220, 81, -750, -8762, -3608, -1644, 2179, -1227, -2962, 1213, 4140, 2057, 2117, -1414, 3715, -12761, 1330, -836, 9, 12326, -1767, 24, -3008, -830, 4176, -1190, 744, 573, 3236, 324, 8041, 7716, 6896, 5379, -188, -1127, 682, -418, 1882, 9961, -3881, 7414, 7408, -8316, 7590, 5530, 3267, 2565, 3412, 1924, -1581, 5142, 3508, -1321, 4185, -588, 3664, -1251, 8836, -1548, -3184, 695, 8029, -4776, -6578, -326, 1137, -5428, -4624, -2574, 8654, -518, 3841, -1430, 5569, -1451, -8506, -5415, 2875, -1713, 7102, -2952, -3262, -3639, 5369, -5488, -947, -965, -982, -348, -1931, -7322, 5069, -6019, -10436, -7421, 1919, -1503, 1354, -2106, -4169, -4097, -1579, -3909, -3767, 5058, -2860, 3509, -600, 2906, 3599, -6617, 169, -113, -2488, 8713, 1151, -1106, 2240, -2422, -2874, -4161, 3956, -1778, -2575, 3527, 2197, -1072, 7549, 691, 3051, -1118, -1521, 2199, 1845, 1241, -2304, 3175, 5879, -696, 4903, 2485, 235, -4419, 6497, 3944, -937, -618, 3776, 900, 3788, -5106, 2148, -339, 2067, 2231, -1854, 1661, 4200, -1661, -4178, 1445, -1565, 2085, 4941, 3694, 2530, 2556, 2813, -1533, -3352, 1814, -2113, -442, 930, -3599, 859, -5019, 3474, 2828, 1702, -246, 6816, -629, 3790, -5675, -5248, -2742, 6756, -1453, -5648, -294, 5703, -2016, -2881, -3064, -2179, 1266, -1173, 0, -2089, 618, -2394, 1386, 1640, 5818, -109, -4583, 2240, -3400, -2618, 1466, 4445, 7677, -3419, -4093, -1141, -584, 22, 2283, 2657, -1218, 7020, -501, 4996, -1340, 3459, -122, 2052, 1522, 479, 3729, -4416, 5376, 5616, -4128, 5127, 1998, -1699, 4198, 4220, 5909, -295, 2658, 4493, -1212, 779, -2440, -398, -7511, 7971, -1633, -816, 1656, 2544, -2552, -6181, 567, -1083, -5568, -2087, 1141, -3650, 542, 574, -1924, -153, -2841, -6159, -2151, 5133, -2156, -1419, -2499, 311, -1751, 6004, 4068, 895, -120, -3439, -1877, -3099, -4519, 2032, -3330, -5297, 530, 5637, -2467, -1715, 138, -5431, -4539, 1049, -6095, -2032, 3894, -2665, 2282, -5303, -1413, -697, -5511, 4851, 1955, -4085, 2563, 6487, 4173, -4101, -851, -3616, -8386, -811, 1789, 4778, -184, 1245, -431, 3267, -5557, 2516, -2385, 3031, 817, -1612, 486, -1209, -2989, 10078, 322, 4203, 2563, -429, 4096, 802, 7027, 6796, 4303, 5477, 1109, 2544, -1052, 9906, 3027, 3446, -3046, -9768, -3398, 4740, -2827, -6140, 498, 912, -2942, 2418, 2834, -2249, 3915, 739, -814, 1144, 2613, -6575, -5512, 3865, -3085, -1842, 885, -636, 2157, 6316, -1128, -400, -1131, -992, -5817, -4025, -5458, 6073, -957, 157, 4251, 2537, -340, -744, -3713, -864, -2624, 1441, -892, -5240, 3347, 5102, 4091, -1317, 1846, 7043, -8422, 3307, -1292, -4958, 6498, -909, 758, -317, -2983, -2599, -2793, 3598, 3062, 3536, 898, 6187, 2699, 8155, 32, 2702, -1810, 2768, -63, 4152, 2947, -2243, 3360, 8530, -776, 5073, 3748, 6016, 1674, 1910, 6218, -5429, 1126, 1108, 779, 4008, -2968, 3380, -3889, 4961, -4296, -6005, 449, 4123, -4419, -5502, 2950, 1214, -619, 2522, -3190, 227, 1078, 4783, -1344, 1824, 927, -6952, -2135, 4668, -2873, 3186, -6183, -295, -1620, 5977, -2936, 3330, 1783, -1094, -3626, -2736, -4403, 3939, -5910, -5137, 141, 8565, -2836, -986, -4774, -2916, 877, 1088, -3441, -2939, 2636, 1964, 5147, -5036, 2293, 4968, -7080, 3647, -3251, -991, 5396, 941, 1705, 1471, -2060, -861, -4254, -1724, 4389, 1568, 1762, 3335, 2864, 3530, -1393, 3327, -3172, -344, -4518, 4105, 3198, -3535, 2847, 5958, -5126, 6975, 4578, -151, 921, 4489, 6477, -1065, 4414, 3504, 530, 84, -1846, 4932, -4940, 3829, -59, -11197, 2116, 2279, -944, -6948, 4143, -1525, -862, -1465, 665, 9057, 3322, 5331, -3600, 2693, -375, -8878, -3737, 4565, -3118, 2615, -3797, -6734, -1965, 5465, -7317, 1103, 508, -1156, -2033, -4224, -1828, 4645, -3920, -4554, 170, 4576, -1058, 1824, -3414, 2015, 873, 354, -4364, -1551, 3357, 655, 2510, -892, -2505, 410, -11314, 2241, -4612, -262, 8962, -4201, 721, -3098, -1488, -220, 53, 0, 2092, 8737, -1996, 1811, 3431, 6719, 5081, 1533, -2849, 1136, -420, 8454, 6923, -2822, 521, 10538, -6565, 3569, 2029, 2390, 2484, 8542, 3619, -3506, 896, 2340, 5517, 403, -1403, 3904, 605, 1405, -102, -5628, 2090, 2496, -2068, -5752, 3725, 3084, -3754, 750, -4187, 4034, 94, 1422, -713, 3049, -3090, -8260, -313, 2613, -315, 1629, -2954, 558, -2594, 4358, -2406, -5664, 2991, 2974, -5937, -1160, -4536, 3753, -6705, -9431, -2004, -660, 35, 717, -508, -1685, 4292, 4147, 517, 1272, 6066, 6190, 4429, 2941, 2211, 395, -9054, 3010, -4840, 1056, 501, -5141, 10332, 4215, -2723, 1324, -3373, 2019, 2971, -1221, -79, 2127, 3276, 8803, 317, 4620, 482, -2077, -3065, 2421, 5252, -4504, -4016, 9584, -9804, 5384, 1820, 4466, -1859, 4782, 5511, 534, 6063, 3581, -3335, 6509, -1928, 5604, -4855, 3183, 1089, -8209, 6154, 7535, -5997, -8092, 4373, 804, -4313, -6472, -1859, 10973, -4224, 8469, 3545, 5379, -2156, -3041, -6366, -1805, -708, 4442, -673, -5508, -8299, 3506, -6473, 3174, -609, -2655, 1547, -4967, -924, 4425, -1449, -6294, 2601, 6369, -1648, 888, -5632, 1773, -3094, 2882, -2373, 259, 5797, 2901, 5233, -1256, -5805, -1425, -4351, 2194, -7751, -3064, 5830, -4529, 6321, -886, -172, -1719, -7165, 1500, -507, -1831, 1744, 4993, 4645, 6932, -1806, 4252, 2896, 2797, -3383, -2350, 1484, -3403, 670, 9539, -3522, 3465, 1939, 766, 2543, 1780, 5913, 5358, 1901, 5148, -1890, 2176, -2128, 3446, -2035, 4266, 7536, -1042, -3678, 8411, -5183, -5466, 1460, 198, -2528, -3717, -1112, 1761, -1874, 1012, 1342, 5691, -283, -1871, 218, 5770, -995, -2971, -2494, 1365, -2210, 4983, 1310, 1581, 1532, -2059, -3672, -4337, -1483, 6319, 1064, -2611, -1118, 1631, -2746, -2236, -5280, -3955, 4607, 4343, -1052, -2059, 8744, -295, 10129, -1721, -2402, 3476, -3894, 2062, -5209, 355, 2580, -361, 6079, 7308, 7228, 3959, -8517, 1685, 4383, 987, 76, 1480, 7232, 6307, 6217, 3579, 460, 646, -514, -2691, 4826, -78, 4446, 8799, -8093, 2290, 1782, 3278, 5743, 7115, 1757, 9, 2641, -81, 2729, 6345, 3605, 3533, -8982, 644, -3557, -5790, 66, 10135, 1686, 178, -3538, 5342, -3742, -2707, 1550, 7411, -2011, 2751, -320, 4530, -246, -5272, -9606, 1697, 3451, 5611, -1386, -680, -3290, 1461, -2038, 1294, 159, 7651, -1660, -980, -5521, 7408, -6109, 4529, 196, 6615, -4167, -848, -5677, -1831, 1723, 4382, -934, -1637, 4628, 1344, 2463, 189, -2355, 2024, -6608, 1451, -2867, -1325, 8977, -636, 2230, -778, 999, -2096, -6920, -336, 3425, 201, 2345, 5310, 1127, 5925, -1397, -3413, -103, 829, 1148, 1051, 4328, -2733, 1887, 6477, -2430, 5954, 1953, -435, 963, 3690, 6688, 827, 6448, 2890, 145, 2259, -3301, 5430, -3880, 2533, 308, -8057, -365, 2728, -3720, -5793, -237, -579, -5895, -1475, -444, 2936, 1513, -193, 471, 5118, -2583, -8824, -6804, 938, 1161, -9, -1086, -815, -3885, 4196, -628, 2717, -140, 1899, -3856, -2862, -3601, 4192, -703, -1993, -279, 7516, -5201, -2819, 196, 207, -1718, -719, -6181, -9996, 3057, -1873, 8093, -334, 4879, 4377, -3823, -1058, -1237, -9797, -265, -322, 3655, -4392, -824, 4213, -7248, 191, -4653, 2183, 1778, 1009, 4136, 12387, -328, 7618, -2515, 2695, 5719, -3700, -2234, 1025, -1306, 3696, -1315, 5834, 3855, 6360, 4541, -1534, 7797, 4113, 893, 4821, 3301, 2161, -3820, -156, 1396, 1746, 2129, 2654, -295, 9717, -3845, -2536, -4625, -41, -3914, -6783, -344, 1305, -1923, 10360, -1211, -304, 3383, -2038, 1818, 556, -1911, -2912, -3247, 6282, -1095, 3584, 2389, 2168, 2272, 490, -9757, -5870, 2809, 5873, 3015, -2085, 3106, 10309, 1457, -2902, -8160, -3622, 2057, -4733, -5284, 302, 427, -7677, 5694, -4153, -1293, 2464, -7611, -595, -1779, -4691, 8041, -1567, 2066, -5017, -2419, -3255, -11179, 1779, -1545, -683, -1763, -1220, -1003, 6305, 167, 5898, 4090, 233, 4123, -3275, -6293, -470, 908, 7453, 536, 4485, 3521, 1567, 4606, -1973, 3486, 1659, 4556, 2988, -410, 3921, -5116, 3722, 3777, 2201, -477, 152, -1068, 5094, 2632, -1822, -2599, -1106, -4164, 3021, -2231, 34, -1185, 5232, -314, -1203, -1948, -4261, -2056, 3406, -2653, -2236, 48, 1831, 701, 2407, 3875, -2476, 2364, -651, -7287, -2016, 305, 4866, -4219, -4703, 1086, 6062, -3576, -5251, -6921, -3767, 1509, -1383, -4180, -4862, 5058, -3344, 5186, -6089, -2332, 2049, -1977, -2388, 3552, -2230, 4672, -3172, 3841, -2689, -1349, 5511, -4630, 2506, 3715, -1476, 172, 3933, 1960, 7400, 236, 3586, 4073, 1096, 2432, 2291, -1326, -2833, 1509, 8366, -6357, 3064, 3929, 2102, 3984, 1816, 277, -603, 3150, 3597, -1417, 6533, -947, -60, 3366, 4448, -863, -1779, 2606, 9501, -739, -6451, 3209, 5579, 3362, -3281, 1789, 4441, -1109, 5779, -719, 6510, -597, -831, -3573, -3725, 97, 38, 1321, 2902, -4909, 3076, -4719, -576, -1797, 5723, -8008, -817, 2904, 6147, -5546, 443, 2346, 869, -1516, -3938, -5850, -821, 705, 2067, -2703, 278, 8549, -4486, 4272, -2653, -3460, 3065, -6742, 1300, -2001, -2754, 6355, -1309, 10454, 1850, -957, 1492, -4845, 660, 139, 234, 1901, 4557, 6151, 9333, 2887, 5092, -1028, 1980, -917, 1397, 4311, -2699, 4041, 7156, -6295, 5187, 1354, 1754, 187, 5016, 6418, -393, 6400, 1673, -40, 5498, -1269, 4772, -4062, 2759, -1174, -7072, -246, 6238, -5283, -8115, 966, 5648, -3027, -4246, 2633, 922, -1886, 3454, -2301, 4510, -2484, -3427, -4562, 3182, 199, 1574, -202, 229, -2729, 4826, -2905, 2982, 2256, 2420, -2889, -3112, -982, 5853, 879, -1164, 1209, 5123, -2835, -2898, -4519, 168, -434, 2099, -3363, -1464, 3873, -4690, 1817, -3067, -1312, 1409, -11881, 3056, -2588, -577, 7591, 1720, 3562, -1156, 716, -1365, -5545, 2016, 249, -1193, 1140, 3354, -956, 5334, -4451, 3298, -228, 57, 301, -2795, -494, -1457, 1267, 7602, -2725, 2985, 5685, -1452, 2960, 1038, 3888, 5690, 1363, 6212, -1340, 2252, 1639, -25, 346, 3368, 3387, 1331, -1152, 5049, -1160, -5582, 2473, -5729, -3910, -2103, 928, 2859, 1186, 2906, -2635, -1114, -369, -5632, -4414, 3421, -1177, -2218, -602, 315, 1603, 3356, 739, -469, -630, -1099, -5950, -379, -6128, 4561, 1133, -2816, 585, 5216, -125, -2948, -5339, -2393, 1196, 2709, -2408, -4363, 3827, -1680, 3329, -583, 168, 3711, -5535, 124, 1286, -2493, 7301, -5416, 6213, -2236, -1106, 605, -4587, 105, -146, -1480, 3360, 1960, -1546, 5045, -5051, 3179, 1925, -355, 572, -571, 948, -354, -546, 3921, -516, 3282, 2337, 5387, 4198, 2450, 6497, 1348, 5426, 3305, -772, 1777, -2735, -2345, 1310, 3755, 1129, -5382, 575, 4603, 965, -4282, 4503, 508, -2306, 627, 928, 1309, 1036, 5999, -5155, 3098, -1779, -5604, -1828, 2227, -3467, -1384, 1957, 3611, 866, 3312, 2514, -1258, 779, -7088, -6090, -2511, 1693, 3078, -3529, -4878, 3232, 6129, 1810, -2094, -5737, 282, 1682, 4128, -4214, -1916, 7328, 1923, 1180, -4298, -5039, 2229, -6083, 2818, 926, -2354, 5892, -6377, 11463, 1199, 175, 2769, -4100, 5424, 1643, -4694, 7072, 3155, -1607, 4287, 4041, 5951, -168, 2793, 3, 2768, 4289, -2448, 5834, 3557, -3234, 5539, 1691, 805, 1642, 1666, 4694, 602, 4673, 1265, -2034, 1629, -1076, 624, -1291, 6277, -1038, -3326, -2547, 4671, -2854, -7302, 8564, 2851, -6468, 949, 1401, 5927, 187, 3566, -133, 4815, -851, -6384, -674, 1015, -5416, 1620, -5769, 5961, -189, 4045, -3094, 1015, 496, 180, -2390, -3914, -1164, 8340, -891, -2598, 387, 8068, -24, 1868, -6967, 1530, -3176, 1569, -4503, -2602, 630, -2310, 3225, -3177, -1967, 1999, -4727, 548, 178, -2730, 4233, 3618, 2066, -4580, -2535, 4322, -4496, 1751, 1690, -155, -6207, 4780, 115, 8829, 2057, 4977, 2257, 3875, 441, -4701, 607, -4622, 6200, 5534, -1445, 3736, 4497, 4764, 3856, -72, 5066, 5830, -1478, 2909, -3029, 3162, -6387, -176, -2349, 3706, 2328, 1872, -1264, 6907, -3087, -3874, 2030, 3646, 783, -2179, -4274, -2004, -2214, 538, -1932, 2883, 1068, -3447, 1974, -2697, -2878, -2737, -1588, -1244, -336, 5511, -450, 2129, 3309, 1945, -8389, -335, -2008, 2664, -2992, 2814, -1759, 2068, -2221, -1327, -4994, -3360, -2970, -1132, -2079, 448, -822, 173, 39, -1529, -2624, 2753, -6275, -3441, 2047, -5039, 5411, -4932, 1456, -2646, -189, 3766, -1317, 4596, -3454, -4736, 2659, 2791, -616, 4773, 1628, -314, -911, 1184, -1983, 595, -2607, -3813, 481, -1123, 1562, 1872, 2867, -2480, -2431, -3510, 1887, 5158, -1259, 9034, -2110, -3062, -1966, 50, 6744, 5307, 4794, -1280, -2176, 3740, -1003, -4546, 5882, 5175, -566, 82, 1039, 2297, 5087, -2650, -2278, -3998, 1366, -3, -2758, -453, -1893, -2360, -2140, 1698, 2765, -78, -3743, 781, 2088, -5180, -5596, -2006, 3506, 5999, -558, -2478, -2667, -3149, 1687, -503, -3721, -1960, -4383, -1582, -2217, -3272, 3108, 1869, -443, 612, 2349, 2895, -3044, 4952, -3362, -6404, 4930, -2257, -2612, -2364, -842, -4851, -3547, 443, 3088, 3526, -2187, 4855, -5667, 5224, -2678, 1728, -6012, 827, -1157, 3018, 2073, -1646, 4600, 7175, 3083, 3436, 5314, 9586, -3185, 307, 6523, 2546, 1538, 8254, -1239, -4027, -8734, 7327, 1250, 6501, -4359, -3992, 41, 5198, -3500, -4235, -405, -663, -1346, 1758, 1159, 539, 2567, 3080, -1031, -4508, 38, -6289, -7684, 2499, -1942, 1756, -3706, -1896, 3344, 6396, 1695, 2191, 1290, -1932, -2753, -3758, -2413, 4550, -2042, -6208, 897, 5774, -1720, 1717, -4890, -3293, 4303, 2576, -2120, 4393, 949, -2188, 4054, -6962, -2423, -1555, -2920, -95, -93, 1986, 614, -589, 7518, 1778, 2717, 1231, -3483, 2459, 1380, -916, 1012, 210, 1724, 2474, 968, 2384, 7865, 852, -2157, -3332, -358, -3813, 997, 3310, -2532, 2881, 542, -1872, 7910, 2545, 2776, 197, 3103, 3677, 2691, 1014, 820, -2772, -900, 3652, 2936, -978, -713, 4401, -950, -2527, 5079, 256, 857, -3983, -924, 3448, -1806, 1022, -1379, 2239, -1827, -2672, -3495, 1395, -3437, -3533, 895, 2549, 170, 2103, -1864, -1413, 1706, -641, -7449, -1025, -1818, 4427, 283, 2379, 2915, 2897, -1837, -830, -4016, 665, -7101, 4327, 85, -5691, 2931, 5849, 32, 1280, 1582, 7116, -5294, 1133, -3273, -7605, 5465, -4874, 418, 98, -953, 3453, -2038, 3322, -2425, -3149, -475, 4278, -1175, 9585, -1578, -214, -873, 3644, -3395, 671, 2890, -2072, -546, 2435, 318, 4744, 6228, 1880, -936, 1628, 6470, 981, -2353, 7567, -4867, 2392, -4731, 2902, -2445, 3135, 3118, -6431, -2639, 7595, -5726, -4830, 2405, 492, -5313, -279, -3338, 5076, 3224, 4251, -29, -1087, 779, -4590, -3663, -1235, -1399, -1237, -2570, 948, 1298, 4846, -2204, 2421, 1537, -3640, -6650, -5424, 2191, 7633, -2097, -3264, -1850, 4740, 2082, 79, -5274, -4127, -5509, -1231, -6442, -2517, 7007, -722, 3220, 222, -1417, 3174, -4871, 6748, -6104, -4100, 7105, 654, 2815, -4921, -1997, -2907, -3284, 2044, 3899, 5359, -1398, 4755, -2936, 7550, 2707, 859, -445, -480, 1107, -870, 2756, -1319, 3571, 10835, -5805, 5062, 3234, 977, 2733, 3357, 4947, 6482, 2451, 2104, -2944, 3641, -1713, 4702, -644, 6722, -2508, -6379, 2607, 6889, -5896, -6403, 5559, 5250, -945, -1871, -133, 2286, 3592, -1215, 2680, -533, 624, -5120, -4022, -464, -2679, -1434, -85, -66, -2183, 6437, -2355, 3121, 2903, 1769, -6714, -5809, -4316, 3825, -1454, -1922, 236, 775, -864, -774, 1068, -2783, -4627, 2617, -9673, -4938, 6291, -2807, 3605, -2442, 292, -1551, -2732, 164, -3528, -7172, 4848, 1072, -1133, -4429, -1150, -3193, -7225, 2209, 1588, -491, 2370, 2359, -7071, 2984, 1942, 2218, -1388, 993, 4849, -1829, -6797, -3468, -5740, 11379, 2125, 51, -700, 3657, -3005, 241, 7756, 5729, 3245, 7057, -2871, -1749, -3157, 9470, 4109, 2420, -164, 2286, -1407, -437, -4030, -6427, 4350, 2191, -413, 6018, 1859, 1748, 2232, -2455, -3083, -1942, 2187, -923, -197, -1940, -2802, 747, -2765, 2151, 2983, 1613, 1542, 2527, -2238, 4359, -8430, -5361, 944, 6408, -866, -847, 2397, 4717, -1516, 780, 43, -3152, -5115, 722, -10470, -2309, 11056, -6136, 2009, -3045, -7585, 4450, -4513, 4561, 963, -6930, 9777, 1, 2248, -5258, 1734, -1994, -4103, 855, 317, 3643, 218, 3418, -6203, 2960, -369, 5, -1814, 1830, 4054, -1357, -5256, 732, -9724, 5313, 1653, -1037, -166, -2512, 4427, 1077, 4935, 9437, 3543, 10427, -2562, -3733, -732, 8476, 5281, 5238, -590, -3737, 101, 2218, -5106, -6802, 2871, 5862, -3440, 4508, 6321, -1899, 7539, -825, -1841, -5900, 3568, -935, -797, -1453, -2712, -5685, -234, 5012, 8545, 2603, -1893, 4097, 3707, 777, -6076, -5623, 5857, 6038, 605, 1739, 3946, -1313, 1886, -2812, -514, -6014, -2788, -306, -5180, -4127, 3985, 2506, 2169, 2838, -3799, 6305, -6191, 2395, 4440, -3080, 7600, 2393, 6496, -1809, -327, -1985, -6168, -2378, 625, -2499, -2955, 5853, -2880, 6171, -898, 2773, -1785, 4547, -1304, -390, -57, -3012, 2208, 4307, -558, 2675, 3873, 4432, 300, -206, 6715, 7280, -1754, 11595, -1554, 2077, -3208, 5162, 3301, 3395, -141, -5046, 1576, 1673, -7363, -4642, 2494, 3593, -492, 737, 982, -4692, 4230, 454, -4397, -1799, 4090, -8492, 3653, 1112, -3575, -2973, 579, -2488, 4831, 7401, -279, 2179, -1016, 957, -3714, -1715, -5223, 5393, -856, 971, 3445, 650, -1778, -856, -3850, -5260, -4822, -260, -3307, -2220, -462, -4049, -1609, -3022, 6448, 5320, -6511, -990, 2001, 897, 3240, 7514, 6149, -3786, -7790, 1205, 454, 5115, 2398, -5290, -2744, -228, -348, 7142, -5423, 9459, -718, 6686, 1609, -169, -718, -1838, 7659, 2891, 1676, 6456, 6918, 4986, 4564, 6541, 4874, 3757, -1204, 3535, 2228, 5274, -5973, -3963, -4460, 5138, 2434, 974, -488, 4305, -3195, -7267, 2314, -3065, 2622, 2976, -26, -2054, 3354, 8657, -3235, 1970, 5830, -8613, 7800, -1548, -6718, 1738, -523, -527, 2434, 10303, 795, 4885, -578, -1282, -3599, -710, -3182, 6621, 637, 420, 2423, 1537, -467, 750, -8928, -5500, -5561, -966, -609, -3656, 1516, 3132, 3234, 1092, 831, -92, -4757, 383, -4749, -628, 193, -176, 5576, -2447, -2138, 3329, -5896, 2493, 2801, -3759, -3488, 4713, 3437, 10793, -1526, 1862, -3487, 3539, -1530, 1053, 2519, -1106, 7823, 8747, -1893, 5146, 896, 5533, 526, 3525, 6435, 4949, 1055, 1570, -5465, 3506, -6529, 5604, -6301, 5364, 5023, -7737, -1461, 10751, -3808, -5069, -184, 84, -1457, -4095, 542, -1642, -722, 1304, -4896, 9108, 281, -5758, -2402, 450, -1704, 1328, -1159, -2514, -3687, 3534, 1503, 4027, -2346, -1074, -3411, 769, -7537, 4332, 1167, -4831, -1939, 646, -4158, 595, -7329, -665, -1174, 1533, -7926, -2034, 3284, -2581, 3572, -3373, -1773, 29, -105, -3586, 1186, -2908, 1242, 2568, 5029, -70, -2214, -3641, -7346, -523, 3606, -6324, -246, 1971, -6467, 731, 391, 10302, 4479, 4723, -986, -5278, -4393, -2773, 1842, 1574, -538, 4151, 78, -364, 1185, -1487, 5552, 4385, -1354, 5697, -2296, -1432, -1072, 2985, 671, 4283, 1459, 6546, -3059, 1121, -3649, -5457, 5063, -949, 1190, 2508, 3703, -289, 2131, -1766, -6756, -943, 1853, -4530, -585, -559, -4207, -1694, -2103, 773, 2442, 3545, 513, 2479, -1561, 1693, -4753, -5184, 3494, 6722, -88, -926, 2587, 412, -2289, -1318, -3717, -2370, 1602, -496, -5567, -2045, 171, -297, 2437, -2793, -5756, 3501, -3452, 369, 1641, -1028, 14871, -5381, -2641, 44, 2143, 2071, -5025, 501, 3020, -1522, -829, 5201, 319, 3999, 2510, 2571, 5408, 2382, -2625, 4073, 286, -3674, -2267, 7604, -1013, 2541, 4911, -6946, 2744, -585, 2494, -3539, 1611, 3609, -642, -2541, -1566, 1052, 4625, 4321, -693, -4670, 1032, 1062, 1101, -3935, 4869, 174, -3713, 3814, -4659, 4445, 2228, 3213, -1326, 3043, -2343, -2005, -1140, 185, -1485, 1454, -3174, 3599, 1179, 2451, -3068, -1700, 2153, 2037, -6676, -3503, 5943, 6765, -6364, -6053, -1217, 1767, 314, 594, -2539, -2267, -110, 457, -1957, -5132, 782, -1928, 6408, -1110, -3389, 3948, -5671, -2770, 3281, -4171, 7872, -4730, 6830, -6451, -1676, 4219, -2260, 3246, -1055, -3744, 4556, 2708, 3969, 7234, -794, 5807, -430, -984, 3708, -1936, 1430, 1936, 2548, 3001, 2471, 3506, 1645, 3231, 3687, 2226, 3344, 3755, -121, 5238, -4203, 8013, -3751, -2154, 6610, 3979, 5503, 1975, -2624, 6334, -2610, -6643, 7748, 2136, -2463, 200, 3737, -357, 1353, 5607, -6862, 3394, -342, 1883, 3207, 751, -1950, -4394, 3912, 3776, 971, 3549, -43, 78, 1498, -5344, -8151, 1275, 207, 5482, -2897, -5921, 4428, 1432, 4048, -2640, -8972, -2813, 146, -1482, -5270, -331, 7527, -4730, 722, -4455, -780, -159, -9737, 168, -295, -481, 2873, -2473, 5150, -22, 2027, 2727, -5530, 2022, 2462, -1826, 4758, 3766, -1779, 1782, 2837, 4380, -2783, -241, -929, -1715, 299, 361, 1758, 1198, -3787, 2517, -1705, 4346, 900, 1090, 3180, 6345, 2401, 4399, -1961, -613, -1436, 1291, -1929, 3377, 2763, -4110, 380, 2136, -1810, -1204, 4035, 1524, 3238, -3959, 5856, 6978, 253, 1074, -6811, 2830, -1324, -6215, 1298, -3152, 824, 1640, -2579, -3988, 5668, -2686, -3700, 1078, -820, 205, -5234, -228, -3283, 5265, -3433, -1589, 1599, 764, 1559, 2474, -7630, 1143, -358, 1173, -8023, -6116, 5263, -677, 1752, -1763, -5093, 5362, -14258, -77, 6680, -1563, 10433, -6637, 872, -433, -5256, 5678, -2555, 6014, 892, -3532, -14, 2905, 2051, 5661, 617, 3001, 187, -2148, -645, -1098, 5252, -79, 617, 688, -2661, 5535, 1646, 5786, 3392, 2305, -2528, 7768, 4025, 6509, -8377, 1799, 2194, -443, 6921, 2990, 4834, 239, -3342, 11539, -925, -6704, 2238, 3641, 1763, -4565, 8033, 4607, 1522, 5501, -3500, 1480, 2981, -6496, 737, -3464, -3463, 6881, 3800, 225, 1091, -324, -1564, 5267, -1447, -1460, -4022, 697, -1984, 3121, -1651, -3332, -1807, -2414, 4428, -1143, -8261, -78, -1260, 1094, -3436, -2638, 1018, -208, 1597, -1829, 2265, 3495, -13443, 1066, -1171, -5856, 3810, 473, 6266, -1022, -3844, -2263, -2067, 1859, 1221, -1373, -1489, 6297, 2611, 6486, 2965, 1879, -5075, 3302, -2109, -584, 2868, -3454, 5275, 2912, -5258, 7625, 4105, 1305, 5796, 6295, 6746, 1150, 3238, 7845, 641, 3597, -3322, 1742, -2888, 4732, 3695, -3881, -5002, 8148, -2319, -8182, 5560, 2616, -2384, -3074, -1170, 6734, 792, 2791, -2112, 2688, 413, -5474, -267, 4277, -3145, 3026, -634, 2159, -1057, 5299, -5473, -2241, 821, 72, -1960, -331, -2936, 4456, -3076, -790, 1674, -414, 378, 2190, -7516, -895, 1062, 2797, -1947, 53, 2763, -15, -1613, -5436, 3360, 2265, -12186, -739, -2541, 3236, 288, 3601, 5302, 372, 6, 663, -3454, 2835, 4533, 1535, 202, 2272, 2327, 5597, 1352, 7826, -2540, 2525, 709, 1595, -890, -4445, 2850, 2179, -2515, 2769, 2013, 624, 1999, 1688, 3915, 225, 83, 3029, 1164, -1007, -1831, 1692, -3540, 7509, 2470, -2755, 3085, 1634, -2495, -7976, 3741, -607, 432, -101, -816, 4897, 1289, 4090, -1639, 2817, -354, -7139, 4910, -772, -3884, 1749, -2634, -1359, -1119, 4439, -4774, -378, -8, -392, -5053, -1391, -2555, 3754, -481, -1658, 4074, 3101, -4219, 63, -8614, -2561, -2352, -2496, -1231, -1124, -1799, 1340, 2277, -3393, -2260, 2179, -7295, 3013, 430, 3044, 9430, -1228, 2227, -3430, -849, 53, -6897, 1330, -2321, 2789, -1723, 4279, 2346, 7401, -4156, 4472, 1242, -794, 24, -761, 772, -3664, 2781, 6157, -705, 3471, 6207, 2832, 7409, 1454, 5578, 577, 393, 8167, 1900, 1729, 1149, 138, 1181, 2100, -2186, -7450, 5492, 1458, -1096, -2581, 2462, -1304, 4927, -1108, 1091, 1295, 1189, 9149, -5972, 629, 3333, -9071, -5058, 1420, 533, -2685, -2704, -2362, 4583, 2417, 780, -2858, -746, -2654, -7128, -4677, -7372, 4217, -3358, -3416, 4937, 3444, -352, -4670, -6220, 1949, 2705, 5159, -546, 748, 1357, -1047, 2693, -3889, -1689, 4817, -5442, 2170, -4373, -647, 3728, 2769, 1751, -611, -4307, -2297, -5002, 1090, 3597, -1602, 1273, 3412, -2644, 6746, -1566, 4505, 1302, 2083, 692, 620, 337, -3857, 647, 3727, 197, 4088, 3473, 1005, 3697, 939, 5791, 1234, -1764, 6385, 1048, -1709, -4374, 23, -568, 3606, 5114, 5827, -2541, 95, -5728, -5204, 3392, 453, 2308, 740, -1766, -2035, 3297, 315, -325, -868, 254, -1997, -3406, 1582, -622, -3976, -1196, 2562, 2582, 4649, 4100, 1156, 2274, -3868, -6495, -2700, -2609, 4589, 472, -1992, 1216, 2129, -1113, -2739, -4203, -3195, -737, 422, -5976, -3369, 3256, -4890, -1428, -248, -320, 3383, -4135, 1781, 433, -4675, 10355, -2982, 4818, -3529, -4758, -1736, -3321, 2181, -1861, -2598, -1804, 1089, -2363, 6468, -2571, 3574, 1207, 3014, -1794, 1381, 1151, -3666, 1859, 2504, -216, 6044, 2798, 325, -1569, 4034, 5870, 982, -934, 8308, 889, -1827, -5971, 622, 3930, 3565, 6665, -3378, -2456, -649, -5995, -4575, 5006, 1374, -4413, 1205, -993, -5506, 1691, 4404, -5104, -622, -1788, -6044, 4805, 2158, -304, -940, -491, -52, 1080, 4845, 836, 133, 4260, -7000, -5491, -4938, 3025, 3227, -1233, -1703, 3754, 3307, -446, -2625, -6048, -2831, -746, 84, -5095, -4677, 2026, -2461, 1820, -3844, -1731, 619, -3487, 1170, -190, 539, 1938, 1126, 7614, -2626, -1396, 4875, -3333, 2752, -549, -7110, 1310, 170, 3563, 3927, -2191, 2886, 6079, 4356, 855, -1015, 1421, -1458, 4584, -1167, -439, 4421, 5593, 1679, 1515, 6043, 5089, -501, -195, 4218, -498, 2444, -4293, -5419, 242, 5402, 5684, 2142, -3015, 4113, -1326, -5325, 7531, 357, -2583, 2560, -592, 1070, 455, 4090, -5677, 255, -1766, -3343, 4452, -1768, -2550, -1982, -2306, 3994, 6353, 3902, 29, -1558, -405, -2976, -8949, -862, 4177, 8256, -21, -1386, 4149, 1760, 2099, -945, -8937, -2667, -754, 1963, -2903, 2671, 2846, 283, 686, -2623, -4250, 1687, -2594, -1089, -2321, -4027, 4826, 973, 2877, -2315, -2674, -2334, -2119, 445, 1642, -4512, -187, 2796, -620, 2750, 95, 7429, 1138, 4687, -2460, -807, -3471, -2426, -2330, 4167, 537, 2244, 2890, 305, -243, -1367, 3354, 5367, -467, 5263, -3371, 831, -1234, 1755, 2285, 1924, 1552, -1601, -1384, -950, -7289, -4907, 4699, -227, -2494, 767, 1571, 672, 4372, -2721, -3007, -1034, 2931, -2640, -1685, -1848, -2619, -3547, 1435, -3744, 1986, 5040, -1914, 2229, 1440, -4669, -1874, -1898, 5017, 4346, -115, -5818, 135, -3553, 153, -722, -5258, -4272, -2431, 1677, -2275, -6999, 2902, 1520, 2885, -2567, -484, 6644, -9480, 464, 2493, -301, 4361, -3687, 4602, -883, 1062, 4099, -4579, 4439, 3185, 2030, -2679, 6235, 3459, 8295, -3935, 3371, 2239, 823, -2994, 1171, -2729, -4648, 3037, 3460, -1389, 2814, 3149, 2014, 742, 1227, 4860, -3643, -152, 8729, -2099, -2397, -1895, 1356, -1187, 6682, -2103, -7627, 3248, 3922, -1720, -5159, 3007, 2086, 2408, -1602, -219, 4603, 1104, 4814, -2953, 4665, -206, -7175, -1098, -1976, -1565, 3533, -945, -1372, -1546, 5233, -5801, -386, -2983, -3836, -6428, -1831, -4512, 7430, -2529, 237, 4435, 3213, -305, -769, -3578, 716, -3386, 1656, -1302, -4016, 3788, -1101, 1324, 632, 425, 3391, -9336, 865, -3384, -3378, 8631, -4071, 2026, -1035, -3573, -2859, -664, 4299, 974, 1756, -2654, 7156, -839, 6780, 2050, 3090, -3986, -209, -1651, -1688, -1188, -878, 761, 6959, -1389, 5784, 2080, 4515, 8623, 7427, 6619, 625, 3038, 5895, -1452, -33, -353, 1389, -5023, 3166, 1235, -6322, -2352, 388, -3556, -6745, 5852, -2719, -5746, -984, -3095, 3798, -619, 5948, -10480, 5998, 1051, -8788, 382, -358, -2481, 2270, -1046, -4314, -584, 4563, -2632, 682, 141, -3454, -5667, -6018, -628, 4395, -2210, -4510, 4135, 354, 571, 600, -6888, -78, -2131, 1062, -3375, -1189, 975, -351, 8933, 632, 2467, 391, -4455, 2347, -5654, -6478, 4830, -275, 6485, -4411, -4070, -1568, -1876, 4829, -544, 264, -1485, 2242, -563, 9052, -295, 4522, -1537, 84, 416, -2773, 1534, -2933, 2823, 6600, -4099, 9103, 4714, 2201, 3833, 4607, 6162, 3549, -1723, 9729, 1885, 3910, -5510, -2196, 85, 1341, 5111, 2569, -2493, 3497, -3560, -3423, 2014, -4000, -3844, -1979, 1549, -4228, 188, 5177, -2495, -1825, 1527, -5649, -1750, 6047, 399, -5280, -2919, -410, 995, 5725, 3949, -1142, 1699, -1912, -6450, -6747, -7614, 2617, 1003, -2717, -145, -1173, -141, -5148, -5740, -4835, -206, 2148, -4763, 530, 5542, -1675, -1121, -2236, -2737, 3598, 42, 9345, -4319, -5393, 8897, -4466, 102, 905, 714, -3618, -8505, 2382, 879, 1065, -815, 4811, -6114, 4772, -1467, -651, -1143, 380, -1674, 2985, 2467, -3387, -7096, 10711, -723, 2199, 535, -1186, 500, 4652, 4193, 3751, 2698, 7037, -47, -3311, -2598, 6232, 1004, 3851, -1249, -8920, 2651, 3598, -3947, -6586, 6282, 2560, 2344, 2762, -811, 1915, 4864, 68, -1641, -1366, 1413, -2323, -4089, 212, 1271, -2320, -3248, 2934, 976, 4739, -3451, 452, -255, -1701, -4928, -5309, -2613, 6371, -1599, -2628, 1810, 3486, 1239, -2146, -682, -3001, -4356, -3506, -6134, -2508, -838, -3542, 8774, -2843, -2372, 5533, -12528, 4353, -3495, -1494, 4835, -3401, -1674, -2208, -535, 2481, -6645, 2537, -2927, -1559, 2358, 107, 2305, 6530, 1019, 1767, 2119, 1665, 4931, -2335, -2372, -1830, 380, 7595, 110, 4881, 4669, -1596, 120, 1510, 5408, -371, 3335, 5710, 267, 7039, -2553, 761, 5431, 4159, 4844, -4043, 1711, 5147, 2780, -5004, 400, -3351, -5414, -1538, -559, 2638, 1546, 7583, 712, -4247, -1109, -1917, -4183, 288, -3651, -4065, 1323, 7636, 1325, 1965, 1321, -1894, 4971, -2638, -8958, -1646, 3458, 6611, -2255, -2165, 2787, 5695, -663, -4657, -3889, -5190, 2455, 5229, -5996, -5055, 3413, -4296, 8122, 1711, -1191, 6011, -13292, 6566, -6010, -5361, 2133, -4084, -2100, 7840, 500, -698, -2560, 5500, 264, 4235, -1477, 6573, 2821, 9783, -5756, 6318, -3134, -2005, -3133, -10, 1218, -3239, -2970, 10165, -6300, 5991, 3981, 4733, -1730, 2913, 4968, 228, 2475, 5962, -341, 2837, -199, 3642, -2912, 1017, 3060, -10892, -3906, 6223, -1232, -3698, -4471, -7114, -3609, -5044, -1958, 6216, -2487, 4044, -3575, 3075, 4639, -1777, -3258, 696, -2296, 1357, -4155, -3410, -883, 5229, -5355, 5982, -1050, -3271, -3300, -3691, -3001, 1955, -2110, -8120, -3378, 7465, -714, 1399, -4798, 43, 927, -207, -4541, -2338, 3826, -2325, -1100, -1533, -3165, 2736, -12372, 3780, -2088, -1062, -118, -3332, 7709, -4439, -2631, 2109, -8268, 642, 462, -1601, -1502, 2323, 4229, 3018, 1843, 4259, 555, 4451, -77, -1192, 355, -19, 4531, 5212, -5538, 2492, 2595, 1338, 5931, 3263, 3822, 7573, 2636, 2921, -2672, -670, 600, 754, -2104, 4284, -2125, -3873, 2668, 3908, -621, -8543, 2868, 4850, -5707, 14, 1492, 7354, -241, 2379, -6729, 44, 3603, -5768, 724, -1606, -3080, 2927, -1666, 802, -2687, 1752, -5273, -4388, 226, -2138, -1394, 1796, 55, 5460, -3174, -5140, 1632, -1149, 2593, 3096, -7426, -1408, -233, -2413, -4508, 3528, 1304, 135, 7040, -1383, 2747, 141, -5631, 2793, 1094, -3644, 3621, 1793, 3287, -2305, 2106, -4049, -7884, 5322, 281, 491, 1781, 1461, 2361, 3844, 2, 3857, 2768, 1420, 5292, -1951, -2336, -120, -1047, 8313, 1985, 3714, -433, 1241, -205, 654, 5034, 785, 2584, 3966, 3951, 846, -5624, 3572, 832, 3382, 590, -2257, 730, 4626, -3392, -5248, 5677, 2884, -1743, 1094, -2261, -208, 980, 5429, 1324, 2675, 341, -4470, -486, 2004, -4272, -1638, -1107, 5326, 3193, 3407, 1814, -28, 3002, -192, -7335, -475, 596, 7078, 1734, -2102, 972, 2884, -431, -3433, -6808, -4769, 2306, 1609, -4634, -481, 1182, -1212, 2323, -8303, -7843, 1203, -5038, -6553, 1023, -7241, 1170, -1634, 5287, -5079, -477, 1677, -5952, 4480, -449, -5277, 4521, 2002, -241, 5529, 4348, -214, 4638, 4361, 2123, -2007, -2022, -4683, 1794, 2767, -452, 4774, 244, -281, 4827, 1019, 3388, 972, 1024, 2603, -5269, -2857, -2395, -428, 4220, 7449, 1412, 6782, -6927, 3426, -378, -9585, 5550, 2778, 2, -3858, 965, 1723, 1990, -363, -3396, 3694, 19, 1902, -4048, -1317, -5066, -2640, -4740, 4328, -1575, 4127, -2919, 1417, 1485, -3717, -6682, 1459, 924, 6274, 1594, 3305, 1911, -11, -2408, -1999, -6407, -5044, 2491, 5808, -271, 3743, 1372, 1947, 4399, -6776, -5591, 5053, -9918, 1746, -5502, 655, 6032, -992, 5661, 5069, 1191, 5065, -2965, -865, 7485, 1405, 5312, 7970, 8491, 3373, 2813, 2843, -994, 2128, -5702, 6257, 5652, -4342, 4118, 9699, -5432, 3247, 1550, -2815, 2323, 3892, 3154, -4392, 4068, -960, -493, 1390, -1024, 5459, -2056, 3811, -961, -12827, -2815, 1402, -4138, -7263, -602, -707, -4419, -4031, 1106, 5863, -127, -1814, 700, 9077, -1769, -2018, -5876, -2301, -5475, -1301, -1294, -6146, -4442, 5083, -4606, 272, 740, 1298, -2425, -2758, -560, 3957, -1116, -7865, -3434, 2200, -2110, 549, -4447, -459, 431, 1356, -7338, -2637, 838, -2793, 4006, -4178, 229, 2725, -9580, -732, 1851, -920, 7304, 2912, 7002, -3322, -119, 1080, -1983, -116, 4118, -465, 804, 4323, 1655, 4123, -496, 3267, 414, 882, -259, -2944, -2533, -2590, 3571, 368, -226, 4096, 1819, -1019, 2532, 3155, 5795, 2561, 3761, 8203, -208, -487, -2057, 2175, 2777, 4414, 4405, -4364, -1003, 2508, -734, -5902, 6297, 549, 3750, -777, 4268, 2530, 827, 441, -6172, 5189, -570, -4094, 2682, 174, -3041, -3279, 2251, -986, 1862, 3508, -2005, -3063, -2576, -2562, -8802, -1141, -3617, 3727, -215, -1388, 2301, -1569, 688, -1947, -4220, -798, 1382, 2338, -4428, -55, 6106, -3161, 3450, -3832, -4484, -420, -5460, -2514, 539, 1760, 6904, -3158, 7393, -3857, 474, 167, -5475, 4855, 3241, -5753, 3256, 331, 1627, 3613, 3667, 3817, 527, 1437, 1402, -1279, -4834, -1581, -2740, 7373, -733, 2560, 3391, -865, 4381, 924, 3581, 2831, 3959, 2297, -2579, 2790, -1430, 3305, 1795, 2266, 129, 669, 387, 2601, -1349, -7720, 4763, -1263, -1381, -890, 1965, 3724, -276, 220, -3142, 2298, -135, -3268, -903, -991, -1340, 540, -146, 2196, -1046, 3188, -2492, -177, 1980, 5093, -7372, -2310, 731, 7483, 1637, -1151, 2478, -252, -3559, -1966, -9445, -1765, 3718, -1461, 4627, -540, -3406, -2124, 403, -6696, -1822, 0, -11759, -2026, -4679, 4052, 6556, -1577, 2098, 1999, -129, 2611, 52, 4641, 77, -3973, 2758, -560, 9838, 4421, 4017, 4920, -902, 2264, -1238, 3496, 2512, -2135, 280, 6317, -5768, 4748, 3110, -3228, 9046, 2671, 1977, -2558, -1276, -7, -431, -1040, 1725, -28, -7428, -221, 4197, -5628, -2326, -1317, -2073, -6930, 3984, -8540, -3806, -5981, -4501, 8692, -328, 8307, -2510, 9983, -5167, -6722, 1684, -1525, -360, -47, 1331, -4199, -5964, 4547, -6518, -5128, 7288, -4911, -2763, 30, 3295, 4713, -4065, -8574, -852, 4345, -3400, 2595, -11914, -2415, 344, -3563, -3702, -4245, 2291, -2742, 3766, 1380, -3584, 3969, -8203, -1245, -1868, -1495, 5875, -4024, 2927, -3972, -5162, 4372, -4064, 438, 127, -5495, -3419, 5522, 8472, 6014, -567, 6594, 4163, 3551, 123, -2788, -48, -4079, 3776, 2533, -1186, 2035, 5256, 843, -3450, -567, 5896, 3439, -869, 7432, -2014, -3380, 1029, -4693, 3792, 2258, 627, -2752, 1381, 4442, 282, -5504, -386, 1876, -3135, 916, -1758, 3331, 2662, 4754, -4614, -593, -673, -366, -594, -1668, 748, -1716, 2832, 458, 1551, 3330, -2008, 316, -908, -5467, -5378, -404, 5603, 5689, -3299, -2894, -237, -846, 2016, -368, -5431, -2151, -3968, -5995, -10170, -2628, 7095, -8917, 8554, -3992, -9183, 7308, -13062, 4564, 1369, -2364, 6677, -6557, 3452, -4751, 550, 4794, -11028, 1045, -88, 3315, 2827, 914, 3308, 3256, 1730, 4491, 1490, -3664, 12, -3176, -5295, 224, -442, 6890, -5238, 2757, 1611, -7, 4388, 1576, 4351, 4526, 6140, 7004, 190, 2125, 1023, 723, 3420, 3328, -3742, -8795, 3126, 4168, 1301, -3308, -68, 3024, 3245, -3811, 8548, 5472, -1762, 7623, -9238, 420, -771, -7162, -3608, 781, -1823, -1326, 2449, 1740, 340, 1177, -3926, -1464, -382, -3287, -9110, -3456, -5495, 3179, -4992, -7119, 2871, -400, 4747, -4827, -4553, 1029, 4358, 4363, -1595, 783, 2737, -9379, 4918, -2755, -4661, 1431, -4638, 3123, -3594, 622, 9057, -3073, 6086, 380, 1243, 1365, -4056, 826, 311, 3778, -2751, 6938, 1648, 4102, 4, 5897, 952, -1209, 2809, -1226, 2277, -545, -2705, 7789, -1678, 1153, 971, -2912, 7200, 3840, 4704, 999, 6007, 4277, -2158, 542, 3048, 3012, -475, 3770, -442, -5285, -1206, 3507, 701, -5456, 2434, 3281, -4144, 457, -456, 1649, 48, 1443, -3712, 6398, -533, -580, -293, -925, -821, -4379, -322, 2359, -652, 5096, 485, -1119, 1689, -261, -6821, -2753, 3336, 5505, -3785, -1898, 4305, 2288, 1945, -1739, -669, -1878, 4345, -260, -4453, 427, -1345, -4260, 4565, -9621, -1218, 2727, -6488, -3488, 4170, -532, 7056, 3573, 752, -1373, -1009, 1884, -1993, 3681, 1639, 3537, 1679, 463, -104, 8585, 408, 8278, 2683, 2045, 3071, 362, -2004, -3237, 719, 5217, 2623, 3535, 2736, 1977, 3262, 729, 4986, -668, 4784, 7360, 3264, 251, -1687, 3396, 3438, 2680, -958, -53, 910, 754, 530, -8152, 1780, 1780, 706, -2653, -2564, 548, -414, 6606, 113, 5574, -1639, -189, -1245, 2820, -3708, -3948, 784, 302, 1190, 5073, 49, -173, 1219, 2957, -12653, -1550, 3167, 6274, -1725, -3927, 3592, 2899, -476, -3449, -10166, -2956, 3405, 2599, -3025, 1057, 1993, 1584, 3032, -6533, -5152, 2022, -11382, 5459, -411, -5001, 34, -404, 6975, 135, -3171, 160, -9382, 7310, 1037, -3616, 286, 2264, 225, 6683, -3211, 6334, 4363, 5764, -1393, 2728, -2372, -4205, 1702, 1948, -1878, 3324, -261, 2000, 3334, -902, 5025, 4193, -949, 9734, 538, -811, -4335, -17, 339, 3062, -961, -650, -1468, 1876, -3808, -7769, 10889, 489, 7835, -2479, -929, 565, 3045, 3502, 583, 1695, -1243, -2057, -1944, -2995, 705, -1004, -3419, 2351, 3646, 3853, -870, -176, -4889, -7556, -4538, -1285, -9659, 5297, 3166, 2027, 7366, 2835, -2530, -3063, -6936, -268, -3673, -404, -5838, -5268, 5646, -1701, 4863, -3453, -3951, 3158, -5456, 2029, 2222, -3872, 10419, 3346, 3042, -6304, -2528, 89, -2023, -809, -908, 146, 1326, 844, -1470, 5687, -1223, 3104, 1103, 1923, 1253, -274, -1414, 146, -986, 1407, 3833, 3244, 5773, 2512, 6258, -420, 3924, 9530, 1785, 7791, -2394, -1632, -4035, 162, 4816, 588, 3981, 1493, -3588, 2152, -1838, -6190, 4261, 3375, 1910, 5210, 3934, -2672, 5420, 3736, -1746, -1453, 1674, -1323, 1417, 2830, 1567, -4016, 1883, 3292, 3655, 3379, 6718, 743, 3991, -4314, -8009, -105, 3162, 2865, -2342, -2320, 5587, -4034, -743, -2241, -3136, -4101, -2719, -537, -5098, -5714, 2490, -1105, 6828, -4871, -1565, 5168, -4757, 959, -1648, 82, 11721, 10, 2551, -3705, 893, 5432, -4806, 3270, 1701, -1925, 2840, 3748, 6049, 8042, -224, -1697, 1665, 1475, 2192, 8, -1606, -2101, 3876, 8451, -4140, 3262, 1776, -1765, 6932, 3223, 3610, -966, -703, 6508, -3589, 28, 4313, 3156, 1567, 3678, 2448, -11137, -1112, 3187, -2451, -4050, 5643, -752, 14, -2397, 1976, 1902, 3519, 7944, -6203, 4164, 1959, -6406, 743, -1139, -1424, -1361, 2540, -2215, 2786, 2621, -6503, -732, 1293, -276, -8129, -3765, -4475, 7691, -1803, 627, 2900, 2286, 2107, -574, -7650, -1036, -4009, -4347, -5510, -1745, -173, -2061, -708, -2583, -404, 2694, -5560, 1664, 971, 694, 7337, 51, 3517, -4537, -1099, -902, -6527, 2647, 1351, -6686, -2249, 3062, -3149, 1054, -4315, 8137, 3962, 1101, -402, -3297, -2722, -1942, 4214, 2588, 3715, 2411, 5464, -825, 8336, -244, 2919, 12030, -3119, 11844, -3910, -4452, -1939, -206, 5856, 3819, 2946, -56, -98, 1170, -2912, -4928, 6288, -353, 8149, 943, 2399, -3572, 4623, 860, -8468, 797, 4907, -3437, 1370, -3394, -736, -2531, 339, 1770, 5526, 2609, 2177, -3338, -1944, -3350, -6291, -1343, -2136, 5118, -2165, -1306, 11244, -3334, -2978, -2234, -8530, 1164, -2642, 650, -4640, -3088, 6238, 1976, 5970, 951, -130, 6516, -9992, 3033, 659, -2184, 9797, -3594, 208, 379, 465, -2300, -1542, 4167, 2073, 2382, 63, 5597, -1266, 5259, -4673, 6875, 235, -729, 1490, 39, 1042, 161, -5900, 7898, -2359, 5103, 1835, 4690, -980, 1354, 3479, 4747, 4067, 8025, -781, 6279, 2110, 3166, -212, 2341, -1108, -14087, 2727, 2388, -3422, -6992, 2514, -3589, -3890, 3722, -635, 5290, 1828, 5144, -6589, 4989, 3085, -7561, 737, -3290, -755, -120, 576, -2304, 101, 5285, -4029, 627, -3023, 1132, -5184, 158, 1010, 4027, -6217, -4013, 1949, -29, 1704, -618, -4695, -1689, 1674, 796, 29, 2411, 2652, 5020, 3435, -3871, -665, 547, -6287, 2218, -5027, -2071, 3135, 1650, 4222, -802, 2054, -220, -7039, 1981, 1086, -1764, 4393, 2104, -332, 4360, -285, 2071, 1357, 661, 2707, -323, 260, -4833, 5300, 5328, -4809, 4476, 775, 3729, 1957, 1035, 4131, 465, 2051, 3507, 4334, 2578, -3041, -110, -3596, 4683, 1911, -1230, 283, 3222, -7271, -3468, 5657, 1058, -709, -5485, -2241, 5783, -455, -553, 1782, 2986, -1897, -4549, -3399, 784, 576, 1839, -4925, 2274, -396, 2388, -347, 1075, -995, -1125, -6437, 865, -3965, 4295, 42, 3186, 3413, 3889, -5095, -193, -2838, -1135, -948, 2178, -2551, -57, 2926, 7, 4078, -2624, -675, 2885, -6569, 6073, -1683, -4799, 6791, 1240, 1369, 2856, -2055, -1307, -4821, 4974, 3273, 399, 700, 3654, -3762, 4593, 4299, -566, -312, 1857, -738, 5619, -91, -2841, -1389, 7728, -323, 6104, 4071, -240, 1751, 3998, 4351, 365, 5284, 3539, 653, 3210, -5693, 3328, -440, 4206, -492, -1663, -842, 5967, -3806, -4571, -272, 4669, -4574, 2795, -350, 802, 5242, 1498, 6464, -3167, 852, -952, -7297, 3664, -3012, -3674, -4420, 3558, -591, 3853, 2068, 3604, 5771, 4538, -3756, -6630, -2328, 7662, -1538, 51, -90, 5664, -3958, -3320, 1583, -3424, -2927, 2037, -3133, -3982, 2516, 807, -234, -1735, -1231, 3613, -13312, 1063, 773, -253, 1527, -3638, 7995, -3010, -35, 3081, -2772, 3883, 1186, -1675, 757, 3765, 3337, 4630, -2550, 6056, 3352, 3804, -1556, 618, -2192, 380, 1048, 3048, -1266, 113, 4386, 1163, 1014, 3761, 2795, 3948, 2435, 3415, -1758, 3692, -3624, -1409, -3891, 7523, 2248, -4043, 1119, 4409, -1977, -6124, 3177, 448, 1314, -3259, -745, 1267, -616, 2444, -5194, 6338, -1053, -6940, 4574, -2433, -609, 350, -161, -413, -2811, 3273, -2821, -1415, -914, -3628, -4064, 1039, -1261, 4760, -3304, -3699, 4389, 946, -467, -1993, -7706, -4049, -1873, 1009, -5106, -6224, -105, 1951, -354, -3107, 6185, 2629, -4645, -4304, 3867, -7573, 2194, -27, 9551, -5787, -1927, 1041, 3636, 6831, 3389, -1442, -1045, 7849, -3694, 7382, 2152, 2917, 23, 4400, -1695, -4657, -1941, -3644, 5164, 787, -2954, 6240, 3034, -149, 7564, 1994, 5114, 2916, 2990, 12220, -3962, 1194, -807, 854, 64, 9423, -306, -3523, -3391, 5079, -2788, -7514, 7853, 3577, -2166, -752, 3467, 1867, -691, 5995, -3820, 6816, 3641, -4784, -1028, 1157, -5564, 364, 636, -741, 785, 5440, -1807, 1674, -1954, -3432, -5631, -2296, 882, 4165, -874, -221, 109, -501, 3564, 2282, -7012, -4166, -902, 2496, -2370, -221, 3789, -1794, 2618, -1541, -2717, 2691, -3700, 2639, -1275, -2892, 1435, 977, 1029, -764, 487, -26, -6454, 1250, 355, 280, -5407, 5446, 556, 8973, -1540, 3302, 1980, 1180, 306, 622, -830, -4136, 4161, 8905, -7964, 5159, 4050, 1758, 212, 4447, 5367, -905, 4118, 7995, 1690, 1726, -1383, 1365, 386, 5808, -4312, -4330, 1908, 8235, -5303, -2646, -103, 2263, 163, -4587, 186, 2013, -823, 2555, -3485, 398, 2678, -3705, -7843, -133, 1665, -1330, -3322, -1904, -1941, 3915, -2690, 1255, -3032, -129, -3721, -2872, -7272, 3636, -2921, -4208, 341, 1695, -3140, -2105, 496, 1649, -939, -826, -4633, -2160, 2714, -3338, 651, -6106, -2547, 4831, -10346, 498, -29, 1529, 5264, 765, 4990, -2752, -1676, 8219, -3007, 3092, 549, -3678, -1731, -383, 5422, 3672, -1733, 5670, 2644, 4490, 712, 1762, 3082, -3760, 4098, 626, -4701, 4577, 4866, -1434, 6078, 1203, 1079, -1, 1547, 2380, 213, 2877, -1391, -2459, -182, 5772, 6173, -5387, -1014, 4236, -2932, -5127, 6355, 1277, -236, -2694, -4410, 2696, 1648, 4661, -3745, 4307, -1753, -8860, 5577, -2048, -2926, 352, -1896, 2099, 1561, 3594, -6493, -2762, 1260, -3565, -7965, 2090, 1240, 4815, -6490, -4624, -1600, -360, 2810, 162, -9923, -1362, 606, 796, -2807, -2256, 2616, 2088, 6895, -4140, -4268, 839, -5857, -1605, 134, -5710, 2192, -644, 5737, -2159, 1932, 1855, -3345, 829, 1886, -4377, 4706, 2566, 3967, 8027, 247, 753, -2405, 2937, 955, 911, 2565, -4569, 2939, 6284, -2851, 4645, 4250, 4152, -1025, -2132, 5459, 147, 4707, 2636, -2708, 2037, -6775, 3735, -2416, 6812, 4048, 1873, -3423, 6764, -3409, -5055, 2392, -3803, -888, -5590, -2570, 870, -3406, 113, 881, 6522, -7110, -6156, -3478, 1764, -3352, 1100, -2482, 2231, -4883, 8333, 509, -463, 1152, -406, -5724, 226, -4152, 5856, 608, -4292, -2015, 2859, -3938, -1535, -10762, -5300, -415, 3277, -2753, 1151, 3730, -9598, 4446, -1361, -4166, -1469, -4478, 1500, -4611, -7033, 5486, -2386, 11475, -4458, -4631, -173, 440, 1989, 1036, 2101, -4074, 4862, 3741, 8629, 4179, 5509, -3128, 3237, 2970, -53, 3761, 475, 4264, 6766, -4365, 4704, 2599, 87, 2624, 6595, 7676, -208, 6065, 1213, 4081, 4746, -1686, 1153, -5136, 1110, -1047, -1338, -4576, 3641, 1757, -8501, 2246, 4643, -5311, 575, -22, -2626, -672, 940, -5028, 3420, -2768, -4189, -2320, 961, -491, -76, 2008, 3748, -1808, 6989, 196, -2813, 1501, -3431, -3962, -812, -493, 3867, 373, 471, 3018, -2597, 1597, -2808, -1363, -4293, -3898, 2638, -4235, -2760, 6134, 2484, 5347, -4686, -1562, 5783, -10643, 2681, -1128, -1953, 8576, -3058, 5437, 2671, 1454, 899, -6292, 1922, 1452, -2599, 2806, 5074, 1199, 8192, -2344, 9177, -1184, 2797, -2197, -2469, 755, -2915, 1611, 8617, -2609, 3027, 2925, 756, 840, 1024, 4203, 1825, -1913, 7609, -680, 3187, -1636, 5231, -2308, 3298, 2535, -6800, 1818, 3595, -3610, -7746, 4541, -92, -2087, -2433, 580, 3502, -2526, 5251, -2073, 1279, 1278, -5777, -1644, 242, -3353, 3059, -2000, -49, -899, 4284, -4813, -299, -2147, 91, -5388, -3250, -6381, 6481, -1042, 658, 2456, 5699, -282, -2128, -8823, -2164, -495, 826, -2827, -4896, 4545, -2585, 9184, -5213, 3976, 814, -10430, -1275, -4476, -9729, -1391, -1378, 5420, -1912, -1781, 908, -1535, 1543, 1866, 2846, -424, 5863, 4206, 6338, -610, 6742, -3752, 3047, 3312, -1261, -920, -386, 1754, 7792, -2189, 9740, 1317, 3772, 5833, 2373, 7781, -2973, 4126, 8263, 3577, -114, -406, 1849, -303, 4698, -427, -4847, -1405, 4952, -1435, -8776, 3993, -5034, -2069, -5434, -2131, 1851, -260, 5304, -4776, 5241, 769, -1359, -4758, -520, -2758, -425, -2049, 2675, -8305, 7031, -6192, -4288, 893, 824, -6393, -5449, -2671, 5731, 1744, 4493, 7267, 5038, -1690, -183, -5934, -1940, -960, 1700, 739, -3483, 960, 5078, -40, -2937, 2746, 3146, -9913, -6460, -208, 1908, 8679, 1260, 6395, 1270, -3532, 3550, 3900, 3882, 4488, -1285, 1554, 5816, -1446, 4269, 2120, 4532, 2592, 5628, -274, 4064, 4568, -3845, 6107, 692, -804, 5506, 3651, 2181, 6452, 4991, 5319, -4409, 684, 3624, 358, 2579, -5300, -1035, -4948, 5687, 1697, -6792, 949, 62, -2207, -8527, 3432, -1391, 1401, 1425, -2173, 2627, 1979, 4449, -2636, 6411, -653, -6864, 668, -2202, -5491, -733, -3336, 812, 1435, 7642, -4144, 817, 2621, -325, -4543, -19, 636, 4901, -5000, 614, 1305, 2694, -2036, -1480, -5611, -5373, -2137, -184, -3703, -2675, -1169, -4367, -857, -2761, 1093, 2165, -9154, -3085, 1237, 1308, 9654, 1982, 5277, -1181, -2822, 1462, 2096, 5291, 67, -6963, 218, 1975, -1331, 2129, -467, 7482, -435, 5651, 4114, 1378, 2451, -2205, 4963, 1947, -2576, 5411, 3147, -4327, 3242, 3797, 3454, 189, -3436, 4984, 198, 3048, 619, -1159, -971, 4605, 3716, -624, -4251, -1052, -2257, -7216, 9567, -1660, -1089, 4005, 696, -3223, 2838, 3267, -8126, 1608, 2314, -7587, 7255, -1173, -3963, 1652, -2665, 2618, 7077, 6187, -3231, -2595, 910, -1284, -2103, 631, -1477, 6097, -3093, -163, 766, 2816, 539, 347, -7286, -3153, -6088, -3686, -6069, -2878, -1782, -3411, -809, -2372, -1856, 1015, -6770, -2140, 85, -772, 12508, -4617, 3921, -9920, -5233, 1475, -4723, 5205, -2422, -6354, -1230, 3646, -1521, 4804, -792, 1956, 1143, 2190, 1784, -2220, -3419, -2983, 2807, 2745, 1300, 5197, 3535, -1691, 2363, 1422, 2795, 3281, 919, 9856, -3626, 97, -655, -905, 6174, 8114, 3261, -3702, 1309, 2779, -5536, -5665, 5289, -1145, -969, 2238, 2091, 65, 2966, 7042, -8240, 775, 2713, -7654, 4299, -70, -2752, -2325, 1068, 1028, 3945, 5033, -3684, 552, 1239, -4260, -5653, -1102, -2266, 6305, -774, -3689, 1343, -284, 1462, -610, -6311, -2272, -3421, 417, -5573, -3597, 5771, -314, 3129, 1905, -1986, 6973, -2777, 1266, -2176, -4548, 12708, 1156, 2320, -6446, 1492, -334, -5727, 908, -3531, -1009, 1490, 4184, 2430, 7630, -4117, 5304, 1005, 2817, 1175, -4346, -1670, -2359, -688, 5331, 70, 1688, 1213, 939, 615, 127, 5299, 6952, -1625, 8096, -3439, 648, 1075, 5131, 1680, 2823, 1395, -5869, 2962, 2271, -1405, -492, 5323, 174, -2782, 3834, 4022, -1754, 974, 3359, -3891, -4159, 1294, -4973, 3163, 855, -857, -2624, -1192, -4529, 9206, 5429, -1594, 2346, -1449, -4074, -7391, -9795, -1755, 5895, -944, -3740, 4933, 3860, 2926, -472, -6104, -1564, 2760, 100, -980, -4713, 891, 6884, 2470, 698, 1638, 5516, -9218, 4025, -4687, 3112, 4057, -7891, 3708, 4193, 2416, 43, -3573, 1991, 2656, -831, -818, 3664, 8352, 5581, 1434, 2001, -1369, -1243, -6712, 2757, 4392, -359, 3, 6767, -7338, 3445, -132, 2011, -1770, 6689, 4249, 1246, 3998, 4312, -1094, -3809, 3057, 2429, -7591, 3266, -246, -7890, 4566, 9222, -897, -7762, 5572, 2318, 5635, -2312, 1802, 11097, 1103, 7290, -3096, 6892, -612, -3454, -4116, 4574, 3408, 8870, -757, -2296, -7166, 539, -5981, 2718, -4511, -6563, 152, -4065, -391, 3271, -2785, -7565, -934, 852, -132, 603, -3906, 4344, 1798, 2370, -4060, -2148, 3086, 395, 4985, -2713, 2827, 4249, -8497, 1584, -1980, -1989, 5730, 1899, 5908, 995, 2543, 1345, -2536, -3582, 3676, 1522, 799, 2103, 3652, 7642, 2108, 3201, -3006, 705, -1075, -728, 2165, -4158, 1112, 6502, -4810, 4072, 2299, 732, 1380, 1901, 6030, 694, 2472, 7729, -1932, -144, -1239, 4463, -3395, 2400, 2477, -7542, 2071, -740, -4523, -10651, 4705, -623, -135, -5237, 109, 6402, 905, 4407, -2918, 6467, -1072, -2684, -1739, -504, -3921, 5240, -13, -1814, -5095, 3199, -3859, -2848, 180, -1875, -6776, -1292, 2384, 2540, -361, -4011, 3414, 615, 331, -572, -6974, -1970, -1084, 1367, -6852, -7042, 4272, -1647, 6187, -4707, -444, 8775, -7109, -1964, 663, -6578, 8620, -2738, 3968, -5542, 3522, 4809, -3241, 3744, -1097, -2861, 1140, 1202, 2379, 6262, 1460, 6209, -3276, 2461, 3115, -5462, -4831, -32, -1401, 4469, 511, 3496, 2407, 5134, 5776, -732, 4487, 1429, 1937, 10499, -1229, 2325, 1039, 1631, 2719, 5322, 3237, -5106, -524, 5139, -1247, -6834, 5374, -453, 1830, -2923, 1, 774, -128, 9175, -8333, 4565, 3287, -3275, 7318, -1027, -5089, -342, -1723, 4023, 1498, 5871, -6545, -1164, 743, -5891, -12494, -104, 3845, 3365, -118, -2768, 1258, 1534, 4368, -3943, -12365, -5161, -3493, 603, -3618, -4497, -5256, -1153, 3923, -4698, 316, -448, -4493, -3403, 679, -6075, 10255, 386, 4020, -6204, -3608, 4151, -3503, 2134, -602, -5411, 1156, 5461, 4765, 4931, -274, 3085, 139, 1245, -2956, 602, 1437, -3661, 7565, 560, 2021, 2842, 7054, -2714, 8019, 4916, 5634, -332, 160, 1269, -3096, 7976, -5790, -2855, 2596, 2975, 9100, 6238, -5072, 5692, -6617, -5530, 4428, 1195, -757, -2409, 756, -1965, 601, 1637, -624, 2645, 462, -979, 660, 4681, -6297, -4743, -179, 1024, -2331, 5104, 4073, 3462, 5553, 2521, -6355, -2005, 3937, 4639, 3420, 3542, 2941, 3170, -2971, -5218, -6199, -4858, -5144, 464, -3905, -4472, 4107, 2735, 566, 902, 1760, 1411, -9188, 326, 2279, -4597, 10291, -1469, 1509, -508, -2827, -2560, -660, 3886, 361, -4405, -3651, 3439, -1096, 5396, -488, 2953, 1946, 3024, -473, -183, -941, -806, 2238, 4451, 381, 5126, 2514, 5278, 2771, 4104, 6292, 3803, 299, 9120, -3343, -2897, -6614, 811, -144, 1731, 3307, -3691, -3344, 2128, -7622, -5751, 8170, 1666, -1336, -124, -4046, 1877, 4446, 5750, -2778, 460, 750, -5101, -1251, -3634, -4937, 3137, -362, -1209, 770, 4333, -3380, 1267, 3158, -4822, -5114, -1689, 566, 6660, 635, -2239, 4365, -1126, 1055, 1250, -6864, -2672, 3898, -1408, -3194, -2925, -2467, 552, 4333, -9217, -146, -4785, -6306, 1288, -977, 2826, 3679, 3853, 3779, 2721, -1297, 5678, 2433, -506, 3529, -142, 1675, 1297, 5734, 6428, 488, 7914, 2000, 2390, -2004, 1750, 7669, -4352, 4491, 7895, -5167, 6034, 4500, -3385, 5422, 3945, 4783, -3641, -1014, 1734, 4016, -1874, 2391, 44, -4690, -748, 2063, -2327, -1604, -2331, 2115, -4444, 605, -5496, -2546, -3579, -2229, 5271, -3928, 7639, -3618, 7821, -1903, -5338, -4209, -219, 514, 602, -2172, -875, -296, 2237, -4401, -1109, -2298, -1053, -4708, 331, 1909, 1977, -4288, -8261, -2828, 3479, 1726, 3071, -7507, 2151, 1350, -1004, -9390, -2813, 1486, -10913, 8754, -4641, -8613, 2012, 523, 122, 1049, -3589, 9261, -659, 2832, -7650, 638, -1298, -2925, 1734, 298, -5789, 3242, 3036, -4861, 727, 476, 5196, 4233, 638, 4373, -8597, -3054, 670, 2552, 3432, 83, 2682, 310, -3829, 168, -4284, 3915, 4424, -2548, 9578, -1800, -1604, 927, 1554, 3773, 3118, 4457, 3668, -5389, -1917, 1118, -4365, 9068, -921, 1937, -3715, 3465, -3582, 143, -827, -9324, 255, -800, 605, 3484, -1946, -2986, -6755, 1319, 1533, 4128, 3886, 348, -102, 1111, -5839, -10991, -2037, 1262, 3498, 762, -49, 3754, -335, 1721, -2292, -5598, -4073, 463, 2804, -5851, -3689, 5839, -1584, 2965, -2807, -4952, 4376, -4836, 2588, -625, -6271, 6709, 283, 7808, -3393, 262, 3608, -4979, -46, 2701, -3209, 5410, 3614, 2946, 11792, 5754, -385, 722, 2443, -798, 2211, 1095, 299, 4943, 4933, -605, 1298, 3687, 3193, 2864, 3602, 7574, 2623, 3798, 3299, -737, 1439, -5764, -404, 232, 5612, 5121, 768, -3039, 4691, -2928, -8863, 5342, 1822, -1270, -2020, -1483, -2884, -774, 2215, -3501, 5282, -4308, -780, 743, 3053, -1866, 628, 372, 7951, -1169, 823, 2340, -1814, 1534, -6581, -7220, -144, 1945, 3619, 1810, -3451, 505, 2991, 312, -6736, -7317, -5560, -2648, 966, -2474, -5741, 16, 5127, 2766, -2867, 8134, 6465, -10792, -2255, 141, -4886, 3669, -1806, 2311, 499, -2192, 881, 411, 3420, 2315, 133, 2112, 3814, -1411, 9324, 4220, 3037, -2609, 2460, -990, -3898, 552, -3578, 4517, 3313, -3933, 8938, 975, 5182, 839, 2086, 7773, -1128, 2291, 7799, -2760, 1673, -1399, 2040, -1341, 5111, 3022, 1463, -3855, 6069, -47, -9853, -658, -3312, -1465, -5921, 2185, 10618, 250, 6244, -1148, 3517, 4502, -1566, -2956, 760, -4037, 749, -2120, -1496, -9255, 1655, -3175, 46, -1166, -941, -4194, -194, 338, 2649, 1754, 388, 684, 4217, -82, 1405, -5831, -2530, -470, 2526, -3252, -8529, 2921, -3419, 3324, -4605, 921, 6370, -5216, -3633, 5399, -1106, 12609, 3333, 2416, -1076, -2978, 4647, -1020, 2355, -157, -4107, -1381, 1928, 1208, 3305, -335, 6918, 2838, 3467, 719, -646, 2617, -2333, 2707, 532, 28, 4678, 3555, 1850, 7803, 2633, 4516, -143, -2340, 7984, -1005, 1411, -1258, 597, -252, 688, 5412, -767, -2612, 783, 244, -5205, 4016, -5605, 3256, -589, -1301, 2654, -781, 7546, -7378, 3578, 525, -7719, 6176, -4407, -3855, -195, -1582, 1222, 6028, 5156, -1019, -1014, -924, -1009, -9276, -5048, 818, 6402, -4698, -316, 5918, 5570, 1050, -2412, -9794, -1218, -1230, -3163, -6366, -3608, -4378, -5771, 4698, -3315, -3664, 174, -4256, -3448, 3151, -4119, 7955, 3277, 2886, -4718, -1034, 4735, -2213, -1258, -1038, 5734, -809, 6527, 10603, 4481, -5383, 4189, 3340, 3361, 461, -1238, 231, -5575, 3411, 5708, -4825, 5898, 2270, -3003, 7242, 1068, 5819, -7166, 847, 6064, 2557, 2707, 1446, 1628, 4722, 4788, 1716, -8191, -3021, -3163, -1707, -3168, 336, -5252, -4609, -3958, -1900, -297, -167, 8294, -4287, 3897, -1674, -3453, 2868, 85, -3129, -7254, -2609, -4007, 1246, 4657, -5197, 262, -488, -3796, -8200, -2587, 1831, 2483, -3523, -224, 526, 5018, -219, -1565, -5167, -2978, -5622, -705, -4188, -4724, 6024, -3005, 3235, -543, -3185, 6460, -6142, 4167, -739, -6348, 4598, -1405, 3632, -851, 2769, -19, -5561, 1986, -2236, -4802, 3374, 2377, -2150, 5868, -3190, 2928, -4287, 4814, 341, 205, -2695, 1611, -1892, 3854, 4577, -288, 5565, 2932, -6366, -603, 5225, 4876, -2147, 6098, -757, -1655, -629, -472, 2398, 1562, 2934, -8549, -2468, 3370, 1877, -6587, 2336, -3710, -1976, 2475, 1799, 327, 3673, 3671, -7548, -5180, 782, -3130, 2023, -4041, 482, -2363, -1671, 2857, 8235, 5864, -461, -2037, -133, -2134, -8714, -2632, 1175, 6169, -579, 1910, 2535, 1682, 3112, -1838, -9209, -4165, -1385, -130, -2321, -4917, 4412, 3567, 1458, -1621, 1027, 5845, -5132, 141, 476, -4827, 5750, 4090, 5808, -4173, -62, 2202, -2730, 419, 834, 637, 2118, 3414, -1765, 6485, -5838, -2386, -2403, 802, 2653, 451, -2212, -2696, 447, 5212, -446, 2898, 3384, 7028, 26, -1531, 4834, 1492, 1841, 7877, -223, 1159, 1284, 2819, 867, 4096, 1391, -5134, -1772, 4123, -2966, -4991, 2759, 1621, 2428, -481, 2960, -1026, -1024, 2301, -5028, 1543, 620, -5131, -2617, 1775, 2502, 3009, -445, 1608, 2437, 4326, 68, 1601, -3677, -4680, -9149, -2868, -1538, 2386, -1328, 1473, 3513, 1444, 562, -3214, -7065, -2095, 1553, 2765, 3143, -2191, 1005, -2169, -2670, -8322, -3121, 1363, -5074, -4378, -2115, -4064, 5338, 1542, 1623, -4015, -2823, 765, -1595, 2500, 1946, 15, 2145, 3885, -4645, 8560, 4548, 3547, -1380, 2049, 376, 975, 1075, -5051, 4386, 6155, -282, 8758, 1022, 1062, 3371, 1596, 5619, 640, -883, 4065, 922, -2013, -3623, 981, -993, 3849, 818, 4, -2841, 670, -1505, -10649, 868, 1030, -1995, 5325, -1433, 678, 5320, 1791, -8259, 2731, 2259, -2016, -5513, 3609, -1734, -160, 158, 182, -5174, 8134, -492, -3493, 3358, -2577, -3378, -2789, -4483, 4956, -225, -3280, 1610, 4263, -1622, 1084, -4934, -1909, -1681, 81, -1876, -2847, 1426, 290, 5942, -3827, -1812, 5242, -9413, 4396, -5399, -6218, 808, -5104, 2957, -2078, -1115, 56, -11174, 4769, 292, 3983, -175, 5011, 1648, 7644, -551, 2617, -1579, -834, 134, 843, -4314, -2697, -878, 8505, -1477, 3179, 986, 4619, -1945, 3711, 7648, 1672, 2635, 6052, 1922, 341, -3770, 2677, -1281, 5026, -3738, -7004, 1749, 3097, -1315, -4205, -5170, 2818, -272, -2560, 470, 1625, -153, 2294, -2811, 3567, 3186, -5629, -5766, 2382, -454, -252, -2177, 463, -2516, 4532, -3029, 981, 1015, -3588, -3903, -3168, -5372, 6033, 1908, 1025, 1304, 6566, -2985, -2377, -2718, -2852, -440, -579, -2807, -2976, -838, -1462, 3649, -4130, -1279, 5570, -10483, -765, -2229, 915, 4344, -140, 2652, -1399, -1196, 5508, -4541, 1903, 2196, -1001, -1570, 8421, 5771, 6955, 1312, 6133, -1570, 4489, 1640, 22, 6766, -3744, 6064, 5702, -2591, 4594, 3800, -1040, 3992, 1576, 5756, -4848, 1499, 5130, -2843, 2096, -4460, 32, -3896, 7330, 3365, -10270, 2296, 3788, 12, -6086, 1167, 6, -2804, -2839, -4226, 5573, -2105, 4312, -2932, 9171, -1758, -3512, 3571, -2871, -1929, -3083, -3715, -1619, -1056, 4991, -4080, -532, 1338, 245, -7817, 1441, 2401, 5615, -8448, -2922, -818, 3073, -1234, 1788, -10843, -5156, 2338, 2244, -657, -3359, 86, 3702, 6837, 1756, 1616, 3687, -9937, 1609, 2345, -4515, -5297, -1819, 5094, -529, 3713, -2447, -6412, 2243, 2427, 745, 2864, 3318, -1790, 3558, 2241, 3015, -1937, -105, -249, -2091, 2708, -506, -1949, -1389, -5465, 3419, -1564, 5660, 3848, -2147, 3276, 2898, 2898, 7353, -2909, 8800, 1377, 3695, -3351, 4617, 116, -1909, -1421, 10012, -823, -5065, -1163, 6343, -2329, -2755, 6118, 10039, 1378, 5554, -2358, 2384, 3864, -3397, -7237, 3356, -2612, 4283, -812, -375, -834, -1875, -636, 247, -4666, 1250, -2233, -853, -561, 2508, -5182, -4127, 2496, 1211, 798, 1135, -5316, -1696, 1162, -1355, -2556, -943, 1854, 4179, 3075, -2100, -5363, 2927, -14420, -1098, 697, 4227, 5159, -317, 5651, 2539, -1411, 3803, -6188, 3806, -3183, 633, 913, 2117, 6173, 5771, 1064, 4166, 4448, 1018, 3617, -1126, 1394, -4833, -1590, 1561, -480, 2373, 1954, -1465, 6314, 2251, 2638, 1199, 532, 3858, 105, 2150, 541, 1306, -518, 4779, 1134, -5332, 3498, 1336, -548, -6935, 3625, 1006, -2854, -2677, -276, 2613, -222, 4994, -3195, 475, -1378, -5715, 1179, -2397, -3399, -3374, -1791, 348, 4305, 1414, -5829, 1100, 2814, -1776, -6177, -3963, -953, 4590, -778, -5393, 4973, 4038, -2656, -2725, -9956, -1258, -2670, 889, -6016, -3053, 312, -2887, -967, -7929, -5389, 8660, -13314, 1292, -533, -2833, 5733, -1594, 950, -5743, -1218, 4792, -3094, 3149, -764, 1102, -1306, 3577, 1710, 6096, -4917, 4749, 251, -1134, -514, -440, -1841, -1983, 737, 4659, -987, 6084, 3740, 824, 6011, 3450, 4097, -766, -1375, 6874, -404, -977, 767, 1760, -1846, 7395, -2528, -8270, 2123, 4754, -2050, -5594, -1965, -1683, -2512, 2493, -2574, 2761, 1637, 3027, -9143, -1317, 6372, -4841, -497, 1728, -7462, -3046, -552, -2127, 1250, 6910, -6217, 1908, 1375, -4369, -5413, -1174, 288, 2207, -970, -2298, 5537, 3102, 1201, -416, -7460, -1656, -3172, 758, -1116, -9764, -1389, 7083, 2262, 2423, 5808, 3307, -11618, 458, 1131, -2993, 9216, -2585, 3397, 3391, -1736, 444, 360, 964, -1283, 829, -1451, 8185, 3064, 9293, -4930, 5391, -4785, -613, -2675, 2205, 5334, -5384, 7232, 4172, -1623, 3526, 7212, 3771, 4643, 5237, 7106, -5042, 649, 5206, -2567, 1494, -1948, 3774, -3930, 3896, 2346, -7752, 722, 4787, -1998, -3437, 4342, 786, -3230, -4721, -1161, 6014, -2256, 9619, 887, 4117, 692, -7875, -6592, 874, -772, 4423, -2908, -3383, 1688, 2445, -236, 3776, -1549, -3215, -4076, -3363, -1245, 4474, -3033, -3731, 4008, 5385, -682, 590, -6284, 943, -4071, 5592, 2828, -5789, 3705, 2879, 2260, -2350, 981, -717, -4780, -5527, -769, -8476, 5916, 2757, -831, -1120, -1063, -3597, 1682, 846, 730, 3444, 2703, 6868, 185, 7037, 2423, 3148, 495, 4677, -121, -1830, -184, -4903, 3555, 3034, 337, 6413, 5558, 290, 9586, 2924, 8309, 405, -691, 3273, -410, -367, -2695, 2262, 1636, 4618, 2015, 3953, -6579, -2483, -3188, -8352, 6402, 3161, -5025, -2516, -4333, -254, 840, 2537, -48, 3129, 886, -2552, -3785, 918, -6122, -461, -5336, 1636, 1639, 5096, -2361, 20, 3881, -1967, -6077, -1202, -504, 6278, -2117, -338, 2479, 7409, -4443, 774, -4317, -2182, -2481, -303, -6423, 746, -3196, -2710, 2403, -8717, -3102, -2691, -3379, 948, 1782, 1060, 2610, 6703, 2270, -2601, -1970, 2126, -4892, 4727, 1107, -1173, -1192, -1618, 3525, 1360, -1852, 8532, 6892, 6302, 2200, -1384, 2303, -3463, 1912, 3110, 970, 5600, 5129, -1694, 7622, 1974, 1700, -1409, 1248, -4297, 542, 6558, -4081, -4593, -137, 6877, 4669, -914, -2773, 3110, 983, -2223, 4386, -445, 2146, 429, -4643, -2454, -42, 2980, -587, 4853, 35, -3406, 4830, -2764, -5497, -4163, -5278, 2309, 3735, 5395, 1542, 438, 3473, 195, -10228, -374, 2494, 4551, -3263, -767, -1160, 713, -2959, -2760, -7498, -4914, -1253, 5924, -3917, 3177, 6118, 1895, 2664, -1008, -3985, -4021, -8379, 3213, -2062, 920, 3332, -3562, 5958, 1527, 1201, -3249, -4644, 2356, 3607, 3240, -1952, 3681, 2290, 6260, 2493, -213, -1415, 1933, -545, 4434, 4084, -3579, -2070, 5914, -5079, 6495, -1593, -2535, -395, 5453, 5578, 699, 3253, 1107, -2111, -1943, -225, 4913, -3521, 3332, 2574, -10320, 314, 5082, -3965, -5996, 4946, 1053, -5119, -1090, -617, 8362, 1116, 866, 1619, 1618, -4855, -6813, -2560, -866, -2797, 85, -3169, 1097, -3085, 3799, -6137, -591, 2060, -15, -3007, -778, -2592, 5380, -1909, -3706, -3551, 2310, -2392, 737, -428, 1396, -5431, -1123, -1413, -5975, 1278, 4277, 1875, 181, 3075, 2426, -10233, -1265, -2264, -477, 8583, 1484, 5749, -3083, -1493, 883, -4084, 3069, -362, -8518, 98, 4597, 5702, 10561, -663, 8440, 1494, 5056, 3701, -1634, 2631, -559, 10754, 2762, 662, 5194, 4693, -1853, 1312, 5029, 5726, 1850, -2956, 1566, -1539, 2202, -2311, 2196, -4645, 7376, 5875, -1580, 662, 6078, -5202, -9295, 3626, -425, -4810, -1189, -1282, 1080, -1120, 6429, -2911, 4713, -2300, -6903, 3508, -2928, -222, 3529, -1401, 1487, 335, 5953, -552, 1746, -1921, -549, -4169, -1208, -3727, 8093, 2622, -5870, 4207, 1210, -1672, -42, -10825, -2055, -4936, 1408, -2196, -2192, 4666, -1847, 3978, -1230, -602, 4217, -6126, 372, -1023, -2621, 6312, 4041, 1492, 1874, -1070, -1519, -1191, -2169, 1614, 5100, 1718, 5183, -101, 5623, 748, 6760, -2269, 4370, 62, 1144, 1197, -2662, 5365, 7116, -1097, 5548, 3127, 2263, 4497, 5538, 7587, 5024, 6177, -1470, 536, 2847, -1560, 3347, -96, 3320, -221, -4110, -788, 2962, -646, -6888, 5672, 1877, -6238, 2072, -104, 2786, 957, 2289, -105, 3013, -1129, -5648, -848, 2213, -5929, -2608, -3317, -3282, -2418, 7673, -856, 91, 265, 1813, -4441, -5101, -2275, 7421, -3221, -3405, -3993, 4348, -1534, -391, -1843, 72, -2588, 2899, -3928, -956, 371, 1309, 2433, -10952, -2675, 2773, -3147, -5581, -678, -4871, 13481, 519, 151, -608, 1149, -498, -3118, 1696, 562, -4724, 2703, 2870, 722, 7741, 1284, 11687, 7251, 4361, 769, 1183, -1295, -5400, 4196, 3286, 1719, 6600, 5431, -2907, 405, 1706, 4430, -3280, -919, 211, 1176, 1215, -6426, -3976, 366, 6308, -553, 7761, -193, -1052, -563, -7466, 262, -948, -2629, 5555, -5071, -597, 287, 2961, -3648, 4406, -1989, -3341, -2338, 1733, -6996, -1365, -5526, 2376, 1274, 6867, 386, -1086, 769, 2013, -6088, -3474, -1057, 7566, 1930, -4544, 2324, 2537, -4600, -1819, -6395, -3832, 915, 2092, -7152, -554, 7122, 1056, 4567, -1465, -6321, 2636, -11896, 5039, -1860, -3177, 10588, -3029, 6034, 6019, 3773, 1730, -5108, 3128, 1270, 1755, 3179, 4255, 5068, 4745, 5248, 1517, 1180, 91, -3517, 327, 4369, -1669, -967, 13222, -4737, 4536, 1525, -669, 5438, 6004, 3751, 1418, 4009, 3821, 835, 4589, 1679, 2775, 31, -986, 13, -4842, 1040, 3045, -3338, -8255, 6324, -2560, -4378, -3724, 530, 4900, -832, 5681, -627, 3931, -579, -4866, -3489, 3157, -3520, 2000, -2176, 3149, -2323, 1621, -4278, 729, 1566, 232, -4862, -4952, -3239, 5932, -650, -4747, -1390, 7509, -1065, -2906, -4873, -812, 3210, -520, 5507, -2259, -2286, -2180, 1160, -7599, 3644, -3341, -6871, -6025, 793, 4437, -1278, 2263, 9799, -3063, -3669, 5291, -1975, 2080, 1355, -3468, 2100, 1814, 7151, 4345, -1237, 13876, 4665, 1514, 135, -4967, 2838, -3740, 7747, 3376, -3875, 3802, 4481, 4427, 9901, 2863, 2759, 4632, 1020, -167, -51, 8675, 825, -6353, -5856, 2711, -161, 6633, 1048, 8765, -448, -6601, -3409, -2329, 494, -6276, 3392, 4856, -3152, 8152, -943, 7131, -603, -2422, -4956, 561, 391, -2913, 3348, -1113, -12114, 5432, 7801, -1135, 286, -1349, -2310, 5252, -1326, 1216, -4170, -916, 9466, 3254, -4670, -2086, -6551, -1095, -4616, 1858, -3722, -1933, 5898, -6754, -1228, 1990, -1048, 898, -7325, 104, -1293, -6133, 593, -2264, 6229, -3657, -5018, -942, -3702, 4133, -87, 950, -703, 3088, 3213, 7196, 733, 154, -9875, 2996, -2762, 1029, 2794, -1359, 2645, 1462, -2641, 3592, 5117, 3688, 1355, 4759, 7910, 2065, 6503, 1462, 232, 4707, -804, 3179, -469, 5943, -1315, -7669, -4777, 9361, 1486, -7933, 5653, 4233, -1572, 4203, 5949, 2133, 6279, 5943, -8753, 684, 1745, -8451, -3232, 5372, -1994, 3399, -1462, -706, 2253, 5450, -4990, 2440, 194, -8682, 1435, 461, -2464, 3789, -3299, -1126, -2172, -914, 3070, 593, -1627, -1224, -5444, 1344, 310, -3934, 2803, 4413, 5359, 406, 2059, 5898, -4498, -800, -625, 2297, 3841, 2455, 8047, -3287, 336, 3898, 2224, 3345, 2222, -152, -1491, 2813, -1234, 5008, 1635, 2364, -2335, 4896, 1166, 666, 5461, -2114, 8715, 3383, -1572, 5788, 5833, 2129, 4909, 4434, 2925, 6995, -35, 4412, 52, 6412, -4286, 2391, -4637, 8826, 4190, -5396, -537, 4677, -3741, -8123, 5774, 4693, -3977, 2701, -2457, -4142, 3125, 3081, -5981, 5046, 862, -11661, 2857, 4174, -3279, 1917, -2143, -2100, 1159, 9599, -648, -354, -891, -152, -3368, -1360, -9245, 3585, -6845, -3433, -948, -3878, -3105, 181, -10140, -4949, -194, 2288, -228, -1679, -564, 1373, 3780, -4721, 158, 5011, -6049, 1881, -7133, -7268, 2545, -2328, 633, 4824, 1379, 815, -2610, 4850, 3652, 3806, 3375, 1552, 2746, 8366, 663, 4379, 255, 2123, -2875, 3208, 2030, -2000, -76, 9409, -1479, 6400, 912, 7520, 1806, 1439, 5611, -2003, 2516, -1183, 1080, 3944, -4867, 1426, -6375, 3587, -3519, 1152, -3591, 2741, 1733, -5782, -4519, -3071, -3330, 2604, -2310, 6256, -116, 3964, -1803, 3908, 141, -4226, -4277, 144, -4031, 2883, -5344, -2877, -2585, 6722, 542, 1192, -908, -3622, -2051, -2022, 127, 3937, -269, -5402, 120, 7378, 377, 1547, -4279, -4232, -4928, -2567, -7339, -6145, 5888, -3925, 1485, 1594, -793, 2497, -3281, 2834, -2834, -5528, 12826, -5709, 434, -2804, -2921, 719, -1144, 2613, -1454, -9205, -1314, 4042, -273, 6186, -532, 3682, 118, 659, -2521, -3708, 1159, 1147, 3136, 4741, 822, 3467, 5163, 3283, -4141, 5006, 4704, 6263, 765, 8939, -3723, 1334, -2322, -1245, 4796, 863, 5840, -5996, 737, 4888, -2144, -5958, 10060, -2933, -4327, 5344, 925, 2938, 2535, 4565, -7033, -1768, 154, -5026, 4927, -2403, -1745, 726, 1984, 1699, 4337, 5666, -2596, -275, -31, -5575, -6226, 156, 4967, 6635, -2041, -4622, -4293, 551, 6239, 337, -4689, -3200, -677, 1065, -4822, 532, 3446, 592, 6343, -7065, -4825, 4389, -10069, 4658, -2673, -1631, 3583, -1982, 7520, 37, -2396, 3529, -4479, 2452, 499, 4016, 3554, 2899, 9218, 4711, 1744, 999, 6784, -1913, -2046, 1847, 2481, -2856, 3135, 7813, -8774, 6009, 932, 647, 3779, 3589, 3373, -121, 5021, 5877, 20, 2309, -1933, 814, -2784, 3128, -1001, -4928, 1096, 6059, -1697, -4531, 682, 4407, 2510, -3728, 4357, 3352, -3759, 240, -1059, -334, -197, -2956, -5637, 5632, -253, -1743, 464, -537, -1825, 553, -4846, -1961, 3085, -4745, -1858, -4208, -4956, 5094, -666, -240, 1130, 2713, -2774, -3484, -1794, -284, 1398, 2623, -1035, -426, 283, 1995, 3775, -194, -1579, 4404, -12210, 4319, -5890, -2430, 3725, -6675, 1742, 3949, 2081, -1142, -641, 7436, -3968, 4351, -1141, 1333, 825, 8477, 4133, 4639, 231, 169, -848, -401, 1133, -4242, -3324, 9178, -3677, 7068, 3512, -370, 3465, 4292, 4116, 2120, -1303, 4434, 4021, 731, -1894, 1792, -4054, 1805, 877, -5303, 1670, 3833, 684, -4065, 3008, -2264, -1319, 705, -2646, 6055, -2389, 5703, -1464, 1495, 1341, -4209, -3036, 1956, -1719, -767, -4351, 1877, -3117, 5937, -4086, -1898, 6272, -3546, -4896, -9822, -4483, 4543, -793, -9917, -1584, 4855, -184, -737, -7742, -2482, -2002, 2530, -583, 1496, 2930, -770, 459, -3651, -1069, -290, -2735, 643, 1060, -1382, 4994, 660, 3017, 632, -1442, -2029, -6739, -355, 6, -431, -1332, 1191, 630, 7080, 3578, 4414, 923, 2492, -2447, -377, -288, -6547, 3375, 5351, -1995, 6736, 4883, 1610, 4323, 5337, 6634, 2805, 4408, 3596, 739, 3035, -5358, 435, -22, 1341, -1585, -1696, 171, 3420, -5485, -6444, 1227, -1605, -846, -1121, -1038, 5989, 171, 4271, -570, 2282, 1305, -6245, -2175, -532, -3139, -1616, -1192, -207, -3250, 6581, -1589, -203, 2370, 3920, -3776, -1312, -321, 5472, -949, -5039, 3154, -312, -4096, -613, -3680, -151, -5026, -1993, -234, -5290, -1427, 869, 5046, -1562, 1486, 9509, -13266, -4468, 4770, -4864, 6898, 116, 942, -2860, -2519, 1894, -277, 1728, -3020, -5366, 1056, 3739, 115, 8558, -5861, 10326, -2788, 2883, 7010, -2947, 6388, 1046, 7126, 4080, 1290, 8475, 2448, 4681, 3366, -895, 3409, -1960, -421, 5453, -1574, 6424, -1386, -1915, 2411, 9879, 1254, -1546, -4125, 8403, 189, -7836, 2816, -3013, -7641, 4272, -4810, -933, 1979, 7841, -5620, -749, 3629, -1573, 1991, 1625, -8714, 3253, -5790, 3857, -1724, 7475, -825, -1210, -1940, -2056, -4153, 2925, -1336, 3690, -5844, -1615, 640, 5678, 3325, 1824, -10341, -5090, -3369, 344, -1502, -5425, 2573, 3521, 3889, -1777, 698, 7123, -7622, 2107, 2281, -2991, 5204, 5429, 3179, -2455, -1738, 3592, -2388, 13, 1579, 1791, 1398, 3432, 5294, 7926, -1963, -1240, -2502, 1957, 574, 916, 4236, -2996, 3060, 6993, -2716, 6621, 3612, 5417, 3249, 2641, 5166, 1894, -446, 6649, -3253, 7022, -2892, 1169, -2160, 2466, 3331, -4151, -2965, 3715, -3197, -6932, 4418, -2313, -2287, -941, -93, 3380, 707, 4740, -4761, 4148, 102, -7264, 1513, 2894, -2039, 2110, 583, -1339, -281, 3404, -2371, -1284, 1747, -617, -6107, -4248, -3498, 4724, -5658, -1877, 814, 5647, 574, 696, -9985, -1572, -5717, 4296, -1430, -1997, 6403, 3459, 4572, 4609, -439, 4387, -4494, -2579, -3509, -6560, 501, -8088, 5788, -1295, -2507, -461, -3280, 4628, -2539, 1320, -4501, 6179, 7549, 11808, -2697, 5605, -2063, 3012, -5429, -853, 3530, -5654, -3387, 5770, -3577, 6400, 5953, 2414, -837, 678, 6162, 3646, 915, 7284, -2038, 6913, -2059, 6843, 2893, 2134, 1482, -8631, -170, 9091, -8031, -6646, 1352, 3639, -3290, -2920, -1935, -3209, -160, 4793, 1008, 1121, 1826, -4151, -5536, 5306, 406, 14, -1980, -3986, -1915, 6900, -588, 5087, 3172, -2786, -3851, -6972, -7490, 5703, -2053, -435, 388, 980, -5063, -3301, -7167, -2155, -1336, -2258, -1613, -3828, 1765, 2475, 1247, -1997, 1578, -184, -3773, -319, 2951, 3752, 8419, 1584, 3378, -1059, 4227, 6018, -594, 4177, -2793, -7750, 2544, 296, 7630, 5468, 637, 7818, 5254, 4923, 2287, 1237, 6009, -2697, 3466, 1974, -2236, 4720, 3513, -2963, 2871, 3190, 3968, -2834, -4675, 7210, 588, 163, -2930, -6959, -1104, 2437, 8547, -3303, 220, 2891, -802, -4658, 10462, -3371, -2341, -1106, -5533, 5340, 1744, 6362, -5910, 1796, -2948, -3981, 9318, -5191, 2145, 46, -3589, 4322, 4744, 2405, -3106, -6953, 468, -5037, -9861, -1623, 3313, 8076, -7268, -8375, 5419, -1685, 2071, -173, -12265, -1743, -203, 3142, -1684, 2067, 3905, -282, -577, 870, -1002, -5606, -5974, -2429, -351, -813, 6762, 4800, 7101, -5664, -4417, -689, -6545, 2480, 1960, -3299, 1970, 1720, 2801, 5429, -1182, 6080, 660, 3048, 1917, -2658, -2653, -4917, -2548, 5351, -316, 194, 2940, 5034, 9381, -812, 6467, 5759, 4578, 1791, 116, 4931, -4457, 504, 328, 3082, -479, -426, 860, 1102, -7228, -2958, 3589, -10, -3939, 2244, -392, 803, 975, -169, 0, 875, 277, -7533, 2179, 28, -3266, -1832, 1391, -1119, 3010, 4189, 154, 702, 1551, -1600, -5520, -3766, -2265, 6136, -1309, -4887, 4443, 1418, -245, 1667, -5251, -857, -2429, 2369, -3355, 500, 4375, -929, 2492, 116, -1393, 2865, -6040, 1252, -4404, -2310, 3650, -7187, 732, -1, 2602, -98, -5766, 3213, 2217, 1713, -667, 1898, -971, 4781, 1667, 157, -232, 1379, -783, 226, 203, -4175, 301, 7259, -4057, 6928, 3498, 1356, -519, 1830, 4766, 832, 3523, 2811, -294, 55, -4892, 2208, -1971, 2999, -542, -5930, -1034, 3585, -1331, -4245, 3631, 1115, 455, -391, -1443, 7611, 296, 1964, 296, 3992, -679, -6492, -4680, -2417, -3050, 2527, -7675, 1050, -2476, 6460, -3959, 856, 2095, -886, -7203, -1795, -338, 7124, -3563, -3198, -6433, 523, 34, -1416, -2998, -3239, -129, 3235, -4539, -5748, 5872, -3864, 1849, -2422, 673, 5630, -314, 652, 1147, -2158, 6659, -3213, 6795, -665, 1807, 5120, 1281, -139, 1612, -1794, -630, 1921, -3663, 2268, -1201, 5916, -1121, 2936, -745, -1891, 2105, 582, -1236, 1377, 1625, 906, 1935, 408, 26, -540, 2245, 2113, -2667, 7637, -6118, -3692, 476, 267, -2829, 1953, 2616, -6927, -1665, 1552, -3149, -7774, 8027, 1243, 2650, -4915, 3767, 3946, 2267, 6817, -7475, 4102, 736, -3882, 5872, -5565, -3123, -101, 583, 426, 8311, 6971, -4498, 1692, 1736, -6380, -8767, 14, 5090, 4075, -4211, -4132, 3454, -682, 6916, -769, -9140, -4982, -2427, -166, -4691, -5486, -991, -3471, -1527, -7689, 1065, 4705, -2459, 900, 2140, -8130, 4600, 1145, 7473, -4993, 1191, 9915, -1658, 4430, -1654, -9706, 3911, 257, 4738, 6883, 4819, 973, -911, 7092, 838, -2996, 378, -741, 5284, 2112, -1086, 4693, 2567, 1750, 2431, 3125, 4681, 4479, 595, 6906, -5642, 2822, -2933, -2916, 89, 4879, 3503, 2916, -5774, 7534, -5701, -11516, 12100, 4917, 775, -3567, 2950, 2346, 3781, 7279, -3933, 1245, 2075, -1353, 4295, 70, -3915, 2910, -1241, 7179, 33, 2906, -7123, -2339, 1958, -3549, -5899, 527, 2171, 7720, -1940, -2942, 1920, 4195, 4417, 885, -10969, -3899, -6904, -2523, -5893, -4461, 5374, -825, 4922, 1534, -7, 5129, -9011, 3472, -3410, -6263, 4697, -4000, 1712, -8302, -355, -2677, -4407, -306, -939, 2202, -4969, 3143, -3981, 8121, -7602, 5025, -7155, 1852, 1846, -4396, -1076, -954, -2117, 10948, 764, 3047, 5262, 5319, -3649, -2293, 6248, 10308, -130, 11476, -2736, 4286, -718, 7021, 5635, 5928, 1860, -4759, 2091, 8340, -1677, -6930, 3994, 1545, -3630, 1082, 1907, 3986, -1036, 3152, -721, -884, 2897, -3749, -3558, 739, -151, 1483, 435, -767, -1156, 7753, -381, -604, -2351, -665, -5688, -3418, 10, 6387, -54, -369, 1039, 1689, 2428, 301, -6865, -3610, 5754, 3131, -1386, -345, 3591, 2695, 2082, -8841, -5225, 1201, -8053, 2621, -4959, 1729, 2857, 2320, 7511, 2792, -3208, 4149, -6273, 1541, 2329, -3033, 2671, 2724, 8062, 7413, 3200, 2596, 4524, 6012, -357, 3085, 5625, -4105, 591, 4434, -6247, 4443, 1162, 1187, 4254, 3460, 2887, -3139, 1603, 370, 2776, 1068, -2698, -1209, -6804, 2585, 1970, -2884, -1998, -27, -8175, -6659, -299, -168, -1246, -2861, -4424, 379, -276, 3730, -1605, 8509, -2814, -4307, -274, -151, 2063, 310, -3130, 2040, -4299, 2175, -3929, 1998, 3831, -2254, -3727, 2143, 754, 2791, -711, -3732, -1695, 5086, -3070, -58, -6215, -3480, -4599, 4069, -5493, -7127, 2695, 3347, -3255, 3697, 5207, 3058, -4825, -451, -3341, -9153, 4555, -1006, 4669, -202, -3088, -2574, -2615, 2512, 1545, -1763, -439, 6614, -4422, 4844, -2051, 2575, -6344, 3369, -5329, 337, 658, -2679, -175, 4710, -753, 3733, 4626, 6085, -456, 3896, 9011, 3672, 236, 6449, -3478, 38, -3009, 3634, -1719, 2821, 2891, -7607, -2138, 2385, -5067, -4660, 4810, -2677, -914, 1049, -316, 2984, 4133, 3666, -3739, 3002, 2165, -8151, 2398, 809, -2990, 1232, -2693, -1725, 4653, 5866, -1986, 3918, 12, -3228, -4626, -5535, -311, 4457, -3412, 537, 2403, 3487, 760, 2140, -6206, -2284, 1955, -2565, -2901, 1469, 4357, -3087, 3594, -4204, 46, -1704, -8552, -2787, -4253, -1401, 2930, -1772, 3639, 2657, 2574, -447, -5469, 3111, 666, 1470, 3044, 3813, 1775, 3573, 4092, 4522, 1498, -321, -337, 389, 2238, -1054, -1596, 4798, -2220, 5150, -1980, 3517, 1936, 2009, 5079, 861, 6417, 1739, 1935, 4702, -42, 1237, -3659, 3994, 2765, -1327, 2677, 2069, 794, -5028, 1542, 1011, 767, -1720, -1576, 6765, -401, 2460, -4034, 6700, -2673, -6711, 3240, 1302, -252, 1726, -2864, 1031, -329, 1978, -6254, 0, -1773, -2005, -5826, 1465, 2765, 4623, -4242, -4274, 104, 1765, -1839, -1418, -2928, -1559, -3092, -1151, -4199, -3232, 2883, -6542, -989, -3270, 1175, 194, 395, -1149, 10, -9353, 3316, 4707, 2493, -3211, -209, 3383, -3757, -1060, 1862, -3068, -3487, 4291, -2165, 4279, -600, 3358, 1255, 2371, -157, -2236, 3700, -3093, 5469, 4992, 463, 3053, 3946, -4648, 17, 40, 3408, 5348, -4389, 4954, -3930, 258, 530, 554, -669, 3550, 1540, 6071, -3491, 5685, 831, -8388, 4281, 1270, -3364, -1930, -830, 3829, 2967, 2799, -622, -3539, -1328, -1665, -6392, -3280, -5807, 1580, 839, 4806, 4482, 4770, 1424, 1001, -1201, -2720, -5505, -3443, 5547, 5749, -686, 3382, 5991, 914, 1219, -2413, -4900, -7470, -896, 1065, -5070, -4994, 3746, -2136, 5506, -5190, -3470, 605, -5610, 1139, 425, -4798, 6785, 3687, 2996, 880, 4137, 557, -6451, 3283, -3853, -2512, 3827, 912, 2755, 8036, -2117, 7321, 4168, 852, 4167, -3212, -3286, -1597, -1895, 6069, -4138, 3265, 519, 1196, -872, -324, 5604, -221, 2559, 3267, 172, 3356, 263, 4828, -1389, 4565, 2, -2559, -1101, 4666, 223, -5531, 2229, -327, -3220, -2386, 1368, 3764, -849, 5145, -45, -2572, 821, -1707, -221, -1987, -1861, -1917, -4465, 1160, -439, 2422, -4299, 1396, -950, -2862, -7253, -4525, 436, 4034, -875, -4333, 7680, 8927, -2441, -4045, -5196, -941, -2453, -1874, 834, -6933, 2848, 6838, 9577, 3724, 4420, 5775, -3960, 2606, -4207, -4431, 2548, 658, 2377, -3965, 1608, -6575, -7999, -121, -1190, 1937, 4035, 6724, 1656, 8254, -3531, 232, -1526, -1974, 6706, -180, 4702, -1114, 6924, 6761, -2700, 6910, 4222, 6848, -3261, -1204, 6666, -4367, -599, 1492, 3463, 3921, -5121, 1845, -4408, 5919, -4263, 825, 59, 8043, -2176, -2347, -4325, -55, -525, 288, -2766, -2897, -1871, 7726, -1693, 3152, 0, -5300, -6094, 11156, 961, -432, -3694, 3106, 624, 3906, 4431, 5793, -2275, -563, -5637, -5132, -5788, 2209, -1313, -2270, -154, 8722, -4973, -4314, -6936, -4222, -5685, 3410, 829, -2048, 2281, 5920, -3674, -997, 2475, 2271, -7041, -7364, 2315, -2991, -1461, -729, 3411, -3585, -1709, 4218, -417, 3262, 193, -1489, -1956, 4503, 361, 4352, 1218, 1070, -2333, 5374, -555, -4781, -1419, -3482, 5441, 362, -1169, 6467, 1646, 5013, 6740, 1040, 6103, 3522, -1698, 6724, -2569, -1903, -2134, 5462, -6532, 4386, -3879, -661, -2480, 3595, -4116, -7970, 10316, 6000, -1954, -636, -577, 5462, 2066, 5755, -8982, 2351, 5730, -5790, -2776, -3181, -7769, 5190, -7303, -5602, 727, 3851, -8580, 733, -2238, -2977, -382, 1247, -4233, 7696, 768, 2679, -1124, 2049, -495, 2576, -8164, -583, -3596, -3578, -3960, -5851, 2777, -1352, 2612, -1051, 4148, 3476, -7220, -174, 0, -4461, 7079, -730, -957, -265, 76, -4036, -2825, 1318, 143, -1668, 1504, 4967, -407, 6737, -2390, 8009, -3714, 3806, -351, 2076, 3082, -270, 3064, 5702, 242, 4352, 3799, -447, 1243, 2793, 5562, 2263, 1340, 2415, 3744, 668, -341, 3646, -840, 3745, -2638, -3602, 2906, 3724, 1886, -6241, 4000, -1653, 1371, 1049, -120, -404, 3578, 5551, -3616, -32, 1916, -5633, -1127, 2716, -1397, 1403, -3026, 201, 2643, 6533, -1949, 2266, -3991, -494, -4557, -2258, -3053, 6212, -1241, -3369, 1325, 2712, -213, -1058, -2927, -2601, 875, -1065, -5036, -2189, 4391, -4932, 2330, -431, -3259, -374, -10301, 3810, -5147, 789, 11662, -4299, 7536, -2800, -2814, 2380, -6105, 2147, 2538, -2735, -3033, 2236, 2275, 5797, 1695, 5728, -1018, 264, -573, -1078, 112, 175, -811, 9295, -1928, 2691, 2200, 1204, 6637, 4861, 3074, 4869, 3342, 5134, -2538, 3973, -959, 2480, -398, 3278, 1768, -2813, 2147, 3912, -5354, -7175, 1379, -736, -3936, 903, 290, 2645, -70, 892, -2993, 3233, 545, -4943, 1471, 621, 1920, 2036, 2378, 1375, -4293, 4531, -118, 683, 637, 3743, -3248, 469, 158, 6424, 1507, -4548, 5706, 2435, -835, -424, -3745, -3095, -96, -2192, -4830, -2264, 127, 1396, 4090, -4407, 592, -435, -3257, -1773, -1406, -756, 6134, 2597, 4971, -4387, -1827, 149, -1628, 3476, 2798, -5507, -396, 1945, -2209, 2989, 2755, 7219, 3640, 2584, -312, -2660, -3027, -2449, 2052, 5606, -331, 4199, 1819, 4041, 6626, -2385, 3647, 7053, -3599, 10710, -1416, 234, -1536, 1966, 3218, 2840, 2323, -1005, -41, -1387, -4332, -4220, 5486, 1508, 3830, 1514, 888, -2258, 3759, 1030, -4628, 2079, 4248, -3532, 792, -3586, -3877, -1031, 1093, -1577, 6026, 2698, 1637, 549, 1408, -2998, -8027, -4097, 1681, 4070, -1551, -124, 4889, -1131, -2765, -252, -6176, -3033, -2165, 1877, -3405, -1067, 5848, -4096, 4937, -1994, -2775, 4763, -8399, 1625, -634, -2364, 2842, -597, 9204, -1967, -838, 4953, -2590, 1120, 964, -827, -3518, 4767, 3750, 8366, 581, 6791, -2328, 2644, -296, -3250, -1277, -2801, 2317, 6863, -2530, 3753, 2892, 4219, 1589, 1599, 6489, 4462, 6614, 5749, -3600, 3823, -1429, 1221, -932, 5337, -266, -6930, 1660, 7771, -1414, -6016, 1197, 1541, -2480, -2188, 1722, 4424, -3321, 2343, -3153, 3431, 1646, -3504, -699, -2630, -150, -118, 1179, -818, -3002, 5409, -2270, 1095, -747, -1843, -3852, -634, -192, 4819, -2168, -20, 3086, 2217, -1189, -12, -3851, 431, 3353, 3633, 654, 1929, 348, -1903, 3888, 61, -2573, -3091, 1650, 321, -4348, -6027, 1806, 1303, 8163, -2524, 1554, -3518, -2305, 279, 4897, -1047, 5347, 590, 4544, 4168, -110, 7817, -1649, 3766, -813, 1088, 5476, -505, 2476, 3698, -1862, 4877, 2098, 5038, 6248, 1953, 6848, -1848, 6733, -7474, 5022, 8791, -3108, -4129, -7591, 2734, 2900, 2786, -5654, 5155, -1601, -3874, -2058, -2740, -4171, -1873, -303, 443, -1047, 3384, 2723, 6119, -4154, -4134, -204, 6368, -2634, -1173, -4429, 3790, -3987, 4273, 6593, 1398, 2933, -2051, -4831, 2421, 42, 1073, -3625, -5243, -1116, 6333, 0, 663, -3460, -3397, -2519, 1058, -3106, -5299, 1854, 5270, -3549, 5206, 4505, 2879, -9935, -2722, -4396, -8649, 4827, -2476, 2712, -395, -6338, -5209, -3035, 2693, 1043, 1857, 2404, 7342, -5410, 5240, -524, 3153, -2903, 694, -496, 1044, 2752, -4352, 1099, 4981, -2530, 4314, 2692, 5156, 203, 2235, 8113, 676, 1950, 4094, 114, 2748, 861, 5462, 39, 6697, -1308, -2569, 1109, 2733, -2331, -8630, 5321, 4442, 2908, 3651, 1159, 6514, 1872, 820, -2806, -1802, 3458, -6048, -4285, -1380, -1260, 2669, -3079, 913, 3572, 4714, -1805, 1552, -3916, -1558, -2619, -4854, -3649, 4791, -2544, -2380, 4579, 738, 3845, 2336, -91, -1288, -2042, 1646, -2920, -1370, 1939, -2532, 289, -4924, 562, 52, -1636, -6427, -2326, -433, 3391, 62, 8089, -743, -2893, 5913, 954, 4646, 400, -1364, -315, 4362, 3303, 6195, 1652, 3167, 4113, 3890, -786, -2305, 1652, -5382, 2071, 5865, -2344, 4170, 2862, 518, 3599, 3311, 2588, -3007, 1461, 7288, -105, 1294, -1177, 1289, 213, 6302, 2217, -5362, -771, -656, -7824, -7264, 3464, 2260, 760, -1999, -2036, -1071, -1093, 3578, -2681, 6589, -517, -3578, 2272, -3170, -301, -1670, -3321, -2115, 3674, 6447, -4439, 3848, 2201, -1443, -8564, -1778, 533, 5887, -3662, 3248, -2136, 2773, -3180, -2723, -6462, -4960, -418, -1443, -4532, -2189, -3173, -6038, 3218, -4964, 268, -1418, -4709, 1395, -1819, 1443, 314, -894, 6059, -1821, -6092, 1022, -4134, 4418, 1573, -5326, 1888, 1476, 2052, 2809, 649, 10598, 4273, 658, 1546, -1615, 2759, -641, 4054, 371, -1971, 6231, 843, -1571, 4010, 4550, 4216, -2388, 751, 520, -98, 6208, -1260, -8204, -3004, 4475, 6432, -1682, -1221, 3528, -784, -2951, 2728, -4880, -1804, -1093, 562, 868, 140, 2679, -7498, 2392, -212, -4649, 5201, -2132, -2106, -5304, -109, 3271, 1336, -905, 722, -1023, 1175, -3974, -5373, 299, 3842, 3155, -4089, -4299, 1863, 1663, -34, -2020, -4446, -213, -807, -736, -4476, -2913, 7126, -2188, 6618, -1164, 2535, 5651, -9306, 1671, 2645, -5894, 6080, -500, 7099, -5996, -2775, 2703, -6732, 2587, -1094, -555, 2005, 4396, 3921, 9610, -5308, 7576, -1356, 1627, 2243, -4096, 472, -84, 6386, 5615, -2239, 4047, 4443, 5216, 3192, -1801, 4794, 4865, 1305, 9683, -2019, -84, 460, 5797, 5138, 4679, 344, -643, 2051, 8437, -2091, -5234, 2330, 5631, -3612, -4411, 1405, 1420, 155, 6820, 1755, -1417, 3385, -3105, -6956, -11, -2755, 3544, -689, 452, 3155, 4936, 1576, 2400, -6163, -961, -6573, -4123, -5684, 9391, 5584, 174, 3169, 4425, 4222, -985, -9136, -490, 3466, 2438, -294, -1752, -347, 4141, 2606, -5667, 3685, 1692, -11137, -4392, 2101, 6100, 4257, 6723, 5788, 4851, -508, 1807, -2457, 1049, 3812, -6478, 2371, 1269, 5114, 4567, 752, 11665, 4140, 3995, -328, 438, 6594, -5240, 9386, 3087, -2341, 6792, 4981, 960, 9347, 4209, 3202, -1182, 403, -38, 848, -187, -3794, -4426, -3297, 4327, 3517, 4730, -1733, 284, -1759, -6764, 3439, -5443, 317, -6142, -5838, 3856, -412, 4381, 509, 7616, -2155, -6817, 2406, 1910, -914, 1785, -6038, -703, -1618, 4198, 639, 252, -1080, 3147, -6026, 262, -3173, 5306, -3019, -1942, 2426, 2353, -6918, 492, -10974, 203, 26, 3104, -2411, -651, 4745, 1589, 4592, -439, 1060, 3198, -7158, 5201, -3657, -687, 6352, -3636, 3824, 2225, 1806, 33, -3626, 1026, 2150, 3213, -2099, 4489, 1307, 4625, 1262, 3810, -2607, 449, 220, 302, 3604, -1203, -2250, 6832, -1670, 5309, 855, 1879, 319, 3088, 6207, 919, 3760, 5664, -2832, 1330, -782, 4120, -3196, 4133, -455, -10514, 5544, 2335, -5139, -6993, 1472, -3047, -2635, -577, 933, 5478, 950, 4699, -5975, 2791, 1148, -4953, -2986, -156, 97, -1036, -2595, -1014, -3059, 3938, -5786, 1337, 3991, -3228, -1647, -340, -3949, 5176, -4668, -7995, 2648, 3787, -1959, 1916, -3447, -2951, -4551, -2147, -3631, -6961, 1520, 345, -4349, -626, 3026, 2629, -4892, -816, 2033, 2591, 5529, 2056, 3337, -5286, -2562, 5832, 1277, 2643, 2250, -7106, -3532, 3224, 3280, 5725, -453, 5557, 250, 6442, 2173, -3210, 5093, -2521, 9113, 1085, 734, 2338, 6141, 2241, 10487, 6145, 2697, 5630, -29, 6137, -3732, -77, -2067, -5148, 1262, 9208, 3799, -2124, -877, 7532, -5745, -6054, 8883, 3037, 2399, -3406, 732, 2804, 3318, 6032, -3504, 5285, 2423, -5678, 5295, -6352, -1749, 501, 344, 2469, 3873, 5069, -1986, -545, 632, -2192, -6120, 410, 361, 6438, -4636, -3337, 1382, -4397, 3817, 1511, -12073, -3709, 2479, 4382, 489, -5077, 2785, 5106, 4177, -4256, 2429, -1953, -7868, -1063, -932, 335, -331, -1657, 6532, 721, -1189, 2364, -2743, 905, 4712, 1227, 981, 4513, 5711, 8286, -4054, 9309, -978, -2065, -1752, 3251, 4776, -3634, 4078, 9415, -7259, 5535, 4450, 5078, 1557, 4697, 5036, -68, 1793, -1963, -2952, 2758, -399, 1677, -5607, 5924, -1767, -830, 3083, 8744, -4335, -7689, 961, -1719, 747, -8791, -290, 9402, -3553, 4935, 2097, 6866, -2209, -4679, -8034, 632, -1863, 4548, -2927, -2644, -9870, 4640, -3658, 4260, -1625, 2567, -1808, -3470, -8328, 4763, -1333, -2501, 689, 7551, -3046, 1877, -5955, 1151, -6097, -2481, -4551, -710, 707, 3383, -320, -3221, 1483, 2581, -8177, -1017, 710, -1014, 5090, 4891, 4984, -4455, -6992, 3099, -4793, 2200, 1029, -3203, -3314, 3751, 3120, 6053, -1063, 912, -1374, 5416, 2915, -2405, 853, -6457, 10673, 5363, -2289, 9400, 6825, 2918, 5021, 4273, 4133, 1600, -1926, 3558, 617, 3011, -5369, 928, -2285, 7021, 2026, -4308, -4187, 5059, -4625, -5342, 6884, -690, -653, -339, -3027, -5285, -506, 2765, -5632, 1978, 1432, -11432, 2678, -1298, -3900, 1495, -3456, -1170, 1939, 8433, 213, -399, 2118, 1580, -6347, -4287, -8847, 3960, -2077, 2300, -311, -3129, -5575, -3018, -13156, -5053, -4379, 5142, 1457, -7099, 5223, 6273, -2461, 3080, 4809, 5957, -6329, -138, 1235, -7587, 8372, 4248, -2769, 2860, -2066, -4805, 1214, 2437, 1004, 2987, 2531, 5050, -7318, 6600, -4870, -780, -3247, 850, -1565, 6203, 3628, -4343, 711, 4894, 213, 7283, 5071, 5808, 1248, 5475, 7104, 2753, 73, 5211, 1940, 1191, -7123, 7332, 920, 1665, -197, -6327, -4232, 2153, -2813, -7169, 6928, -2630, -1033, 4438, -6163, 3449, 5229, 374, -1286, -1028, 580, -7170, -2258, 581, -1878, -284, -3707, -1670, 5242, 9133, -1181, 2203, -4738, 3899, -7592, -9303, -6930, 6523, -410, -6808, 2430, 2983, -1277, -235, -4631, 1100, -1980, -740, -4953, 135, 1831, -811, 2364, -8436, -1892, -881, -7315, -1354, -715, 4157, 5790, -585, 3505, -1526, 642, 4329, 1979, 3472, 1662, 2295, 2398, 2557, 1905, 4830, 4337, 4719, 4512, 1249, 885, -1599, 8556, -695, 3874, 2117, 394, 5990, 775, -1025, 6421, 5365, 2651, -1, 1378, 4311, -3347, 613, -1615, -1844, 516, 5474, 2676, -1165, 2354, 210, -1573, -7030, 6782, 2993, 1855, -4235, 1077, 5265, 1679, 647, -2506, 3669, -370, -4263, -117, -761, -1308, -532, -1500, 626, 3240, 1795, -6898, -2467, 1932, -2230, -5966, 469, -336, 7430, -5636, -5090, 3605, -2723, -277, 511, -7894, -1537, -1521, -4615, -4497, -8404, 1203, -364, 7763, -851, -2094, 6096, -9987, 2007, -2318, -1983, 5813, -2541, -546, 2746, 3291, 6835, -2841, 3950, -3739, 1486, 3487, -43, 8263, 9126, -1791, 638, 25, -254, 1905, -57, 2851, -2964, 1877, 6034, -7048, 4614, 6321, 2626, 659, 729, 1831, -5963, 3025, 3074, 2000, 5786, -2631, -2052, -3517, 4702, 439, -10541, 338, 4817, 1349, -3208, -1143, -2019, 1021, -6182, 1048, 5213, -2976, 10621, -1179, 4148, -2856, -6111, 2709, -187, -2446, 2533, -5409, 1626, -569, 5084, -5885, -528, 3283, -2666, -7945, -2616, 894, 2966, -6160, -10350, -6536, 7117, 2740, -3115, -9572, -4394, -806, -1414, -4649, -1494, 1503, -5629, 1349, -1074, 2137, 6055, -8965, -498, -3713, 626, 1371, -2893, -8, 1397, -2279, 1564, -6190, 44, -190, 2867, -3292, -132, 1795, 3648, -1493, 7991, 1314, 799, -673, 525, 542, -6090, 6785, 3309, -7767, 6349, 4699, -2908, 2929, 5099, 1675, 1455, 285, 830, 5408, 879, 601, 2091, -2460, 6625, -2731, -986, 4152, 4163, -1483, -7617, 2929, 3698, 261, -359, -1830, 3617, 59, 8188, -4839, -3637, -200, -7804, -6273, -1310, -4231, 8025, -4986, 340, 2084, 5504, -3771, 1703, -2565, 1934, -3568, -4309, -6127, 4496, -2322, -7415, 3282, -2524, -1416, -1559, -2477, 1455, -853, 5797, 1573, 752, 5608, 4099, -1047, -222, -600, 5752, -7910, 5376, -3798, -632, 6042, -4147, 2750, -389, -1816, -4798, -6135, 3317, 3994, 1724, 1961, 4953, -2922, 6970, -900, -364, -2595, -1630, -2845, 4136, 5340, -2292, -2125, 5606, -2531, 5598, 3916, 398, -169, 5933, 4922, 2636, 3820, 2159, -938, 4297, -4746, 2251, -3676, 5851, 872, -4509, 1051, 7100, -2910, -7665, -1510, 1443, -2002, -8, -126, 6137, 5368, 112, 1382, -2323, -775, -5906, -5837, 5287, 1237, -748, -2086, 982, -1435, 3249, 2073, 2413, 296, 1981, -3328, -4978, -7379, 2655, -3597, -4467, 2692, 1943, -1776, -2598, -4036, 20, -3966, -10, -3327, -8293, 5256, 4636, 4007, 7206, 1683, 6569, -6985, -2111, 2921, -10103, 9154, -4874, -1692, -1285, 1890, -3227, -2152, 3470, -2241, 1691, -731, 5964, -3053, 7788, 2506, 380, -4746, 3461, -6, 1932, -3816, -1814, 687, 7142, 1554, 4792, 3830, 8724, -5454, -1664, 7248, 3835, 4602, 9894, -1029, -1889, -2856, 6654, 2867, 4041, -3939, -4105, -1278, 7059, 1603, -7373, 7342, 2928, -2231, 1171, 137, 4620, 3758, 6273, -3131, 2252, 2368, -5531, 1945, 1500, -4526, 3024, -4308, 586, -644, 8413, -5415, -2653, -804, -3499, -5114, -3647, -1515, 8042, -1322, -6902, -6271, 595, 1056, -166, -1635, -5398, 1365, -1840, -6360, -3570, 376, -4367, 8949, 1074, 3152, -1610, -2721, -2829, -1052, -8257, 2637, 2199, 6234, -655, 670, -972, -3407, 2809, 3413, -915, 1767, 4013, 1115, 4478, 3380, 5219, 3727, -1092, 1849, -5503, 455, -306, 1792, 7815, 149, 5160, -872, 998, 5582, 1622, 6022, 3811, 4952, 4212, -1110, 4469, -1665, -1083, 2688, 4750, 1676, 4215, 196, 6393, -226, -4210, -320, -1280, -2344, -2595, 2461, 2771, 842, 459, 2709, 1408, 4, 919, -5933, 1681, -6081, -3295, 3399, 4901, -4128, 3004, 4859, 3200, 2351, -989, -7993, -5716, 331, 5268, 1774, -352, 4442, 4373, -1708, -723, -451, -6236, -5322, 4685, -298, 4016, 1813, 3245, -763, -4197, -760, -200, -4496, 117, -3680, -1112, 5509, -808, 7784, -595, 278, 2886, -3557, 2352, 3797, -2989, 1607, 4917, -1434, 5162, -1448, 6298, -2737, 4003, -2947, -947, 1667, -1527, 1434, 8375, 542, 1487, 1971, 1225, 1319, -1539, 5218, 7241, -1169, 7671, -4007, 137, -4475, 3943, -1939, 2937, 2357, -6831, 222, 1418, -7908, -7242, 4932, 2546, -101, 1370, 1107, -1388, 4256, -1216, -1892, 2826, 3399, -2804, -1144, 719, -2248, -3242, -1249, -4191, 495, 3512, -1229, -662, 2932, -2073, -2591, -549, -5555, 6208, -3095, -949, 5213, 1930, -1231, 717, -6211, -1465, -2232, -1309, -6518, -515, 2463, -2694, 4308, 163, -3872, 3068, -9978, 3731, -1533, -462, 6192, -4651, 4739, -2417, -287, 991, -8651, 2719, -751, 806, 438, 3039, -963, 5578, 1560, 3128, 3468, 2497, -1178, -744, -760, -4190, 1636, 8115, -6073, 5416, 1820, -680, 5090, 5186, 4558, 516, 3517, 6334, 6, 6977, -3506, -1081, 1397, 4144, 2098, -8986, 1396, 2241, -2919, -4226, 3153, -1538, -1677, -3259, -456, 1851, 64, 4848, -3753, 3939, 298, -6078, -1019, -691, -3143, -2253, -3070, 1583, -2717, 3959, -1074, -752, -114, -1572, -7512, -1715, -7572, 3783, -4908, -8773, 1461, -494, 70, -2452, -2134, -1845, 2747, 3088, -4932, -2821, 1474, -7247, 3772, -4410, -3962, -511, -3543, -1959, -3679, -428, 5134, -2691, 4115, -2521, 993, 1834, -2661, 3348, 1605, -4441, 3686, -1809, 746, 868, -3303, 9392, 3133, 2359, 3495, -2418, -3750, 643, -1483, 3072, -1041, -549, 3056, -150, 3089, 205, 3798, 921, 2384, 1924, 979, 1551, -1386, -278, 2711, 3332, 5739, 10, -4482, 1475, -205, -2367, 4341, 1753, 1717, -2331, 510, 1750, -1369, 746, -867, 6347, 805, -3668, 3878, -5428, -2414, -808, -1308, 3653, 3638, 2710, 608, 960, 341, -2097, -9136, -1915, 4568, 5307, -1126, -2639, 1834, 1855, -387, -555, -5039, -1788, -3786, 500, -1000, -5562, 6068, 4330, 4151, 1695, 769, 5485, -6680, -2756, -1568, -8451, 1546, -6438, 2989, -3840, 1792, -346, -3158, 2447, -1601, -3499, 3410, 6936, -2081, 8465, -2388, 2517, 180, 356, 3509, 1955, 2861, -350, 2072, 2738, 100, 4259, 5489, 4689, -1318, 638, 8050, 68, 1634, 8244, -2503, 2456, -5501, -1255, 1685, 7777, 1889, -1372, 1801, 6333, 1108, -6955, 2982, 2996, 599, -480, -832, 2711, 303, 2590, -4681, 2882, -936, 251, -3268, -1517, 1445, -4924, -5766, 4043, 1739, 3537, 1357, -1055, -3683, -436, -9435, -971, 531, 7808, -1147, -3889, 5017, 204, 322, -3439, -10046, -4033, 283, 873, -3315, -242, 2968, -3617, 3354, -3573, -899, 875, -5467, 1839, -4992, -2816, 5912, -988, 4856, 821, 1250, 3126, -1394, 3594, 2755, -1422, 1560, 2958, 813, 2307, 4048, 1021, -1862, 1552, 1024, 2969, -838, -2239, 710, 8607, 160, 4042, 671, -181, 2279, 2665, 3912, 612, 3184, 5442, -2624, -4300, -2385, 1242, -556, 2485, 1605, -8405, -503, 305, -3031, -6898, 6643, -834, -2171, 640, 510, 2595, 811, 1839, -3217, 3825, -1612, -2594, 1054, -2691, -2268, -1611, -1738, -321, 579, 4511, -4979, -1447, 3992, -3256, -6366, -2964, 685, 6538, -4482, -4997, 58, 2779, -1935, 569, -7650, -2591, -3339, 2218, -7984, -2021, 1078, -3047, 2792, -2050, -2783, 329, -2447, 1485, -1564, -5809, 6075, 2170, 1156, -3475, -2251, -3606, -1476, 216, 1572, 2600, 446, 1308, -3229, 6475, -1560, 3697, -172, 4877, 3524, -6416, -1798, -197, -1155, 7138, -36, 6933, 1734, 3026, 1420, 731, 5222, 5259, -1611, 3578, 113, 1170, -1186, 3727, 151, 3055, 1364, 3517, -6892, -38, -1038, -4386, 6731, -1364, -2624, 2072, -877, -4228, 3068, 598, -1517, 609, 3405, -2928, 1989, 912, -4050, -1321, -2782, 678, -14, 3412, 2406, 2999, 3692, -285, -8070, -3748, 6162, 2941, 3025, 5797, 617, 4475, -1821, -3261, -2058, -7582, -1893, -2227, -8981, -4562, 1183, -2326, 2785, -5623, 2342, 2262, -6702, -1496, 464, -3776, 4881, 1682, 6162, -5011, -5828, 2225, -3392, 4107, 1007, -7785, 303, 4482, 3018, 7624, -2020, 7459, 259, 5663, 2098, -5598, -4094, -2917, 7049, 4757, -2325, 4891, 3115, 4381, 6874, 1799, 5871, 3532, 524, 8513, -1014, -999, -2974, 3248, -239, 5651, 3339, -4319, -972, 2248, -4897, -7363, 10067, 1122, 4855, -1021, 808, -789, -1380, 5655, -8266, 3606, 4712, -6405, 5781, -5585, -3317, -270, -302, -1350, 4118, 5560, -5621, 15, -1202, -1331, -6480, -641, -2953, 6684, -1077, 1015, 4553, 612, 1609, 1696, -11581, -333, 3591, -1190, 371, -334, -103, -2081, 4207, -3456, -5282, -1021, -2463, -1702, -3500, 2180, 2864, 5467, 11409, -1840, -2868, 4116, -5003, 259, 2729, -5289, 1492, 2352, 3650, 5482, -410, 5524, 3614, 3894, 1898, 1122, 2970, -1887, 7650, 3961, -3067, 2201, 2778, 6654, 9882, -357, 3253, 3818, 3463, 1045, 1098, 6845, -1373, -1246, -1231, 2635, 2151, -2594, -362, 2354, -4485, -3615, 2543, 703, 2894, -4130, 2402, -2629, -2300, -514, -5082, 9706, 224, -4726, 2029, -4458, 1331, -69, 2999, 611, -2079, 3025, 827, -2141, -264, -3091, -4379, 2948, 1546, 1697, -2432, 1758, 1856, 2770, -2842, 281, -4715, 1232, -3641, 2222, -4239, -4909, 10224, -4213, 4668, -274, -148, 5864, -7846, 151, -2958, -7257, 4679, 350, 5025, 985, 799, -1969, -3669, 3291, 1626, -3061, 839, 3916, -7761, 2104, 1489, 3857, -5159, -401, -286, 1432, -7657, -282, 1183, 919, -1829, 718, 3279, 3941, -2813, -1521, 5682, 5947, 2512, 8428, -2769, 449, -363, 5142, 3606, 3468, 4199, -4926, -2433, 2718, -2871, -3944, 6679, 6512, -1117, 4897, 3221, 1615, 2697, -1166, -4212, -834, 3042, -6242, -122, -1047, -4057, 359, -718, 363, 7877, 3709, 245, 890, -1946, 1769, -5064, -3921, 870, 6481, 86, -1189, 1097, 228, -605, -314, -2929, -160, -6281, 103, -11861, -6669, 840, -5249, 4384, -2768, -2112, 5306, -7939, 1226, 706, -7351, 8470, -1481, -2936, -2643, -1548, -222, -5265, 2677, -1086, -582, -2947, 4529, -2964, 6762, 44, 5968, -2274, 1146, -1555, -1577, -4631, -1948, -954, 4741, 3519, 1502, 3469, 1787, -2132, 1747, 4829, 3733, 371, 9953, -61, -4153, -4877, 4291, 4201, 2128, 1751, 455, -730, 3566, -1266, -5333, 2335, -727, 6188, 4889, 943, 765, 2494, 1252, -7634, -294, 4205, -2134, 5462, 40, -1613, -3211, -2845, -861, 2620, 3130, -412, 2225, -208, 1933, -9583, -2843, 313, 5155, -1506, 372, -22, 845, 669, -3116, -2162, -4227, -6038, -321, -2824, -5229, 3328, 3276, 3590, -1892, 2916, 8065, -7537, 1753, -38, -1350, 8884, -3133, 4823, -156, -1004, 5199, -377, 4059, 105, -2027, -648, 3265, -296, 5552, -1193, 3398, -268, 1756, -1302, -2409, 3129, -2832, 4308, 4172, -647, 6036, 1906, -235, -1998, 1326, 2477, 5465, -3322, 11566, -4258, 6914, -1302, 7566, 600, 6297, 3224, -7487, -178, 3577, -739, -9214, 8848, 5207, -1416, 1986, 4285, 1483, 1508, 5667, -2206, -1601, 3424, -7610, 2155, -1299, -4793, 3552, -2314, -2517, 4741, 5256, -5727, -470, -2390, -1095, -2675, -2300, -8162, 7044, -2220, -2515, 2856, 1459, 1292, 463, -5938, -4026, -2571, -542, -7163, -3033, 5317, 1713, 3134, -3599, -2988, 876, -11938, 4195, -2195, 57, 6237, 3790, 8859, -1456, -1475, 1233, -3865, 2922, 1174, -2441, 2838, 3734, 5120, 6670, 2285, 6196, -738, 3484, -253, 5, 696, -2668, 6712, 5752, -4884, 3215, 4900, 520, 2542, 5162, 5675, 3112, 4756, 3656, 4147, 3763, -692, 5399, -873, 5197, 2612, -9544, 2521, 5094, -5726, -6449, 2196, 4094, -2807, -2593, 2506, 3297, 698, 5023, 402, 3275, 2070, -9242, 171, 448, -1671, 477, -1220, -264, 1189, 5592, -6323, 2495, -229, -750, -3012, -2328, -4896, 4374, -301, -2568, 87, 4365, -2172, 441, -4626, 771, 933, 1518, -3879, -2664, 656, -1785, 5838, -3792, 1161, 2204, -8107, 366, -822, -2994, 8559, 3043, 2686, -663, -242, -102, 1560, 1778, 1148, 4517, 413, 1738, 1445, 4596, -1723, 10189, 984, 2553, 3960, -2806, 2169, -926, -491, 10850, -1932, 5434, 3249, 131, 6476, -313, 3184, 667, 960, 4620, -692, 1046, 4223, 2458, 188, 3652, 164, 4446, -4788, 2287, 322, -7306, 3115, -3602, -6020, -5, -1007, 3558, -807, 5710, 1697, 2999, 975, -2293, -525, 892, -3203, -278, -1431, 3215, -3177, 5777, 2687, -630, 1453, -2138, -7487, -1332, 5813, 4472, -3215, -7681, 2039, 3169, 3045, 1118, -3362, -6058, -1157, -200, -6578, -4619, 1837, 73, 2940, -4840, 2453, 2385, -4411, -3187, 1721, -1344, 4442, -2223, 114, -2323, -1657, 7110, -2782, 2449, -277, -3965, 1792, 2157, 3686, 1740, 2688, 1741, 4015, 4410, 1864, -3512, -1726, -4825, -671, 2312, -1265, 3959, 4302, -1254, 6104, 2097, 4498, -2993, -1228, 6990, 627, -724, -2322, 820, 1996, 2047, -333, -1026, -380, -1541, -2167, -7251, 11070, -3577, -334, 927, -3106, 3212, 529, 7710, -9309, 1140, -666, -5502, 2571, -4780, -4465, -198, -3890, 1603, 7770, 2657, -6293, -2510, 659, 3974, -10089, -3450, 4336, 8734, -2025, -89, 2311, 1541, 154, -992, -10228, -3713, -729, -3633, -1555, -1401, 1123, 2254, -2601, -1730, 1737, -2278, -2753, -1773, 496, 2052, 8220, 2853, 743, -3166, -663, 213, -2817, 1833, 1491, 2693, 681, 4474, 733, 3064, -243, -42, 365, 1146, 460, 1380, 3350, -4215, -1219, 5446, 1412, 4337, 2873, 982, 7492, 4180, 2759, 1333, 1997, 4632, -2152, 608, 597, 252, 2370, 4506, 215, -2419, 1255, 745, -3131, -5001, 3862, 2108, -376, -3103, 494, 3499, 3342, 1535, -2038, 2553, 862, -3603, -2558, -348, -816, -160, -3038, -945, 1922, 2544, 20, 1787, -1498, 2322, -8540, -4453, 820, 4822, -2587, -411, 6237, -1267, -3610, -3401, -5616, -1987, -1348, -243, -6092, -5229, 6322, -1793, 3278, 1087, -3463, 3115, -8027, 3202, -1279, -4145, 12441, -605, 2365, 848, -450, 170, -3307, 4438, 3971, -37, -1584, 6405, 3615, 8735, 3751, -600, -4805, -429, -830, 3859, 4624, -3769, 3916, 8884, -4341, 6359, 6516, 2581, 729, 2604, 4197, 1099, 2598, 3636, -1122, 5769, -3571, 355, -2727, 2148, 2411, -5552, -1234, 4630, -4126, -7193, 3018, 1216, -3931, -1822, -1311, 1800, 2656, 4721, -2545, 5820, -380, -7311, 306, 4916, -2166, 3778, 136, 2632, 1028, 2996, -4735, 2867, 6000, 895, -5015, -2357, -2041, 3398, -5514, -4681, -2444, 1327, -3058, -1020, -7023, -3238, -1478, -1100, -5157, -1904, 1255, -4573, 1299, -2051, 2626, 3490, -6166, 1715, 271, -6173, 7477, -537, -1612, -1006, -3531, -4243, -3892, 5734, 2350, -1736, -3826, 3390, -8129, 2883, 709, 1832, 6178, 825, -667, 960, -5506, -2114, 2683, 6331, 3616, 3761, 1616, 3287, 4001, 2310, 7039, 7939, 4567, 8247, -1058, -3560, -5464, 3433, 6309, 3163, -3974, -1374, 2106, 6209, -2507, -7534, 3603, 328, 6606, 1904, -3246, 836, 7244, 74, -2199, -4466, 3335, 491, -1165, -3035, -5854, -3861, 720, 205, 4135, 4296, -756, -1296, -2588, 4248, -7247, -3419, -5035, 4667, 1123, -1278, 4963, -607, -454, -2490, -2083, 2073, -2399, 300, -8555, -5283, 4343, -4125, -1091, -6906, -157, -348, -5348, 1756, -577, -2453, 3047, 1192, -1194, -1753, 1400, 720, 541, 5662, 2834, 6, 385, 1907, -5729, 3695, 4314, 2062, 3535, 7505, 4116, 2530, -6967, -2378, -5947, 5414, 4702, 2415, 264, 2609, 4255, 2494, 4568, 2619, 1885, 6260, 1284, -2879, -4401, 4296, 5207, 2589, 2878, 1001, -2771, -1735, -4328, -8108, 5242, 3554, 2146, 5726, -256, -2598, 6388, 809, -916, 1677, 2893, 1372, 3840, -6195, -1591, -3551, -3451, 3240, 3841, 1033, -2684, 932, 627, 3500, -10159, -2821, 2214, 8703, 282, -1654, 3351, 1730, -1956, -2501, -5360, -3778, 715, -1403, -4046, -1253, 2011, -3141, 8429, -1283, -2312, 6260, -4848, 5045, -8712, -1725, 8978, -5518, 3093, -4016, -2010, 2427, -7664, 655, 1934, -1938, -1203, -137, 5576, 6309, 828, 6050, -1702, 694, 2258, -2047, 1108, -737, 1165, 9589, -4565, 3827, 1972, 1172, 2783, 2496, 3683, 4690, 2921, 3213, -786, 226, -1951, 857, -2373, 2074, -231, -6993, 3215, 4705, -2926, -3758, 1966, 1886, -2475, -1668, 547, 3528, -44, 4774, -1211, 3341, 294, -7051, 2088, -164, 232, -296, -943, -347, -227, 6302, -3046, 361, 1336, -1689, -6169, -2144, 511, 5685, -3629, -6399, -4657, 1569, 2311, -335, -3723, -2370, -1276, -1773, -7836, -382, -1707, -4297, 4565, -8821, -3710, -44, -6705, -242, 2670, 22, 8031, 2670, 4945, -2507, -205, 3414, -4201, 3021, 3833, -4812, 3069, 1415, 3051, 2982, 1719, 6366, 5215, 3146, 1471, -1778, -3449, -1945, 2744, 3535, -1150, 4002, 558, -5094, 7688, 668, 4118, 3533, 2234, 3000, 46, -1465, -1576, 231, 3169, 4334, 5566, -1452, -1925, 1180, -2038, -7171, 8588, -2463, 5150, -3841, -92, 3405, 1966, 4079, -2573, 3773, -1056, -1994, 1657, -5230, -2728, -1665, 2846, 3389, 2108, 1905, -3598, -145, 1383, -5167, -9746, -621, 4924, 5417, -180, -679, 6599, -3739, 770, -1974, -6570, -326, -153, 3458, -5454, -2802, 4930, 75, 3889, -4329, -1348, 1710, -7673, 1444, -104, -2420, 4206, -2540, 3844, -2503, -1703, 488, -4167, 2710, 2353, -2119, 3082, 3520, 4559, 5324, -3688, 5648, 3562, 2765, -1549, 889, 3107, -216, -397, 3338, -974, 2144, 3833, -1019, -419, 2090, 6239, -3200, 2873, 1403, -725, 1767, -1728, 3247, -317, 5713, 1251, -6427, 2019, 6094, 1324, -7430, 4334, 2503, -377, -1905, -2481, 4909, -1288, 5658, -24, 186, 628, 42, -523, -387, -4285, 1258, -4730, 1094, 1387, 2268, -5506, 903, -1135, 3137, -6500, -3770, 1175, 6174, 975, -4068, 3065, 2562, -5, -851, -6928, -417, 978, 804, -4921, -700, 5595, 4225, 6063, 4760, 1407, 6763, -5899, 4944, -606, -7407, 2070, 888, 6480, 2014, -382, -10366, -8377, -4097, 925, 7163, 2886, 8593, 3924, 5768, 5757, -64, -2248, 1069, -3097, 2100, 5205, -1643, 200, 5530, 885, 4454, -887, 1593, -51, 3592, 9958, -2813, 7108, 1177, -761, -4132, 27, 6942, -5723, 1728, -6249, -9590, 1535, 3636, -1750, -7752, -809, 1981, 1335, -5559, -343, 5844, 284, 2780, 1112, 5698, -3632, -4080, -1982, 7634, -5040, -4281, 509, -887, -2383, 2012, -437, 1383, -598, 2614, -6382, -2851, -5653, 3591, 2671, -9338, 155, 419, -1744, -1208, -89, -1328, -4557, -2046, -6364, -4675, 794, -2559, 5027, -3493, 1416, 958, -5875, 2544, -3986, -2439, 2358, 2980, 8334, -4836, -1126, 1039, -4724, 3062, 2819, 1101, 532, 3538, -216, 6392, 1833, 2525, -1231, 2848, 1122, -2042, -1080, -632, 4202, 7685, 1162, 960, 5905, -2385, 7674, 2988, 5629, 2749, 1637, 3546, 2513, 6378, -2279, 2102, 100, 6483, -1001, -4632, 4913, 1950, -1094, -6034, 4510, 4910, -1146, -1033, 1967, -2440, 4386, 5959, 958, 3160, 2061, -6322, -656, 3498, -6179, -3414, 364, 3778, 6534, 5383, -1292, 3882, 2597, 278, -7760, -1634, -5999, 6783, 1427, 5713, 2082, 8361, -2507, -562, -4293, -4644, -3792, -784, -1841, -7015, 674, 3368, -4505, -1566, 5039, 415, -8081, -6503, 7362, -2705, 1459, 2365, 11012, -5328, -4365, 6260, -1237, 3568, -329, -8380, 2787, 3476, 5539, 6367, -468, 4591, -1915, 7971, -1503, -897, 1698, -5182, 10261, 402, -2567, 5786, 6148, 2553, 8402, 1676, 3121, 8233, -225, 5667, -2987, 3419, -4261, 1481, 2563, 8539, 4054, 1789, -3496, 7162, -8020, -6123, 6699, 3151, -3053, -4848, 1680, -400, 1417, 6534, 797, 1469, 3924, -8109, 1390, -114, -5057, 3289, -1606, -971, 1860, 6622, -1989, 5039, -207, -1886, -1814, -1044, -9446, 7171, 185, -2137, 2575, -209, -2597, 2775, -13507, -4593, -3369, 1565, -5223, 8, 5818, -4640, 3419, -3829, 1552, -3514, -7003, -4318, 405, -3041, 2045, 1868, 2468, -329, -795, -90, -3336, 4257, -599, 837, 3071, 481, 2959, 4081, 3032, 6845, 649, 572, 5032, -4577, -3225, -1452, -159, 4224, 1359, 1164, 711, 4999, 2772, 2428, 5121, -2001, 2502, 413, 488, 1816, -145, 1529, 976, 3930, -832, 3210, -3560, 3769, -4106, -1787, 5355, 5904, -1023, 276, 4182, 333, 54, 4343, -3473, 271, 593, -3769, 1102, -761, -250, 410, -1137, 2417, 7632, 960, 2704, 862, 366, 2656, -7115, -513, -552, 4626, -2335, 19, -900, 4747, 889, -2913, -4867, -429, -5393, -158, -7517, 1578, 4494, -2810, -4580, -6525, 135, -1307, -10133, 1695, -2117, -177, 5454, 1190, 6179, -1033, -790, 5460, -1925, 3325, 1770, -1575, -2070, 3507, 2332, 4364, 7067, 1695, 1036, 3548, 369, -970, 1752, -2172, 4716, 8854, -1614, 4583, 4499, -39, 4950, 5010, 1952, 5998, 3361, 2044, -4217, 2275, 1705, -16, -581, 5898, 935, -7940, 4156, 4058, -4924, -8546, 6689, -392, -2943, -1015, -2736, 3145, -141, 1412, -4137, 2316, -518, -3409, -896, -5851, -2726, 1908, -2438, 1103, 219, 2723, -8010, -1568, 1440, -361, -5444, 520, -82, 7200, -3044, -1347, -791, 1963, 875, 680, -7817, -642, -3018, 4238, -2847, -1615, 4841, 4780, 2754, 530, -1876, 600, -10582, 1237, 2262, -1107, 7103, 381, 7108, 1801, 345, 677, -1360, 5759, 2698, -1860, -1330, 4862, 2457, 7633, 667, 4070, 525, 1793, 1257, -782, 1790, -2427, 1630, 6367, -3875, 6189, 4074, 5700, 1937, 2783, 4435, 1726, -32, 3984, -1910, 5306, -2945, 2182, 753, 5015, 2629, -4378, -861, 5414, -11168, -8612, 7714, 2943, -1120, -2453, -2108, -50, 515, 2259, -1874, 5218, 1506, -5212, -2254, -4258, -1429, 3684, -1330, -974, -1589, 4553, -3767, 2619, 1363, -366, -4747, -1127, -5500, 4755, 3, -1531, 2013, 1336, -2600, -2540, -8872, -2348}; +#endif diff --git a/c_reference/tests/mbconv/test_quantized_mbconv.c b/c_reference/tests/mbconv/test_quantized_mbconv.c index f86525b8b..dd1d31376 100644 --- a/c_reference/tests/mbconv/test_quantized_mbconv.c +++ b/c_reference/tests/mbconv/test_quantized_mbconv.c @@ -19,7 +19,7 @@ int compare_floats(const void *a, const void *b) { // Function for computing the deviation from the expected floating point // result and returning the largest such deviation found. -float compute_error(const INT_T* const pred, const float* const label, +float compute_error(const Q15_T* const pred, const float* const label, float* const errors, SCALE_T scl) { float epsilon = 0.00001; float agg_diff = 0.0; @@ -41,18 +41,20 @@ float aggregate_error(float* errors, unsigned len) { return errors[index]; } -/** Run this test using the following command: - * $: ./test_quantized_mbconv - * +/** * By default, all tests run without using bit-shifting operations. */ int main(int argc, char **argv) { SCALE_T XScale = 12, YScale = 14; - FILE *xFile, *yFile, *floatResFile, *outputLog; if (argc != 5) { printf("Improper Number of Arguments Provided!\n"); + fprintf(stderr, "Usage: %s \n\n", argv[0]); + fprintf(stderr, " : File containing a single input image in a numpy array of dimension (1, input_channels * input_width * input_height).\n"); + fprintf(stderr, " : File to write the generated output in a numpy array of dimension (1, output_channels * output_width * output_height).\n"); + fprintf(stderr, " : File containing the expected output in a numpy array of dimension (1, output_channels * output_width * output_height).\n"); + fprintf(stderr, " : File to write the error metrics and the results from the runtime analysis of the layer.\n"); return -1; } else { xFile = fopen(argv[1], "rb"); @@ -62,19 +64,19 @@ int main(int argc, char **argv) { } if (xFile == NULL) { - printf("An error occured while opening the input file.\n"); + fprintf(stderr, "An error occured while opening the input file.\n"); return -1; } if (yFile == NULL) { - printf("An error occured while opening the predicted output file.\n"); + fprintf(stderr, "An error occured while opening the predicted output file.\n"); return -1; } if (floatResFile == NULL) { - printf("An error occured while opening the expected output file.\n"); + fprintf(stderr, "An error occured while opening the expected output file.\n"); return -1; } if (outputLog == NULL) { - printf("An error occured while opening the output log file.\n"); + fprintf(stderr, "An error occured while opening the output log file.\n"); return -1; } @@ -131,11 +133,10 @@ int main(int argc, char **argv) { fputs(numpyHeader3, yFile); fputs(numpyHeader4, yFile); - INT_T* reshapedXLine = malloc(N * H * W * CIN * sizeof(INT_T)); - INT_T* output_test = malloc(N * HOUT * WOUT * COUT * sizeof(INT_T)); - INT_T* X = malloc(HF * W * CTEMP * sizeof(INT_T)); - INT_T* T = malloc(CTEMP * sizeof(INT_T)); - INTM_T* U = malloc(CTEMP * sizeof(INTM_T)); + Q15_T* reshapedXLine = malloc(N * H * W * CIN * sizeof(Q15_T)); + Q15_T* output_test = malloc(N * HOUT * WOUT * COUT * sizeof(Q15_T)); + Q15_T* X = malloc(HF * W * CTEMP * sizeof(Q15_T)); + Q15_T* T = malloc(CTEMP * sizeof(Q15_T)); float* xLine = malloc(N * H * W * CIN * sizeof(float)); float* yLine = malloc(N * HOUT * WOUT * COUT * sizeof(float)); float* allErrors = malloc(N * HOUT * WOUT * COUT * (sizeof(float))); @@ -144,18 +145,16 @@ int main(int argc, char **argv) { fread(yLine, sizeof(float), N * HOUT * WOUT * COUT, floatResFile); for (unsigned i = 0; i < N * H * W * CIN; i++) { - reshapedXLine[i] = (INT_T)((xLine[i]) * pow(2, XScale)); + reshapedXLine[i] = (Q15_T)((xLine[i]) * pow(2, XScale)); } fprintf(outputLog, "Running Quantized MBConv\n"); double time_spent = 0.0; clock_t begin = clock(); - q_mbconv_block(reshapedXLine, F1, W1, B1, F2, W2, B2, F3, W3, B3, - output_test, X, T, U, N, H, W, CIN, CTEMP, HF, WF, - COUT, HOUT, WOUT, HPADL, HPADR, WPADL, WPADR, HSTRIDE, - WSTRIDE, D1, D2, D3, Limit1, Limit2, ShRU1, ShRB1, ShRX1, - ShRU2, ShRB2, ShRX2, ShRU3, ShRB3, ShRW3, ShLU1, ShLB1, - ShLX1, ShLU2, ShLB2, ShLX2, ShLU3, ShLB3, ShLW3); + q15_mbconv_block(reshapedXLine, F1, W1, B1, F2, W2, B2, F3, W3, B3, + output_test, X, T, N, H, W, CIN, CTEMP, HF, WF, COUT, HOUT, WOUT, HPADL, + HPADR, WPADL, WPADR, HSTRIDE, WSTRIDE, Limit1, Limit2, ShRU1, ShRX1, ShRU2, + ShRX2, ShRU3, ShRW3, ShLU1, ShLX1, ShLU2, ShLX2, ShLU3, ShLW3); clock_t end = clock(); time_spent += (double)(end - begin) / CLOCKS_PER_SEC; fprintf(outputLog, "Time elapsed is %f seconds\n", time_spent); @@ -173,7 +172,7 @@ int main(int argc, char **argv) { float aggregate = aggregate_error(allErrors, N * HOUT * WOUT * COUT); fprintf(outputLog, "Aggregated 95th Percentile Error: %f\n", aggregate); - if (aggregate < 1.419) { + if (aggregate < 1.415) { fprintf(outputLog, "Quantized MBConv Numerical Test Passed!\n"); } else { fprintf(outputLog, "Quantized MBConv Numerical Test Failed!\n"); @@ -194,7 +193,6 @@ int main(int argc, char **argv) { free(output_test); free(X); free(T); - free(U); free(xLine); free(yLine); free(allErrors); diff --git a/c_reference/tests/rnnpool/q_wider_regression_model/rnn1.h b/c_reference/tests/rnnpool/q_wider_regression_model/rnn1.h index e0ef84cfe..75283a474 100644 --- a/c_reference/tests/rnnpool/q_wider_regression_model/rnn1.h +++ b/c_reference/tests/rnnpool/q_wider_regression_model/rnn1.h @@ -5,87 +5,144 @@ #define PATCH_DIM 8 #define HIDDEN_DIM1 8 -static INT_T W1[HIDDEN_DIM1 * INPUT_CHANNELS] = {7069, -10389, 1562, -1992, 3262, -37, -1143, -995, 5513, -17035, -14615, -6636, 4733, -403, 4106, -1104, -2707, -1287, -18128, -1832, -10108, -137, 2064, 1207, 5233, 226, 831, -1909, 4489, -1099, 2845, -1261}; -static INT_T U1[HIDDEN_DIM1 * HIDDEN_DIM1] = {15238, -1371, -930, -310, 3195, -4774, -434, 16, -4080, -2624, -10159, 3353, -2368, 5477, 4946, 3484, -18972, 23200, -4141, 10395, -20747, -4430, 11025, 10337, -1467, 5474, -3772, -409, -7005, 2161, 4571, 5800, 3401, 7390, 1400, 2437, 5303, 829, 1986, 2855, 12650, -3378, 1952, 426, -2543, 18282, -2558, 549, -910, 5065, -7026, 5921, -1008, 1428, -1212, 5397, -1587, 7849, -4936, 4664, -11563, 3197, 4943, 561}; -static INT_T Bg1[HIDDEN_DIM1] = {-18777, -9518, 4055, -7309, 8584, -17257, -5280, -7933}; -static INT_T Bh1[HIDDEN_DIM1] = {9658, 19740, -10057, 19114, 17227, 12226, 19080, 15855}; -static INT_T sigmoid_zeta1 = 32522; -static INT_T sigmoid_nu1 = 30111; +static const Q15_T W1[HIDDEN_DIM1 * INPUT_CHANNELS] = {7069, -10389, 1562, -1992, 3262, -37, -1143, -995, 5513, -17035, -14615, -6636, 4733, -403, 4106, -1104, -2707, -1287, -18128, -1832, -10108, -137, 2064, 1207, 5233, 226, 831, -1909, 4489, -1099, 2845, -1261}; +static const Q15_T U1[HIDDEN_DIM1 * HIDDEN_DIM1] = {15238, -1371, -930, -310, 3195, -4774, -434, 16, -4080, -2624, -10159, 3353, -2368, 5477, 4946, 3484, -18972, 23200, -4141, 10395, -20747, -4430, 11025, 10337, -1467, 5474, -3772, -409, -7005, 2161, 4571, 5800, 3401, 7390, 1400, 2437, 5303, 829, 1986, 2855, 12650, -3378, 1952, 426, -2543, 18282, -2558, 549, -910, 5065, -7026, 5921, -1008, 1428, -1212, 5397, -1587, 7849, -4936, 4664, -11563, 3197, 4943, 561}; +static const Q15_T Bg1[HIDDEN_DIM1] = {-18777, -9518, 4055, -7309, 8584, -17257, -5280, -7933}; +static const Q15_T Bh1[HIDDEN_DIM1] = {9658, 19740, -10057, 19114, 17227, 12226, 19080, 15855}; -static SCALE_T input1 = 0; -static SCALE_T meanScale1 = 0; -static SCALE_T meanSub1 = 0; -static SCALE_T stdDevScale1 = 0; -static SCALE_T normFeaturesHDStdDev1 = 0; -static SCALE_T H1W1 = 2; -static SCALE_T H2W1 = 0; -static SCALE_T H1U1 = 3; -static SCALE_T H2U1 = 0; -static INT_T div1 = 2; -static INT_T add1 = 1024; -static INT_T sigmoidLimit1 = 2048; -static SCALE_T sigmoidScaleIn1 = 11; //2048 -static SCALE_T sigmoidScaleOut1 = 14; //16384 -static SCALE_T tanhScaleIn1 = 11; //2048 -static SCALE_T tanhScaleOut1 = 11; //2048 -static INT_T qOne1 = 16384; +static Q15_FastGRNN_Params rnn1_params = { + .mean = NULL, + .stdDev = NULL, + .W = W1, + .U = U1, + .Bg = Bg1, + .Bh = Bh1, + .sigmoid_zeta = 32522, + .sigmoid_nu = 30111 +}; + +static Q15_T preComp11[HIDDEN_DIM1] = {}; +static Q15_T preComp12[HIDDEN_DIM1] = {}; +static Q15_T preComp13[HIDDEN_DIM1] = {}; +static Q15_T normFeatures1[HIDDEN_DIM1] = {}; + +static Q15_FastGRNN_Buffers rnn1_buffers = { + .preComp1 = preComp11, + .preComp2 = preComp12, + .preComp3 = preComp13, + .normFeatures = normFeatures1 +}; #ifdef SHIFT - static SCALE_T WScale1 = 7; //128 - static SCALE_T normFeaturesMVW1 = 6; //64 - static SCALE_T UScale1 = 7; //128 - static SCALE_T hiddenStateMVU1 = 6; //64 - static SCALE_T mV1AddMV21 = 0; //1 - static SCALE_T mV2AddMV11 = 2; //4 - static SCALE_T mV1AddMV2Out1 = 0; //1 - static SCALE_T pC1AddBg1 = 0; //1 - static SCALE_T BgScale1 = 3; //8 - static SCALE_T pC1AddBgOut1 = 0; //1 - static SCALE_T pC1AddBh1 = 0; //1 - static SCALE_T BhScale1 = 4; //16 - static SCALE_T pC1AddBhOut1 = 0; //1 - static SCALE_T gateHDHiddenState1 = 7; //128 - static SCALE_T hiddenStateHDGate1 = 7; //128 - static SCALE_T qOneScale1 = 0; //1 - static SCALE_T qOneSubGate1 = 0; //1 - static SCALE_T qOneSubGateOut1 = 0; //1 - static SCALE_T sigmoidZetaScale1 = 7; //128 - static SCALE_T sigmoidZetaMulQOneSubGate1 = 8; //256 - static SCALE_T sigmoidNuScale1 = 8; //256 - static SCALE_T sigmoidNuAddQOneSubGate1 = 0; //1 - static SCALE_T sigmoidNuAddQOneSubGateOut1 = 0; //1 - static SCALE_T sigmoidNuAddQOneSubGateHDUpdate1 = 5; //32 - static SCALE_T updateHDSigmoidNuAddQOneSubGate1 = 6; //64 - static SCALE_T pC3AddPC11 = 0; //1 - static SCALE_T pC1AddPC31 = 0; //1 - static SCALE_T hiddenStateOut1 = 0; //1 + static Q15_FastGRNN_Scales rnn1_scales = { + .input = 0, + .mean = 0, + .meanSub = 0, + .stdDev = 0, + .normFeaturesHDStdDev = 0, + .W = 7, //128 + .normFeaturesMVW = 6, //64 + .H1W = 2, + .H2W = 0, + .U = 7, //128 + .hiddenStateMVU = 6, //64 + .H1U = 3, + .H2U = 0, + .mV1AddMV2 = 0, //1 + .mV2AddMV1 = 2, //4 + .mV1AddMV2Out = 0, //1 + .mV1AddMV2Demote = 0, //1 + .pC1AddBg = 0, //1 + .Bg = 3, //8 + .pC1AddBgOut = 0, //1 + .pC1AddBgDemote = 0, //1 + .sigmoidLimit = 2048, + .sigmoidScaleIn = 11, //2048 + .sigmoidScaleOut = 14, //16384 + .pC1AddBh = 0, //1 + .Bh = 4, //16 + .pC1AddBhOut = 0, //1 + .pC1AddBhDemote = 0, //1 + .tanhScaleIn = 11, //2048 + .tanhScaleOut = 11, //2048 + .gateHDHiddenState = 7, //128 + .hiddenStateHDGate = 7, //128 + .qOneScale = 0, //1 + .qOneSubGate = 0, //1 + .qOneSubGateOut = 0, //1 + .sigmoidZeta = 7, //128 + .sigmoidZetaMulQOneSubGate = 8, //256 + .sigmoidNu = 8, //256 + .sigmoidNuAddQOneSubGate = 0, //1 + .sigmoidNuAddQOneSubGateOut = 0, //1 + .sigmoidNuAddQOneSubGateHDUpdate = 5, //32 + .updateHDSigmoidNuAddQOneSubGate = 6, //64 + .pC3AddPC1 = 0, //1 + .pC1AddPC3 = 0, //1 + .hiddenStateOut = 0, //1 + .hiddenStateDemote = 0, //1 + .div = 2, + .add = 1024, + .qOne = 16384, + .useTableSigmoid = 0, + .useTableTanH = 0 + }; + static SCALE_T ShR1 = 0; //1 + static SCALE_T ShL1 = 0; //1 #else - static SCALE_T WScale1 = 128; - static SCALE_T normFeaturesMVW1 = 64; - static SCALE_T UScale1 = 128; - static SCALE_T hiddenStateMVU1 = 64; - static SCALE_T mV1AddMV21 = 1; - static SCALE_T mV2AddMV11 = 4; - static SCALE_T mV1AddMV2Out1 = 1; - static SCALE_T pC1AddBg1 = 1; - static SCALE_T BgScale1 = 8; - static SCALE_T pC1AddBgOut1 = 1; - static SCALE_T pC1AddBh1 = 1; - static SCALE_T BhScale1 = 16; - static SCALE_T pC1AddBhOut1 = 1; - static SCALE_T gateHDHiddenState1 = 128; - static SCALE_T hiddenStateHDGate1 = 128; - static SCALE_T qOneScale1 = 1; - static SCALE_T qOneSubGate1 = 1; - static SCALE_T qOneSubGateOut1 = 1; - static SCALE_T sigmoidZetaScale1 = 128; - static SCALE_T sigmoidZetaMulQOneSubGate1 = 256; - static SCALE_T sigmoidNuScale1 = 256; - static SCALE_T sigmoidNuAddQOneSubGate1 = 1; - static SCALE_T sigmoidNuAddQOneSubGateOut1 = 1; - static SCALE_T sigmoidNuAddQOneSubGateHDUpdate1 = 32; - static SCALE_T updateHDSigmoidNuAddQOneSubGate1 = 64; - static SCALE_T pC3AddPC11 = 1; - static SCALE_T pC1AddPC31 = 1; - static SCALE_T hiddenStateOut1 = 1; + static Q15_FastGRNN_Scales rnn1_scales = { + .input = 0, + .mean = 0, + .meanSub = 0, + .stdDev = 0, + .normFeaturesHDStdDev = 0, + .W = 128, + .normFeaturesMVW = 64, + .H1W = 4, + .H2W = 0, + .U = 128, + .hiddenStateMVU = 64, + .H1U = 8, + .H2U = 0, + .mV1AddMV2 = 1, + .mV2AddMV1 = 4, + .mV1AddMV2Out = 1, + .mV1AddMV2Demote = 1, + .pC1AddBg = 1, + .Bg = 8, + .pC1AddBgOut = 1, + .pC1AddBgDemote = 1, + .sigmoidLimit = 2048, + .sigmoidScaleIn = 11, //2048 + .sigmoidScaleOut = 14, //16384 + .pC1AddBh = 1, + .Bh = 16, + .pC1AddBhOut = 1, + .pC1AddBhDemote = 1, + .tanhScaleIn = 11, //2048 + .tanhScaleOut = 11, //2048 + .gateHDHiddenState = 128, + .hiddenStateHDGate = 128, + .qOneScale = 1, + .qOneSubGate = 1, + .qOneSubGateOut = 1, + .sigmoidZeta = 128, + .sigmoidZetaMulQOneSubGate = 256, + .sigmoidNu = 256, + .sigmoidNuAddQOneSubGate = 1, + .sigmoidNuAddQOneSubGateOut = 1, + .sigmoidNuAddQOneSubGateHDUpdate = 32, + .updateHDSigmoidNuAddQOneSubGate = 64, + .pC3AddPC1 = 1, + .pC1AddPC3 = 1, + .hiddenStateOut = 1, + .hiddenStateDemote = 1, + .div = 2, + .add = 1024, + .qOne = 16384, + .useTableSigmoid = 0, + .useTableTanH = 0 + }; + static SCALE_T ShR1 = 1; + static SCALE_T ShL1 = 1; #endif diff --git a/c_reference/tests/rnnpool/q_wider_regression_model/rnn2.h b/c_reference/tests/rnnpool/q_wider_regression_model/rnn2.h index 13aa0fb73..bf8be869c 100644 --- a/c_reference/tests/rnnpool/q_wider_regression_model/rnn2.h +++ b/c_reference/tests/rnnpool/q_wider_regression_model/rnn2.h @@ -3,87 +3,144 @@ #define HIDDEN_DIM2 8 -static INT_T W2[HIDDEN_DIM2 * HIDDEN_DIM1] = {-849, -1535, 10036, -3592, -286, -6119, -5622, -3760, 359, -6106, -339, -1294, -220, -4337, -2852, -841, -9841, -1977, 745, -996, -1397, -1678, -861, -712, 5701, -5419, -3624, 0, 439, -9575, -3738, 396, 7390, -1214, 1684, 1441, -1650, 13070, 2595, 1405, -4589, -5064, -1926, 2806, 3409, -12783, -284, 3339, -3958, 77, 2312, -1717, -19971, -55, -672, -1476, 2759, -4657, 2028, -3686, -192, -5647, -5103, -3669}; -static INT_T U2[HIDDEN_DIM2 * HIDDEN_DIM2] = {8755, -905, -2432, -2758, -3162, -4223, 181, 312, 2010, 9661, 1688, 2240, 5634, 5383, -1084, 996, -3641, -1874, 1328, 1795, 15468, -15323, 863, -3599, -912, -327, -1492, 6117, -1188, -2615, 1111, -866, 5998, 4034, 4122, 6542, 704, 19957, -4613, 2397, -2311, -3909, 769, -6010, -1738, 2042, 4177, -1213, -388, -354, -176, 710, 483, -578, 3342, -916, -1570, -5116, 9988, 283, 3409, -318, 4059, 8633}; -static INT_T Bg2[HIDDEN_DIM2] = {-5410, -15414, -13002, -12121, -18930, -17922, -8692, -12150}; -static INT_T Bh2[HIDDEN_DIM2] = {21417, 6457, 6421, 8970, 6601, 836, 3060, 8468}; -static INT_T sigmoid_zeta2 = 32520; -static INT_T sigmoid_nu2 = 16387; +static const Q15_T W2[HIDDEN_DIM2 * HIDDEN_DIM1] = {-849, -1535, 10036, -3592, -286, -6119, -5622, -3760, 359, -6106, -339, -1294, -220, -4337, -2852, -841, -9841, -1977, 745, -996, -1397, -1678, -861, -712, 5701, -5419, -3624, 0, 439, -9575, -3738, 396, 7390, -1214, 1684, 1441, -1650, 13070, 2595, 1405, -4589, -5064, -1926, 2806, 3409, -12783, -284, 3339, -3958, 77, 2312, -1717, -19971, -55, -672, -1476, 2759, -4657, 2028, -3686, -192, -5647, -5103, -3669}; +static const Q15_T U2[HIDDEN_DIM2 * HIDDEN_DIM2] = {8755, -905, -2432, -2758, -3162, -4223, 181, 312, 2010, 9661, 1688, 2240, 5634, 5383, -1084, 996, -3641, -1874, 1328, 1795, 15468, -15323, 863, -3599, -912, -327, -1492, 6117, -1188, -2615, 1111, -866, 5998, 4034, 4122, 6542, 704, 19957, -4613, 2397, -2311, -3909, 769, -6010, -1738, 2042, 4177, -1213, -388, -354, -176, 710, 483, -578, 3342, -916, -1570, -5116, 9988, 283, 3409, -318, 4059, 8633}; +static const Q15_T Bg2[HIDDEN_DIM2] = {-5410, -15414, -13002, -12121, -18930, -17922, -8692, -12150}; +static const Q15_T Bh2[HIDDEN_DIM2] = {21417, 6457, 6421, 8970, 6601, 836, 3060, 8468}; -static SCALE_T input2 = 0; -static SCALE_T meanScale2 = 0; -static SCALE_T meanSub2 = 0; -static SCALE_T stdDevScale2 = 0; -static SCALE_T normFeaturesHDStdDev2 = 0; -static SCALE_T H1W2 = 3; -static SCALE_T H2W2 = 0; -static SCALE_T H1U2 = 3; -static SCALE_T H2U2 = 0; -static INT_T div2 = 2; -static INT_T add2 = 4096; -static INT_T sigmoidLimit2 = 8192; -static SCALE_T sigmoidScaleIn2 = 13; //8192 -static SCALE_T sigmoidScaleOut2 = 14; //16384 -static SCALE_T tanhScaleIn2 = 13; //8192 -static SCALE_T tanhScaleOut2 = 13; //8192 -static INT_T qOne2 = 16384; +static Q15_FastGRNN_Params rnn2_params = { + .mean = NULL, + .stdDev = NULL, + .W = W2, + .U = U2, + .Bg = Bg2, + .Bh = Bh2, + .sigmoid_zeta = 32520, + .sigmoid_nu = 16387 +}; + +static Q15_T preComp21[HIDDEN_DIM2] = {}; +static Q15_T preComp22[HIDDEN_DIM2] = {}; +static Q15_T preComp23[HIDDEN_DIM2] = {}; +static Q15_T normFeatures2[HIDDEN_DIM1] = {}; + +static Q15_FastGRNN_Buffers rnn2_buffers = { + .preComp1 = preComp21, + .preComp2 = preComp22, + .preComp3 = preComp23, + .normFeatures = normFeatures2 +}; #ifdef SHIFT - static SCALE_T WScale2 = 6; //64 - static SCALE_T normFeaturesMVW2 = 5; //32 - static SCALE_T UScale2 = 6; //64 - static SCALE_T hiddenStateMVU2 = 6; //64 - static SCALE_T mV1AddMV22 = 1; //2 - static SCALE_T mV2AddMV12 = 0; //1 - static SCALE_T mV1AddMV2Out2 = 0; //1 - static SCALE_T pC1AddBg2 = 0; //1 - static SCALE_T BgScale2 = 1; //2 - static SCALE_T pC1AddBgOut2 = 0; //1 - static SCALE_T pC1AddBh2 = 0; //1 - static SCALE_T BhScale2 = 1; //2 - static SCALE_T pC1AddBhOut2 = 0; //1 - static SCALE_T gateHDHiddenState2 = 6; //64 - static SCALE_T hiddenStateHDGate2 = 7; //128 - static SCALE_T qOneScale2 = 0; //1 - static SCALE_T qOneSubGate2 = 0; //1 - static SCALE_T qOneSubGateOut2 = 0; //1 - static SCALE_T sigmoidZetaScale2 = 7; //128 - static SCALE_T sigmoidZetaMulQOneSubGate2 = 8; //256 - static SCALE_T sigmoidNuScale2 = 7; //128 - static SCALE_T sigmoidNuAddQOneSubGate2 = 0; //1 - static SCALE_T sigmoidNuAddQOneSubGateOut2 = 0; //1 - static SCALE_T sigmoidNuAddQOneSubGateHDUpdate2 = 6; //64 - static SCALE_T updateHDSigmoidNuAddQOneSubGate2 = 7; //128 - static SCALE_T pC3AddPC12 = 1; //2 - static SCALE_T pC1AddPC32 = 0; //1 - static SCALE_T hiddenStateOut2 = 0; //1 + static Q15_FastGRNN_Scales rnn2_scales = { + .input = 0, + .mean = 0, + .meanSub = 0, + .stdDev = 0, + .normFeaturesHDStdDev = 0, + .W = 6, //64 + .normFeaturesMVW = 5, //32 + .H1W = 3, + .H2W = 0, + .U = 6, //64 + .hiddenStateMVU = 6, //64 + .H1U = 3, + .H2U = 0, + .mV1AddMV2 = 1, //2 + .mV2AddMV1 = 0, //1 + .mV1AddMV2Out = 0, //1 + .mV1AddMV2Demote = 0, //1 + .pC1AddBg = 0, //1 + .Bg = 1, //2 + .pC1AddBgOut = 0, //1 + .pC1AddBgDemote = 0, //1 + .sigmoidLimit = 8192, + .sigmoidScaleIn = 13, //8192 + .sigmoidScaleOut = 14, //16384 + .pC1AddBh = 0, //1 + .Bh = 1, //2 + .pC1AddBhOut = 0, //1 + .pC1AddBhDemote = 0, //1 + .tanhScaleIn = 13, //8192 + .tanhScaleOut = 13, //8192 + .gateHDHiddenState = 6, //64 + .hiddenStateHDGate = 7, //128 + .qOneScale = 0, //1 + .qOneSubGate = 0, //1 + .qOneSubGateOut = 0, //1 + .sigmoidZeta = 7, //128 + .sigmoidZetaMulQOneSubGate = 8, //256 + .sigmoidNu = 7, //128 + .sigmoidNuAddQOneSubGate = 0, //1 + .sigmoidNuAddQOneSubGateOut = 0, //1 + .sigmoidNuAddQOneSubGateHDUpdate = 6, //64 + .updateHDSigmoidNuAddQOneSubGate = 7, //128 + .pC3AddPC1 = 1, //2 + .pC1AddPC3 = 0, //1 + .hiddenStateOut = 0, //1 + .hiddenStateDemote = 0, //1 + .div = 2, + .add = 4096, + .qOne = 16384, + .useTableSigmoid = 0, + .useTableTanH = 0 + }; + static SCALE_T ShR2 = 0; //1 + static SCALE_T ShL2 = 0; //1 #else - static SCALE_T WScale2 = 64; - static SCALE_T normFeaturesMVW2 = 32; - static SCALE_T UScale2 = 64; - static SCALE_T hiddenStateMVU2 = 64; - static SCALE_T mV1AddMV22 = 2; - static SCALE_T mV2AddMV12 = 1; - static SCALE_T mV1AddMV2Out2 = 1; - static SCALE_T pC1AddBg2 = 1; - static SCALE_T BgScale2 = 2; - static SCALE_T pC1AddBgOut2 = 1; - static SCALE_T pC1AddBh2 = 1; - static SCALE_T BhScale2 = 2; - static SCALE_T pC1AddBhOut2 = 1; - static SCALE_T gateHDHiddenState2 = 64; - static SCALE_T hiddenStateHDGate2 = 128; - static SCALE_T qOneScale2 = 1; - static SCALE_T qOneSubGate2 = 1; - static SCALE_T qOneSubGateOut2 = 1; - static SCALE_T sigmoidZetaScale2 = 128; - static SCALE_T sigmoidZetaMulQOneSubGate2 = 256; - static SCALE_T sigmoidNuScale2 = 128; - static SCALE_T sigmoidNuAddQOneSubGate2 = 1; - static SCALE_T sigmoidNuAddQOneSubGateOut2 = 1; - static SCALE_T sigmoidNuAddQOneSubGateHDUpdate2 = 64; - static SCALE_T updateHDSigmoidNuAddQOneSubGate2 = 128; - static SCALE_T pC3AddPC12 = 2; - static SCALE_T pC1AddPC32 = 1; - static SCALE_T hiddenStateOut2 = 1; + static Q15_FastGRNN_Scales rnn2_scales = { + .input = 0, + .mean = 0, + .meanSub = 0, + .stdDev = 0, + .normFeaturesHDStdDev = 0, + .W = 64, + .normFeaturesMVW = 32, + .H1W = 8, + .H2W = 0, + .U = 64, + .hiddenStateMVU = 64, + .H1U = 8, + .H2U = 0, + .mV1AddMV2 = 2, + .mV2AddMV1 = 1, + .mV1AddMV2Out = 1, + .mV1AddMV2Demote = 1, + .pC1AddBg = 1, + .Bg = 2, + .pC1AddBgOut = 1, + .pC1AddBgDemote = 1, + .sigmoidLimit = 8192, + .sigmoidScaleIn = 13, //8192 + .sigmoidScaleOut = 14, //16384 + .pC1AddBh = 1, + .Bh = 2, + .pC1AddBhOut = 1, + .pC1AddBhDemote = 1, + .tanhScaleIn = 13, //8192 + .tanhScaleOut = 13, //8192 + .gateHDHiddenState = 64, + .hiddenStateHDGate = 128, + .qOneScale = 1, + .qOneSubGate = 1, + .qOneSubGateOut = 1, + .sigmoidZeta = 128, + .sigmoidZetaMulQOneSubGate = 256, + .sigmoidNu = 128, + .sigmoidNuAddQOneSubGate = 1, + .sigmoidNuAddQOneSubGateOut = 1, + .sigmoidNuAddQOneSubGateHDUpdate = 64, + .updateHDSigmoidNuAddQOneSubGate = 128, + .pC3AddPC1 = 2, + .pC1AddPC3 = 1, + .hiddenStateOut = 1, + .hiddenStateDemote = 1, + .div = 2, + .add = 4096, + .qOne = 16384, + .useTableSigmoid = 0, + .useTableTanH = 0 + }; + static SCALE_T ShR2 = 1; + static SCALE_T ShL2 = 1; #endif diff --git a/c_reference/tests/rnnpool/test_quantized_rnnpool.c b/c_reference/tests/rnnpool/test_quantized_rnnpool.c index ad57f4a65..183a4fd44 100644 --- a/c_reference/tests/rnnpool/test_quantized_rnnpool.c +++ b/c_reference/tests/rnnpool/test_quantized_rnnpool.c @@ -22,7 +22,7 @@ int compare_floats(const void *a, const void *b) { // Function for computing the deviation from the expected floating point // result and returning the largest such deviation found. -float compute_error(INT_T pred[4 * HIDDEN_DIM2], float label[4 * HIDDEN_DIM2], +float compute_error(Q15_T pred[4 * HIDDEN_DIM2], float label[4 * HIDDEN_DIM2], float* const errors, SCALE_T scl) { float epsilon = 0.01; float agg_diff = 0.0; @@ -44,19 +44,22 @@ float aggregate_error(float* errors, unsigned len) { return errors[index]; } -/** Run this test using the following command: - * $: ./test_quantized_rnnpool - * +/** * By default, all tests run without using bit-shifting operations. */ int main(int argc, char **argv) { unsigned patches; SCALE_T XScale = 12, YScale = 14; - FILE *xFile, *yFile, *floatResFile, *outputLog; if (argc != 6) { - printf("Improper Number of Arguments Provided!\n"); + fprintf(stderr, "Improper Number of Arguments Provided!\n"); + fprintf(stderr, "Usage : %s \n\n", argv[0]); + fprintf(stderr, " : Number of image patches in the input file. RNNPool operator is run individually on each patch.\n"); + fprintf(stderr, " : File containing the image patches in a numpy array of dimension (num_patches, input_channels, input_width, input_height).\n"); + fprintf(stderr, " : File to write the generated output in a numpy array of dimension (num_patches, 1, 4 * hidden_dimension_2).\n"); + fprintf(stderr, " : File containing the expected output in a numpy array of dimension (num_patches, 1, 4 * hidden_dimension_2).\n"); + fprintf(stderr, " : File to write the error metrics and the results from the runtime analysis of the layer.\n"); return -1; } else { patches = atoi(argv[1]); @@ -67,19 +70,19 @@ int main(int argc, char **argv) { } if (xFile == NULL) { - printf("An error occured while opening the input file.\n"); + fprintf(stderr, "An error occured while opening the input file.\n"); return -1; } if (yFile == NULL) { - printf("An error occured while opening the predicted output file.\n"); + fprintf(stderr, "An error occured while opening the predicted output file.\n"); return -1; } if (floatResFile == NULL) { - printf("An error occured while opening the expected output file.\n"); + fprintf(stderr, "An error occured while opening the expected output file.\n"); return -1; } if (outputLog == NULL) { - printf("An error occured while opening the output log file.\n"); + fprintf(stderr, "An error occured while opening the output log file.\n"); return -1; } @@ -136,156 +139,8 @@ int main(int argc, char **argv) { fputs(numpyHeader3, yFile); fputs(numpyHeader4, yFile); - Q_FastGRNN_Params rnn1_params = { - .mean = NULL, - .stdDev = NULL, - .W = W1, - .U = U1, - .Bg = Bg1, - .Bh = Bh1, - .sigmoid_zeta = sigmoid_zeta1, - .sigmoid_nu = sigmoid_nu1 - }; - - Q_FastGRNN_Params rnn2_params = { - .mean = NULL, - .stdDev = NULL, - .W = W2, - .U = U2, - .Bg = Bg2, - .Bh = Bh2, - .sigmoid_zeta = sigmoid_zeta2, - .sigmoid_nu = sigmoid_nu2 - }; - - INT_T preComp11[HIDDEN_DIM1]; - INT_T preComp12[HIDDEN_DIM1]; - INT_T preComp13[HIDDEN_DIM1]; - INT_T normFeatures1[INPUT_CHANNELS]; - memset(preComp11, 0, sizeof(INT_T) * HIDDEN_DIM1); - memset(preComp12, 0, sizeof(INT_T) * HIDDEN_DIM1); - memset(preComp13, 0, sizeof(INT_T) * HIDDEN_DIM1); - memset(normFeatures1, 0, sizeof(INT_T) * INPUT_CHANNELS); - Q_FastGRNN_Buffers rnn1_buffers = { - .preComp1 = preComp11, - .preComp2 = preComp12, - .preComp3 = preComp13, - .normFeatures = normFeatures1 - }; - - INT_T preComp21[HIDDEN_DIM2]; - INT_T preComp22[HIDDEN_DIM2]; - INT_T preComp23[HIDDEN_DIM2]; - INT_T normFeatures2[HIDDEN_DIM1]; - memset(preComp21, 0, sizeof(INT_T) * HIDDEN_DIM2); - memset(preComp22, 0, sizeof(INT_T) * HIDDEN_DIM2); - memset(preComp23, 0, sizeof(INT_T) * HIDDEN_DIM2); - memset(normFeatures2, 0, sizeof(INT_T) * HIDDEN_DIM1); - Q_FastGRNN_Buffers rnn2_buffers = { - .preComp1 = preComp21, - .preComp2 = preComp22, - .preComp3 = preComp23, - .normFeatures = normFeatures2 - }; - - Q_FastGRNN_Scales rnn1_scales = { - .input = input1, - .mean = meanScale1, - .meanSub = meanSub1, - .stdDev = stdDevScale1, - .normFeaturesHDStdDev = normFeaturesHDStdDev1, - .W = WScale1, - .normFeaturesMVW = normFeaturesMVW1, - .H1W = H1W1, - .H2W = H2W1, - .U = UScale1, - .hiddenStateMVU = hiddenStateMVU1, - .H1U = H1U1, - .H2U = H2U1, - .mV1AddMV2 = mV1AddMV21, - .mV2AddMV1 = mV2AddMV11, - .mV1AddMV2Out = mV1AddMV2Out1, - .pC1AddBg = pC1AddBg1, - .Bg = BgScale1, - .pC1AddBgOut = pC1AddBgOut1, - .sigmoidLimit = sigmoidLimit1, - .sigmoidScaleIn = sigmoidScaleIn1, - .sigmoidScaleOut = sigmoidScaleOut1, - .pC1AddBh = pC1AddBh1, - .Bh = BhScale1, - .pC1AddBhOut = pC1AddBhOut1, - .tanhScaleIn = tanhScaleIn1, - .tanhScaleOut = tanhScaleOut1, - .gateHDHiddenState = gateHDHiddenState1, - .hiddenStateHDGate = hiddenStateHDGate1, - .qOneScale = qOneScale1, - .qOneSubGate = qOneSubGate1, - .qOneSubGateOut = qOneSubGateOut1, - .sigmoidZeta = sigmoidZetaScale1, - .sigmoidZetaMulQOneSubGate = sigmoidZetaMulQOneSubGate1, - .sigmoidNu = sigmoidNuScale1, - .sigmoidNuAddQOneSubGate = sigmoidNuAddQOneSubGate1, - .sigmoidNuAddQOneSubGateOut = sigmoidNuAddQOneSubGateOut1, - .sigmoidNuAddQOneSubGateHDUpdate = sigmoidNuAddQOneSubGateHDUpdate1, - .updateHDSigmoidNuAddQOneSubGate = updateHDSigmoidNuAddQOneSubGate1, - .pC3AddPC1 = pC3AddPC11, - .pC1AddPC3 = pC1AddPC31, - .hiddenStateOut = hiddenStateOut1, - .div = div1, - .add = add1, - .qOne = qOne1 - }; - - Q_FastGRNN_Scales rnn2_scales = { - .input = input2, - .mean = meanScale2, - .meanSub = meanSub2, - .stdDev = stdDevScale2, - .normFeaturesHDStdDev = normFeaturesHDStdDev2, - .W = WScale2, - .normFeaturesMVW = normFeaturesMVW2, - .H1W = H1W2, - .H2W = H2W2, - .U = UScale2, - .hiddenStateMVU = hiddenStateMVU2, - .H1U = H1U2, - .H2U = H2U2, - .mV1AddMV2 = mV1AddMV22, - .mV2AddMV1 = mV2AddMV12, - .mV1AddMV2Out = mV1AddMV2Out2, - .pC1AddBg = pC1AddBg2, - .Bg = BgScale2, - .pC1AddBgOut = pC1AddBgOut2, - .sigmoidLimit = sigmoidLimit2, - .sigmoidScaleIn = sigmoidScaleIn2, - .sigmoidScaleOut = sigmoidScaleOut2, - .pC1AddBh = pC1AddBh2, - .Bh = BhScale2, - .pC1AddBhOut = pC1AddBhOut2, - .tanhScaleIn = tanhScaleIn2, - .tanhScaleOut = tanhScaleOut2, - .gateHDHiddenState = gateHDHiddenState2, - .hiddenStateHDGate = hiddenStateHDGate2, - .qOneScale = qOneScale2, - .qOneSubGate = qOneSubGate2, - .qOneSubGateOut = qOneSubGateOut2, - .sigmoidZeta = sigmoidZetaScale2, - .sigmoidZetaMulQOneSubGate = sigmoidZetaMulQOneSubGate2, - .sigmoidNu = sigmoidNuScale2, - .sigmoidNuAddQOneSubGate = sigmoidNuAddQOneSubGate2, - .sigmoidNuAddQOneSubGateOut = sigmoidNuAddQOneSubGateOut2, - .sigmoidNuAddQOneSubGateHDUpdate = sigmoidNuAddQOneSubGateHDUpdate2, - .updateHDSigmoidNuAddQOneSubGate = updateHDSigmoidNuAddQOneSubGate2, - .pC3AddPC1 = pC3AddPC12, - .pC1AddPC3 = pC1AddPC32, - .hiddenStateOut = hiddenStateOut2, - .div = div2, - .add = add2, - .qOne = qOne2 - }; - - INT_T output_test[4 * HIDDEN_DIM2]; - INT_T buffer[HIDDEN_DIM1 * PATCH_DIM]; + Q15_T output_test[4 * HIDDEN_DIM2]; + Q15_T buffer[HIDDEN_DIM1 * PATCH_DIM]; float xLine[INPUT_CHANNELS * PATCH_DIM * PATCH_DIM]; float yLine[4 * HIDDEN_DIM2]; float* allErrors = malloc(patches * 4 * HIDDEN_DIM2 * (sizeof(float))); @@ -294,25 +149,25 @@ int main(int argc, char **argv) { for (unsigned i = 0; i < patches; i++) { fread(&xLine[0], sizeof(float), INPUT_CHANNELS * PATCH_DIM * PATCH_DIM, xFile); fread(&yLine[0], sizeof(float), 4 * HIDDEN_DIM2, floatResFile); - INT_T reshapedXLine[INPUT_CHANNELS * PATCH_DIM * PATCH_DIM]; + Q15_T reshapedXLine[INPUT_CHANNELS * PATCH_DIM * PATCH_DIM]; for (unsigned a = 0; a < INPUT_CHANNELS; a ++) { for (unsigned b = 0; b < PATCH_DIM; b++) { for (unsigned c = 0; c < PATCH_DIM; c++) { reshapedXLine[b * PATCH_DIM * INPUT_CHANNELS + c * INPUT_CHANNELS + a] = - (INT_T)((xLine[a * PATCH_DIM * PATCH_DIM + b * PATCH_DIM + c]) * pow(2, XScale)); + (Q15_T)((xLine[a * PATCH_DIM * PATCH_DIM + b * PATCH_DIM + c]) * pow(2, XScale)); } } } fprintf(outputLog, "Running Quantized RNNPool on Patch %d\n", i + 1); clock_t begin = clock(); - q_rnnpool_block(reshapedXLine, INPUT_CHANNELS, PATCH_DIM, PATCH_DIM, - q_fastgrnn, HIDDEN_DIM1, (const void*)(&rnn1_params), - (void*)(&rnn1_buffers), (const void*)(&rnn1_scales), - q_fastgrnn, HIDDEN_DIM2, (const void*)(&rnn2_params), - (void*)(&rnn2_buffers), (const void*)(&rnn2_scales), - output_test, buffer); + q15_rnnpool_block(reshapedXLine, INPUT_CHANNELS, PATCH_DIM, PATCH_DIM, + q15_fastgrnn, HIDDEN_DIM1, (const void*)(&rnn1_params), + (void*)(&rnn1_buffers), (const void*)(&rnn1_scales), + q15_fastgrnn, HIDDEN_DIM2, (const void*)(&rnn2_params), + (void*)(&rnn2_buffers), (const void*)(&rnn2_scales), + output_test, buffer, ShR1, ShL1, ShR2, ShL2); clock_t end = clock(); time_spent += (double)(end - begin) / CLOCKS_PER_SEC; fprintf(outputLog, "Time elapsed is %f seconds\n", time_spent); diff --git a/c_reference/tests/utils/test_quantized_utils.c b/c_reference/tests/utils/test_quantized_utils.c index 3a0fc2400..97c6776e8 100644 --- a/c_reference/tests/utils/test_quantized_utils.c +++ b/c_reference/tests/utils/test_quantized_utils.c @@ -7,8 +7,8 @@ // All values generated from Seedot on Wider Regression dataset. // By default, all tests run without using bit-shifting operations. // Function for matching the predicted and expected quantized outputs. -static int check_output(const INT_T* const pred, const INT_T* const expected, - unsigned len) { +static int check_output_q7(const Q7_T* const pred, const Q7_T* const expected, + unsigned len) { for (unsigned i = 0; i < len; i++) { if (pred[i] != expected[i]) { @@ -19,316 +19,387 @@ static int check_output(const INT_T* const pred, const INT_T* const expected, return 0; } -// Test v_q_treesum() function. -int test_v_q_treesum() { - INTM_T qvec_A[128] = {3038976, 0, 0, 1514478, 0, 0, 778261, 32670, -2619599, 0, 3849336, 5310900, 0, 0, 0, 0, 0, 0, 0, 0, -142898, 1510353, 0, -6888482, 0, -760720, 1296384, -6749490, -9687275, -686501, -743600, -2112105, 0, 8962408, 0, -17460547, -1477630, 0, 0, -2195694, -860184, -214912, 0, -1389548, 0, 0, 2081898, 0, 0, 23544, -3351768, 0, 0, 0, 3886614, 0, -5839384, 0, 842100, 4051917, 0, 0, 1459796, 2006850, 517867, 3044471, 0, 2578300, 0, 0, -1921101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4709000, 0, 0, 0, 0, -65664, 0, 0, 4313415, -1126680, 0, 0, -8524140, 0, 6248088, 0, 0, 0, 0, 2273558, 0, 0, -738913, 0, 0, -13912800, 0, 0, 0, -5329773, 5346088, 0, 113245, 0, 0, 8590397, 0, 2224368, 1020225, 489580, 0, -185584, -86475, 0, -2013258, -2417536, 0}; - - #ifdef SHIFT - INTM_T expected = {-135840}; - #else - INTM_T expected = {-135837}; - #endif - - v_q_treesum(&qvec_A[0], 128, 7, 0); - if (qvec_A[0] != expected) { - printf("TreeSum Output: %d, Expected: %d\n", qvec_A[0], expected); +static int check_output_q15(const Q15_T* const pred, const Q15_T* const expected, + unsigned len) { + for (unsigned i = 0; i < len; i++) + { + if (pred[i] != expected[i]) { + printf("Output: %d, Expected: %d at Index: %d\n", pred[i], expected[i], i); return 1; + } } return 0; } -// Test v_q_add() function. -int test_v_q_add() { - const INT_T qvec_A[8] = {-425, -169, -3534, 524, -2739, 87, 52, 292}; - const INT_T qvec_B[8] = {-18777, -9518, 4055, -7309, 8584, -17257, -5280, -7933}; - INT_T pred[8]; +// Test q15_v_add() function. +int test_q15_v_add() { + const Q15_T qvec_A[8] = {-425, -169, -3534, 524, -2739, 87, 52, 292}; + const Q15_T qvec_B[8] = {-18777, -9518, 4055, -7309, 8584, -17257, -5280, -7933}; + Q15_T pred[8]; #ifdef SHIFT - const INT_T expected[8] = {-2773, -1359, -3028, -390, -1666, -2071, -608, -700}; - v_q_add(&qvec_A[0], &qvec_B[0], 8, &pred[0], 0, 3, 0); + const Q15_T expected[8] = {-2773, -1359, -3028, -390, -1666, -2071, -608, -700}; + q15_v_add(&qvec_A[0], &qvec_B[0], 8, &pred[0], 0, 3, 0, 0); #else - const INT_T expected[8] = {-2772, -1358, -3028, -389, -1666, -2070, -608, -699}; - v_q_add(&qvec_A[0], &qvec_B[0], 8, &pred[0], 1, 8, 1); + const Q15_T expected[8] = {-2772, -1358, -3028, -389, -1666, -2070, -608, -699}; + q15_v_add(&qvec_A[0], &qvec_B[0], 8, &pred[0], 1, 8, 1, 1); #endif - return check_output(pred, expected, 8); + return check_output_q15(pred, expected, 8); } -// Test v_q_sub() function. -int test_v_q_sub() { - const INT_T qvec_A[8] = {-425, -169, -3534, 524, -2739, 87, 52, 292}; - const INT_T qvec_B[8] = {-18777, -9518, 4055, -7309, 8584, -17257, -5280, -7933}; - INT_T pred[8]; +// Test q7_v_sub() function. +int test_q7_v_sub() { + const Q7_T qvec_A[8] = {-42, -16, -35, 54, -29, 87, 52, 22}; + const Q7_T qvec_B[8] = {-17, -98, 40, -73, 85, -125, -80, -79}; + Q7_T pred[8]; #ifdef SHIFT - const INT_T expected[8] = {1923, 1021, -4040, 1438, -3812, 2245, 712, 1284}; - v_q_sub(&qvec_A[0], &qvec_B[0], 8, &pred[0], 0, 3, 0); + const Q7_T expected[8] = {-39, -3, -40, 64, -39, 103, 62, 32}; + q7_v_sub(&qvec_A[0], &qvec_B[0], 8, &pred[0], 0, 3, 0); #else - const INT_T expected[8] = {1922, 1020, -4040, 1437, -3812, 2244, 712, 1283}; - v_q_sub(&qvec_A[0], &qvec_B[0], 8, &pred[0], 1, 8, 1); + const Q7_T expected[8] = {-40, -4, -40, 63, -39, 102, 62, 31}; + q7_v_sub(&qvec_A[0], &qvec_B[0], 8, &pred[0], 1, 8, 1); #endif - return check_output(pred, expected, 8); + return check_output_q7(pred, expected, 8); } -// Test v_q_hadamard() function. -int test_v_q_hadamard() { - const INT_T qvec_A[8] = {16378, 13638, 16378, 9787, 14861, 16378, 10661, 11018}; - const INT_T qvec_B[8] = {178, 1064, -2048, 1718, -1663, 851, 1244, 1282}; - INT_T pred[8]; +// Test q15_v_sub() function. +int test_q15_v_sub() { + const Q15_T qvec_A[8] = {-425, -169, -3534, 524, -2739, 87, 52, 292}; + const Q15_T qvec_B[8] = {-18777, -9518, 4055, -7309, 8584, -17257, -5280, -7933}; + Q15_T pred[8]; #ifdef SHIFT - const INT_T expected[8] = {1423, 7085, -16378, 8209, -12068, 6805, 6475, 6897}; - v_q_hadamard(&qvec_A[0], &qvec_B[0], 8, &pred[0], 5, 6); + const Q15_T expected[8] = {1923, 1021, -4040, 1438, -3812, 2245, 712, 1284}; + q15_v_sub(&qvec_A[0], &qvec_B[0], 8, &pred[0], 0, 3, 0); #else - const INT_T expected[8] = {1423, 7085, -16378, 8209, -12067, 6805, 6475, 6897}; - v_q_hadamard(&qvec_A[0], &qvec_B[0], 8, &pred[0], 32, 64); + const Q15_T expected[8] = {1922, 1020, -4040, 1437, -3812, 2244, 712, 1283}; + q15_v_sub(&qvec_A[0], &qvec_B[0], 8, &pred[0], 1, 8, 1); #endif - return check_output(pred, expected, 8); + return check_output_q15(pred, expected, 8); } -// Test v_q_sigmoid() function. -int test_v_q_sigmoid() { - const INT_T qvec_A[8] = {-2772, -1358, -3028, -389, -1666, -2070, -608, -699}; - const INT_T expected[8] = {0, 2760, 0, 6640, 1528, 0, 5760, 5400}; - INT_T pred[8]; - - v_q_sigmoid(&qvec_A[0], 8, &pred[0], 2, 1024, 2048, 11, 14); - return check_output(pred, expected, 8); -} +// Test q7_v_hadamard() function. +int test_q7_v_hadamard() { + const Q7_T qvec_A[8] = {64, 57, 64, 37, 60, 64, 40, 43}; + const Q7_T qvec_B[8] = {18, 14, -48, 118, -16, 85, 124, 122}; + Q7_T pred[8]; -// Test v_q_tanh() function. -int test_v_q_tanh() { - const INT_T qvec_A[8] = {178, 1064, -4162, 1718, -1663, 851, 1244, 1282}; - const INT_T expected[8] = {178, 1064, -2048, 1718, -1663, 851, 1244, 1282}; - INT_T pred[8]; + #ifdef SHIFT + const Q7_T expected[8] = {18, 12, -48, 68, -15, 85, 77, 81}; + q7_v_hadamard(&qvec_A[0], &qvec_B[0], 8, &pred[0], 3, 3); + #else + const Q7_T expected[8] = {18, 12, -48, 68, -15, 85, 77, 81}; + q7_v_hadamard(&qvec_A[0], &qvec_B[0], 8, &pred[0], 8, 8); + #endif - v_q_tanh(&qvec_A[0], 8, &pred[0], 11, 11); - return check_output(pred, expected, 8); + return check_output_q7(pred, expected, 8); } -// Test v_q_scalar_add() function. -int test_v_q_scalar_add() { - const INT_T qscalar_A = 30111; - const INT_T qvec_B[8] = {16261, 13521, 16261, 9670, 14744, 16261, 10544, 10901}; - const INT_T expected[8] = {16378, 13638, 16378, 9787, 14861, 16378, 10661, 11018}; - INT_T pred[8]; +// Test q15_v_hadamard() function. +int test_q15_v_hadamard() { + const Q15_T qvec_A[8] = {16378, 13638, 16378, 9787, 14861, 16378, 10661, 11018}; + const Q15_T qvec_B[8] = {178, 1064, -2048, 1718, -1663, 851, 1244, 1282}; + Q15_T pred[8]; #ifdef SHIFT - v_q_scalar_add(qscalar_A, &qvec_B[0], 8, &pred[0], 8, 0, 0); + const Q15_T expected[8] = {1423, 7085, -16378, 8209, -12068, 6805, 6475, 6897}; + q15_v_hadamard(&qvec_A[0], &qvec_B[0], 8, &pred[0], 5, 6); #else - v_q_scalar_add(qscalar_A, &qvec_B[0], 8, &pred[0], 256, 1, 1); + const Q15_T expected[8] = {1423, 7085, -16378, 8209, -12067, 6805, 6475, 6897}; + q15_v_hadamard(&qvec_A[0], &qvec_B[0], 8, &pred[0], 32, 64); #endif - return check_output(pred, expected, 8); + return check_output_q15(pred, expected, 8); +} + +// Test q15_v_sigmoid() function. +int test_q15_v_sigmoid() { + const Q15_T qvec_A[8] = {-2772, -1358, -3028, -389, -1666, -2070, -608, -699}; + const Q15_T expected_A[8] = {0, 2760, 0, 6640, 1528, 0, 5760, 5400}; + const Q15_T expected_B[8] = {3363, 5571, 3041, 7416, 5031, 4371, 6984, 6807}; + Q15_T pred_A[8], pred_B[8]; + + q15_v_sigmoid(&qvec_A[0], 8, &pred_A[0], 2, 1024, 2048, 11, 14, 0); + q15_v_sigmoid(&qvec_A[0], 8, &pred_B[0], 2, 1024, 2048, 11, 14, 1); + return (check_output_q15(pred_A, expected_A, 8) || check_output_q15(pred_B, expected_B, 8)); +} + +// Test q15_v_tanh() function. +int test_q15_v_tanh() { + const Q15_T qvec_A[8] = {178, 1064, -4162, 1718, -1663, 853, 1244, 1282}; + const Q15_T expected_A[8] = {178, 1064, -2048, 1718, -1663, 853, 1244, 1282}; + const Q15_T expected_B[8] = {1420, 7822, -15831, 11227, -10989, 6455, 8885, 9098}; + Q15_T pred_A[8], pred_B[8]; + + q15_v_tanh(&qvec_A[0], 8, &pred_A[0], 11, 11, 0); + q15_v_tanh(&qvec_A[0], 8, &pred_B[0], 11, 11, 1); + return (check_output_q15(pred_A, expected_A, 8) || check_output_q15(pred_B, expected_B, 8)); } -// Test v_q_scalar_sub() function. -int test_v_q_scalar_sub() { - const INT_T qscalar_A = 16384; - const INT_T qvec_B[8] = {0, 2760, 0, 6640, 1528, 0, 5760, 5400}; - const INT_T expected[8] = {16384, 13624, 16384, 9744, 14856, 16384, 10624, 10984}; - INT_T pred[8]; +// Test q15_v_scalar_add() function. +int test_q15_v_scalar_add() { + const Q15_T qscalar_A = 30111; + const Q15_T qvec_B[8] = {16261, 13521, 16261, 9670, 14744, 16261, 10544, 10901}; + const Q15_T expected[8] = {16378, 13638, 16378, 9787, 14861, 16378, 10661, 11018}; + Q15_T pred[8]; #ifdef SHIFT - v_q_scalar_sub(qscalar_A, &qvec_B[0], 8, &pred[0], 0, 0, 0); + q15_v_scalar_add(qscalar_A, &qvec_B[0], 8, &pred[0], 8, 0, 0); #else - v_q_scalar_sub(qscalar_A, &qvec_B[0], 8, &pred[0], 1, 1, 1); + q15_v_scalar_add(qscalar_A, &qvec_B[0], 8, &pred[0], 256, 1, 1); #endif - return check_output(pred, expected, 8); + return check_output_q15(pred, expected, 8); } -// Test v_q_sub_scalar() function. -int test_v_q_sub_scalar() { - const INT_T qvec_A[8] = {0, 2760, 0, 6640, 1528, 0, 5760, 5400}; - const INT_T qscalar_B = 16384; - const INT_T expected[8] = {-16384, -13624, -16384, -9744, -14856, -16384, -10624, -10984}; - INT_T pred[8]; +// Test q15_v_scalar_sub() function. +int test_q15_v_scalar_sub() { + const Q15_T qscalar_A = 16384; + const Q15_T qvec_B[8] = {0, 2760, 0, 6640, 1528, 0, 5760, 5400}; + const Q15_T expected[8] = {16384, 13624, 16384, 9744, 14856, 16384, 10624, 10984}; + Q15_T pred[8]; #ifdef SHIFT - v_q_sub_scalar(&qvec_A[0], qscalar_B, 8, &pred[0], 0, 0, 0); + q15_v_scalar_sub(qscalar_A, &qvec_B[0], 8, &pred[0], 0, 0, 0); #else - v_q_sub_scalar(&qvec_A[0], qscalar_B, 8, &pred[0], 1, 1, 1); + q15_v_scalar_sub(qscalar_A, &qvec_B[0], 8, &pred[0], 1, 1, 1); #endif - return check_output(pred, expected, 8); + return check_output_q15(pred, expected, 8); } -// Test v_q_scalar_mul() function. -int test_v_q_scalar_mul() { - const INT_T qscalar_A = 32522; - const INT_T qvec_B[8] = {16384, 13624, 16384, 9744, 14856, 16384, 10624, 10984}; - const INT_T expected[8] = {16261, 13521, 16261, 9670, 14744, 16261, 10544, 10901}; - INT_T pred[8]; +// Test q15_v_scalar_mul() function. +int test_q15_v_scalar_mul() { + const Q15_T qscalar_A = 32522; + const Q15_T qvec_B[8] = {16384, 13624, 16384, 9744, 14856, 16384, 10624, 10984}; + const Q15_T expected[8] = {16261, 13521, 16261, 9670, 14744, 16261, 10544, 10901}; + Q15_T pred[8]; #ifdef SHIFT - v_q_scalar_mul(qscalar_A, &qvec_B[0], 8, &pred[0], 7, 8); + q15_v_scalar_mul(qscalar_A, &qvec_B[0], 8, &pred[0], 7, 8); #else - v_q_scalar_mul(qscalar_A, &qvec_B[0], 8, &pred[0], 128, 256); + q15_v_scalar_mul(qscalar_A, &qvec_B[0], 8, &pred[0], 128, 256); #endif - return check_output(pred, expected, 8); + return check_output_q15(pred, expected, 8); } -// Test v_q_argmax() function. -int test_v_q_argmax() { - const INT_T qvec_A[8] = {1675, 9870, -9876, -1234, 5674, 28765, 9876, 12654}; +// Test q15_v_argmax() function. +int test_q15_v_argmax() { + const Q15_T qvec_A[8] = {1675, 9870, -9876, -1234, 5674, 28765, 9876, 12654}; const ITER_T expected[1] = {5}; ITER_T pred[1]; - v_q_argmax(&qvec_A[0], 8, &pred[0]); - return check_output((const INT_T*)pred, (const INT_T*)expected, 1); + q15_v_argmax(&qvec_A[0], 8, &pred[0]); + return check_output_q15((const Q15_T*)pred, (const Q15_T*)expected, 1); } -// Test v_q_relu() function. -int test_v_q_relu() { - INT_T qvec_A[16] = {-3648, 648, -2147, -2348, 1468, -4348, 3648, 3648, -648, 9648, 3778, 4743, 7483, -243, 8, -21}; - const INT_T expected[16] = {0, 648, 0, 0, 1468, 0, 3648, 3648, 0, 9648, 3778, 4743, 7483, 0, 8, 0}; +// Test q15_v_scale_up() function. +int test_q15_v_scale_up() { + Q15_T qvec_A[16] = {423, -987, -2342, 1232, -324, 843, 982, 2342, 343, 654, 987, 654, 567, 2876, 987, 1265}; + Q15_T expected[16] = {846, -1974, -4684, 2464, -648, 1686, 1964, 4684, 686, 1308, 1974, 1308, 1134, 5752, 1974, 2530}; + + #ifdef SHIFT + q15_v_scale_up(&qvec_A[0], 16, &qvec_A[0], 1); + #else + q15_v_scale_up(&qvec_A[0], 16, &qvec_A[0], 2); + #endif - v_q_relu(&qvec_A[0], 16); - return check_output(qvec_A, expected, 16); + return check_output_q15(qvec_A, expected, 16); } -// Test v_q_exp() function. -int test_v_q_exp() { - const INT_T qvec_A[16] = {13, 54, 34, 35, 87, 11, 41, 93, 89, 11, 90, 25, 76, 39, 48, 93}; - const INT_T expected[16] = {40, 6832, 560, 635, 29493, 31, 1345, -22628, 18482, 31, 25215, 182, -24195, 1047, 3227, -22628}; - INT_T pred[16]; +// Test q15_v_scale_down() function. +int test_q15_v_scale_down() { + Q15_T qvec_A[16] = {4232, -9879, -2342, 1232, -3242, 8432, 9823, 2342, 343, 6543, 9876, 6542, 5674, 28765, 9876, 12654}; + + #ifdef SHIFT + const Q15_T expected[16] = {2116, -4940, -1171, 616, -1621, 4216, 4911, 1171, 171, 3271, 4938, 3271, 2837, 14382, 4938, 6327}; + q15_v_scale_down(&qvec_A[0], 16, &qvec_A[0], 1); + #else + const Q15_T expected[16] = {2116, -4939, -1171, 616, -1621, 4216, 4911, 1171, 171, 3271, 4938, 3271, 2837, 14382, 4938, 6327}; + q15_v_scale_down(&qvec_A[0], 16, &qvec_A[0], 2); + #endif - v_q_exp(&qvec_A[0], 16, &pred[0], 8, 8); - return check_output(pred, expected, 16); + return check_output_q15(qvec_A, expected, 16); } -// Test v_q_scale_up() function. -int test_v_q_scale_up() { - INT_T qvec_A[16] = {423, -987, -2342, 1232, -324, 843, 982, 2342, 343, 654, 987, 654, 567, 2876, 987, 1265}; - INT_T expected[16] = {846, -1974, -4684, 2464, -648, 1686, 1964, 4684, 686, 1308, 1974, 1308, 1134, 5752, 1974, 2530}; +// Test q15xq7_q15_m_mulvec() function. +int test_q15xq7_q15_m_mulvec() { + const Q15_T qmat_A[8 * 4] = {7069, -10389, 1562, -1992, 3262, -37, -1143, -995, 5513, -17035, -14615, -6636, 4733, -403, 4106, -1104, -2707, -1287, -18128, -1832, -10108, -137, 2064, 1207, 5233, 226, 831, -1909, 4489, -1099, 2845, -1261}; + const Q7_T qvec_B[4] = {104, 119, 42, 24}; + Q15_T pred[8]; #ifdef SHIFT - v_q_scale_up(&qvec_A[0], 16, 1); + const Q15_T expected[8] = {-15, 8, -68, 18, -38, -30, 17, 12}; + q15xq7_q15_m_mulvec(&qmat_A[0], &qvec_B[0], 8, 4, &pred[0], 7, 6, 2, 0); #else - v_q_scale_up(&qvec_A[0], 16, 2); + const Q15_T expected[8] = {-14, 8, -67, 18, -37, -29, 17, 12}; + q15xq7_q15_m_mulvec(&qmat_A[0], &qvec_B[0], 8, 4, &pred[0], 128, 64, 4, 0); #endif - return check_output(qvec_A, expected, 16); + return check_output_q15(pred, expected, 8); } -// Test v_q_scale_down() function. -int test_v_q_scale_down() { - INT_T qvec_A[16] = {4232, -9879, -2342, 1232, -3242, 8432, 9823, 2342, 343, 6543, 9876, 6542, 5674, 28765, 9876, 12654}; +// Test q15_m_mulvec() function. +int test_q15_m_mulvec() { + const Q15_T qmat_A[8 * 4] = {7069, -10389, 1562, -1992, 3262, -37, -1143, -995, 5513, -17035, -14615, -6636, 4733, -403, 4106, -1104, -2707, -1287, -18128, -1832, -10108, -137, 2064, 1207, 5233, 226, 831, -1909, 4489, -1099, 2845, -1261}; + const Q15_T qvec_B[4] = {1040, 1919, 4254, 4024}; + Q15_T pred[8]; #ifdef SHIFT - const INT_T expected[16] = {2116, -4940, -1171, 616, -1621, 4216, 4911, 1171, 171, 3271, 4938, 3271, 2837, 14382, 4938, 6327}; - v_q_scale_down(&qvec_A[0], 16, 1); + const Q15_T expected[8] = {-426, -170, -3535, 524, -2740, 87, 52, 292}; + q15_m_mulvec(&qmat_A[0], &qvec_B[0], 8, 4, &pred[0], 7, 6, 2, 0); #else - const INT_T expected[16] = {2116, -4939, -1171, 616, -1621, 4216, 4911, 1171, 171, 3271, 4938, 3271, 2837, 14382, 4938, 6327}; - v_q_scale_down(&qvec_A[0], 16, 2); + const Q15_T expected[8] = {-425, -169, -3534, 524, -2739, 87, 52, 292}; + q15_m_mulvec(&qmat_A[0], &qvec_B[0], 8, 4, &pred[0], 128, 64, 4, 0); #endif - return check_output(qvec_A, expected, 16); + return check_output_q15(pred, expected, 8); } -// Test m_q_transpose() function. -int test_m_q_transpose() { - const INT_T qmat_A[4 * 3] = {1238, 5432, 1834, 6543, -5698, -2342, 9876, 5674, 8435, 6542, 7824, 3924}; - const INT_T expected_A[3 * 4] = {1238, 6543, 9876, 6542, 5432, -5698, 5674, 7824, 1834, -2342, 8435, 3924}; - INT_T pred_A[12]; +// Test q7_t_add() function. +int test_q7_t_add() { + const Q7_T qten_A[2 * 2 * 2 * 2] = {124, 55, + 45, 43, - const INT_T qmat_B[3 * 3] = {1238, 5432, 1834, 6543, -5698, -2342, 9876, 5674, 8435}; - const INT_T expected_B[3 * 3] = {1238, 6543, 9876, 5432, -5698, 5674, 1834, -2342, 8435}; - INT_T pred_B[9]; + 87, 41, + 54, 89, - m_q_transpose(&qmat_A[0], 3, 4, &pred_A[0]); - m_q_transpose(&qmat_B[0], 3, 3, &pred_B[0]); - return (check_output(pred_A, expected_A, 12) || check_output(pred_B, expected_B, 9)); -} + 69, 12, + 60, 54, -// Test m_q_reverse() function. -int test_m_q_reverse() { - const INT_T qmat_A[4 * 4]= {4232, -9879, -2342, 1232, -3242, 8432, 9823, 2342, 343, 6543, 9876, 6542, 5674, 28765, 9876, 12654}; - const INT_T expected_A[4 * 4] = {1232, -2342, -9879, 4232, 2342, 9823, 8432, -3242, 6542, 9876, 6543, 343, 12654, 9876, 28765, 5674}; - const INT_T expected_B[4 * 4] = {5674, 28765, 9876, 12654, 343, 6543, 9876, 6542, -3242, 8432, 9823, 2342, 4232, -9879, -2342, 1232}; - INT_T pred_A[16]; - INT_T pred_B[16]; + 76, 49, + 93, 32}; + const Q7_T qten_B[2 * 2 * 2 * 2] = {27, 31, + 38, 22, - m_q_reverse(&qmat_A[0], 4, 4, 1, &pred_A[0]); - m_q_reverse(&qmat_A[0], 4, 4, 0, &pred_B[0]); + 65, 29, + 81, 55, - return check_output(pred_A, expected_A, 16) || check_output(pred_B, expected_B, 16); -} -// Test m_q_add_vec() function. -int test_m_q_add_vec() { - const INT_T qmat_A[4 * 4] = {1324, 5453, 3454, 3435, 8789, 3411, 5412, 8934, 6895, 1211, 6790, 5425, 8976, 4539, 9348, 9321}; - const INT_T qvec_B[4] = {8452, 2341, 9383, 2353}; - const INT_T expected[16] = {2775, 3311, 4072, 2305, 6507, 2290, 5051, 5055, 5560, 1190, 5740, 3300, 6601, 2854, 7019, 5248}; - INT_T pred[16]; + 60, 119, + 8, 29, - #ifdef SHIFT - m_q_add_vec(&qmat_A[0], &qvec_B[0], 4, 4, &pred[0], 0, 1, 1); - #else - m_q_add_vec(&qmat_A[0], &qvec_B[0], 4, 4, &pred[0], 1, 2, 2); - #endif + 66, 85, + 87, 24}; + const Q7_T expected[2 * 2 * 2 * 2] = {68, 34, + 31, 26, + + 59, 27, + 47, 57, - return check_output(pred, expected, 16); -} -// Test m_q_sub_vec() function. -int test_m_q_sub_vec() { - const INT_T qmat_A[4 * 4] = {1324, 5453, 3454, 3435, 8789, 3411, 5412, 8934, 6895, 1211, 6790, 5425, 8976, 4539, 9348, 9321}; - const INT_T qvec_B[4] = {8452, 2341, 9383, 2353}; - const INT_T expected[16] = {-1451, 2141, -618, 1129, 2281, 1120, 361, 3879, 1334, 20, 1050, 2124, 2375, 1684, 2329, 4072}; - INT_T pred[16]; + 49, 35, + 32, 34, + + 54, 45, + 67, 22}; + Q7_T pred[16]; #ifdef SHIFT - m_q_sub_vec(&qmat_A[0], &qvec_B[0], 4, 4, &pred[0], 0, 1, 1); + q7_t_add(&qten_A[0], &qten_B[0], 2, 2, 2, 2, &pred[0], 0, 1, 1); #else - m_q_sub_vec(&qmat_A[0], &qvec_B[0], 4, 4, &pred[0], 1, 2, 2); + q7_t_add(&qten_A[0], &qten_B[0], 2, 2, 2, 2, &pred[0], 1, 2, 2); #endif - return check_output(pred, expected, 16); + return check_output_q7(pred, expected, 16); } -// Test m_q_mulvec() function. -int test_m_q_mulvec() { - const INT_T qmat_A[8 * 4] = {7069, -10389, 1562, -1992, 3262, -37, -1143, -995, 5513, -17035, -14615, -6636, 4733, -403, 4106, -1104, -2707, -1287, -18128, -1832, -10108, -137, 2064, 1207, 5233, 226, 831, -1909, 4489, -1099, 2845, -1261}; - const INT_T qvec_B[4] = {1040, 1919, 4254, 4024}; - INT_T pred[8]; +// Test q15_t_add() function. +int test_q15_t_add() { + const Q15_T qten_A[2 * 2 * 2 * 2] = {1324, 5453, + 3454, 3435, + + 8789, 3411, + 5412, 8934, + + + 6895, 1211, + 6790, 5425, + + 8976, 4539, + 9348, 9321}; + const Q15_T qten_B[2 * 2 * 2 * 2] = {2775, 3311, + 3840, 2302, + + 6507, 2290, + 4819, 5052, + + + 5560, 1190, + 5508, 3297, + + 6601, 2854, + 6787, 5245}; + const Q15_T expected[2 * 2 * 2 * 2] = {1355, 3553, + 2687, 2292, + + 6020, 2277, + 3910, 5730, + + + 4837, 902, + 4772, 3536, + + 6138, 2982, + 6370, 5971}; + Q15_T pred[16]; #ifdef SHIFT - const INT_T expected[8] = {-426, -170, -3535, 524, -2740, 87, 52, 292}; - m_q_mulvec(&qmat_A[0], &qvec_B[0], 8, 4, &pred[0], 7, 6, 2, 0); + q15_t_add(&qten_A[0], &qten_B[0], 2, 2, 2, 2, &pred[0], 0, 1, 1); #else - const INT_T expected[8] = {-425, -169, -3534, 524, -2739, 87, 52, 292}; - m_q_mulvec(&qmat_A[0], &qvec_B[0], 8, 4, &pred[0], 128, 64, 2, 0); + q15_t_add(&qten_A[0], &qten_B[0], 2, 2, 2, 2, &pred[0], 1, 2, 2); #endif - return check_output(pred, expected, 8); + return check_output_q15(pred, expected, 16); } -// Test m_q_sparse_mulvec() function. -int test_m_q_sparse_mulvec() { - const ITER_T qmat_A[16] = {1, 2, 3, 4, 5, 6, 7, 0, 2, 4, 6, 8, 10, 12, 14, 0}; - const INT_T qmat_B[14] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140}; - const INT_T qvec_C[2] = {1, 2}; - const INT_T expected[14] = {1, 22, 3, 27, 6, 32, 8, 27, 0, 30, 0, 32, 0, 35}; - INT_T pred[14] = {}; +// Test q7xq15_q7_t_add_vec() function. +int test_q7xq15_q7_t_add_vec() { + const Q7_T qten_A[2 * 2 * 2 * 2] = {24, 43, + 54, 33, + + 89, 31, + 12, 93, + + + 68, 121, + 90, 25, + + 76, 45, + 34, 21}; + const Q15_T qvec_B[2] = {8452, 2341}; + const Q7_T expected[2 * 2 * 2 * 2] = {45, 30, + 60, 25, + + 77, 24, + 39, 55, + + + 67, 69, + 78, 21, + + 71, 31, + 50, 19}; + Q7_T pred[16]; #ifdef SHIFT - m_q_sparse_mulvec(&qmat_A[0], &qmat_B[0], &qvec_C[0], 2, &pred[0], 0, 1, 2); + q7xq15_q7_t_add_vec(&qten_A[0], &qvec_B[0], 2, 2, 2, 2, &pred[0], 0, 7, 1); #else - m_q_sparse_mulvec(&qmat_A[0], &qmat_B[0], &qvec_C[0], 2, &pred[0], 1, 2, 4); + q7xq15_q7_t_add_vec(&qten_A[0], &qvec_B[0], 2, 2, 2, 2, &pred[0], 1, 128, 2); #endif - return check_output(pred, expected, 14); + return check_output_q7(pred, expected, 16); } -// Test t_q_add_vec() function. -int test_t_q_add_vec() { - const INT_T qmat_A[2 * 2 * 2 * 2] = {1324, 5453, +// Test q15_t_add_vec() function. +int test_q15_t_add_vec() { + const Q15_T qten_A[2 * 2 * 2 * 2] = {1324, 5453, 3454, 3435, 8789, 3411, @@ -340,8 +411,8 @@ int test_t_q_add_vec() { 8976, 4539, 9348, 9321}; - const INT_T qvec_B[2] = {8452, 2341}; - const INT_T expected[2 * 2 * 2 * 2] = {2775, 3311, + const Q15_T qvec_B[2] = {8452, 2341}; + const Q15_T expected[2 * 2 * 2 * 2] = {2775, 3311, 3840, 2302, 6507, 2290, @@ -353,20 +424,52 @@ int test_t_q_add_vec() { 6601, 2854, 6787, 5245}; - INT_T pred[16]; + Q15_T pred[16]; #ifdef SHIFT - t_q_add_vec(&qmat_A[0], &qvec_B[0], 2, 2, 2, 2, &pred[0], 0, 1, 1); + q15_t_add_vec(&qten_A[0], &qvec_B[0], 2, 2, 2, 2, &pred[0], 0, 1, 1); #else - t_q_add_vec(&qmat_A[0], &qvec_B[0], 2, 2, 2, 2, &pred[0], 1, 2, 2); + q15_t_add_vec(&qten_A[0], &qvec_B[0], 2, 2, 2, 2, &pred[0], 1, 2, 2); #endif - return check_output(pred, expected, 16); + return check_output_q15(pred, expected, 16); +} + +// Test q7_v_relu() function. +int test_q7_t_relu() { + const Q7_T qten_A[2 * 2 * 2 * 2] = {124, 53, + 45, 35, + + 87, -11, + 54, 89, + + + 95, -12, + 90, 42, + + 76, 39, + 93, 21}; + const Q7_T expected[2 * 2 * 2 * 2] = {64, 53, + 45, 35, + + 64, 0, + 54, 64, + + + 64, 0, + 64, 42, + + 64, 39, + 64, 21}; + Q7_T pred[16]; + + q7_t_relu(&qten_A[0], 2, 2, 2, 2, &pred[0], 64, 1); + return check_output_q7(pred, expected, 16); } -// Test t_q_sub_vec() function. -int test_t_q_sub_vec() { - const INT_T qmat_A[2 * 2 * 2 * 2] = {1324, 5453, +// Test q15_t_l2_norm() function. +int test_q15_t_l2_norm() { + const Q15_T qten_A[2 * 2 * 2 * 2] = {1324, 5453, 3454, 3435, 8789, 3411, @@ -378,139 +481,219 @@ int test_t_q_sub_vec() { 8976, 4539, 9348, 9321}; - const INT_T qvec_B[2] = {8452, 2341}; - const INT_T expected[2 * 2 * 2 * 2] = {-1451, 2141, - -386, 1132, + const Q15_T expected[2 * 2 * 2 * 2] = {662, 2726, + 1727, 1717, + + 4394, 1705, + 2706, 4467, + + + 3447, 605, + 3395, 2712, + + 4488, 2269, + 4674, 4660}; + Q15_T pred[16]; + + q15_t_l2_norm(&qten_A[0], 2, 2, 2, 2, &pred[0], 1, 1); + return check_output_q15(pred, expected, 16); +} + +// Test q7xq15_q7_convolution() function. +int test_q7xq15_q7_convolution() { + const Q7_T qmat_A[2 * 2 * 2 * 2] = {11, 22, + 13, 40, + + 50, 60, + 66, 76, + + + 86, 91, + 11, 31, + + 53, 14, + 71, 16}; + //Convolution Filters + const Q15_T qmat_B[2 * 2 * 2 * 1 * 1] = {0, 1, + 1, 0, + + + 0, 1, + 1, 0,}; + const Q15_T qmat_C[1 * 2 * 2 * 2 * 1] = {0, 1, + 1, 0, + + 1, 0, + 0, 1}; + const Q15_T qmat_D[2 * 3 * 3 * 1 * 1] = {0, 0, 1, + 0, 1, 0, + 1, 0, 0, + + + 0, 0, 1, + 0, 1, 0, + 1, 0, 0}; + + const Q7_T expected_A[2 * 1 * 1 * 2] = {15, 25, + - 2281, 1120, - 593, 3882, + 16, 11}; + const Q7_T expected_B[2 * 1 * 1 * 1] = {20, - 1334, 20, - 1282, 2127, + 21}; + const Q7_T expected_C[2 * 2 * 2 * 2] = {1, 2, + 7, 12, - 2375, 1684, - 2561, 4075}; - INT_T pred[16]; + 7, 12, + 8, 9, + + + 10, 11, + 8, 5, + + 8, 5, + 8, 2}; + const Q7_T expected_D[2 * 3 * 3 * 2] = {0, 0, + 0, 0, + 1, 1, + + 0, 0, + 0, 0, + 0, 0, + + 0, 1, + 0, 0, + 0, 0, + + + 0, 0, + 0, 0, + 1, 0, + + 0, 0, + 0, 0, + 0, 0, + + 0, 0, + 0, 0, + 0, 0}; + Q7_T pred_A[2 * 1 * 1 * 2], pred_B[2 * 1 * 1 * 1], pred_C[2 * 2 * 2 * 2], pred_D[2 * 3 * 3 * 2]; #ifdef SHIFT - t_q_sub_vec(&qmat_A[0], &qvec_B[0], 2, 2, 2, 2, &pred[0], 0, 1, 1); + q7xq15_q7_convolution(qmat_A, qmat_B, pred_A, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 2); + q7xq15_q7_convolution(qmat_A, qmat_C, pred_B, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 3); + q7xq15_q7_convolution(qmat_A, qmat_D, pred_C, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3); + q7xq15_q7_convolution(qmat_A, qmat_B, pred_D, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 1, 1, 3); #else - t_q_sub_vec(&qmat_A[0], &qvec_B[0], 2, 2, 2, 2, &pred[0], 1, 2, 2); + q7xq15_q7_convolution(qmat_A, qmat_B, pred_A, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 4); + q7xq15_q7_convolution(qmat_A, qmat_C, pred_B, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 8); + q7xq15_q7_convolution(qmat_A, qmat_D, pred_C, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8); + q7xq15_q7_convolution(qmat_A, qmat_B, pred_D, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 8); #endif - return check_output(pred, expected, 16); + return (check_output_q7(pred_A, expected_A, 4) || check_output_q7(pred_B, expected_B, 2) || check_output_q7(pred_C, expected_C, 16) || check_output_q7(pred_D, expected_D, 36)); } -// Test q_maxpool() function. -int test_q_maxpool() { - const INT_T qmat_A[2 * 2 * 2 * 2] = {11, 220, - 130, 40, +// Test q7xq15_q15_convolution() function. +int test_q7xq15_q15_convolution() { + const Q7_T qmat_A[2 * 2 * 2 * 2] = {11, 22, + 13, 40, - 50, 60, - 66, 76, + 50, 60, + 66, 76, - 86, 910, - 411, 312, - - 513, 514, - 715, 716}; - const INT_T qmat_B[2 * 2 * 2 * 2] = {100, 992, - 15, 26, - - 27, 8, - 3, 4, + 86, 91, + 41, 31, + 53, 51, + 75, 71}; + //Convolution Filters + const Q15_T qmat_B[2 * 2 * 2 * 1 * 1] = {0, 1, + 1, 0, - 5, 2, - 2, 2, - 7, 8, - 29, 140}; - const INT_T expected_A[2 * 1 * 1 * 2] = {32, 55, + 0, 1, + 1, 0,}; + const Q15_T qmat_C[1 * 2 * 2 * 2 * 1] = {0, 1, + 1, 0, + 1, 0, + 0, 1}; + const Q15_T qmat_D[2 * 3 * 3 * 1 * 1] = {0, 0, 1, + 0, 1, 0, + 1, 0, 0, - 178, 227}; - const INT_T expected_B[2 * 3 * 3 * 2] = {100, 992, - 100, 992, - 15, 26, - 100, 992, - 100, 992, - 15, 26, + 0, 0, 1, + 0, 1, 0, + 1, 0, 0}; - 27, 8, - 27, 8, - 3, 4, + const Q15_T expected_A[2 * 1 * 1 * 2] = {15, 25, - 5, 2, - 5, 2, - 2, 2, + 23, 20}; + const Q15_T expected_B[2 * 1 * 1 * 1] = {20, - 7, 8, - 29, 140, - 29, 140, - 7, 8, - 29, 140, - 29, 140}; - const INT_T expected_C[2 * 2 * 2 * 2] = {100, 992, - 100, 992, + 32}; + const Q15_T expected_C[2 * 2 * 2 * 2] = {1, 2, + 7, 12, - 100, 992, - 100, 992, + 7, 12, + 8, 9, - 29, 140, - 29, 140, + 10, 11, + 11, 10, - 29, 140, - 29, 140}; - const INT_T expected_D[2 * 3 * 3 * 2] = {16, 19, + 11, 10, + 9, 8}; + const Q15_T expected_D[2 * 3 * 3 * 2] = {0, 0, 0, 0, - 12, 15, + 1, 1, 0, 0, 0, 0, 0, 0, - 32, 10, + 0, 1, + 0, 0, 0, 0, - 2, 55, - 178, 179, 0, 0, - 128, 128, + 0, 0, + 1, 1, 0, 0, 0, 0, 0, 0, - 102, 78, + 1, 0, 0, 0, - 21, 227}; - INT_T pred_A[2 * 1 * 1 * 2], pred_B[2 * 3 * 3 * 2], pred_C[2 * 2 * 2 * 2], pred_D[2 * 3 * 3 * 2]; + 0, 0}; + Q15_T pred_A[2 * 1 * 1 * 2], pred_B[2 * 1 * 1 * 1], pred_C[2 * 2 * 2 * 2], pred_D[2 * 3 * 3 * 2]; #ifdef SHIFT - q_maxpool(qmat_A, pred_A, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1); - q_maxpool(qmat_B, pred_B, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0); - q_maxpool(qmat_B, pred_C, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0); - q_maxpool(qmat_A, pred_D, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 1, 1); + q7xq15_q15_convolution(qmat_A, qmat_B, pred_A, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 2); + q7xq15_q15_convolution(qmat_A, qmat_C, pred_B, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 3); + q7xq15_q15_convolution(qmat_A, qmat_D, pred_C, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3); + q7xq15_q15_convolution(qmat_A, qmat_B, pred_D, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 1, 1, 3); #else - q_maxpool(qmat_A, pred_A, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2); - q_maxpool(qmat_B, pred_B, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); - q_maxpool(qmat_B, pred_C, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); - q_maxpool(qmat_A, pred_D, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2); + q7xq15_q15_convolution(qmat_A, qmat_B, pred_A, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 4); + q7xq15_q15_convolution(qmat_A, qmat_C, pred_B, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 8); + q7xq15_q15_convolution(qmat_A, qmat_D, pred_C, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8); + q7xq15_q15_convolution(qmat_A, qmat_B, pred_D, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 8); #endif - return (check_output(pred_A, expected_A, 4) || check_output(pred_B, expected_B, 36) || check_output(pred_C, expected_C, 8) || check_output(pred_D, expected_D, 36)); + + return (check_output_q15(pred_A, expected_A, 4) || check_output_q15(pred_B, expected_B, 2) || check_output_q15(pred_C, expected_C, 16) || check_output_q15(pred_D, expected_D, 36)); } -// Test q_convolution() function. -int test_q_convolution() { - const INT_T qmat_A[2 * 2 * 2 * 2] = {11, 220, +// Test q15_convolution() function. +int test_q15_convolution() { + const Q15_T qmat_A[2 * 2 * 2 * 2] = {11, 220, 130, 40, 50, 60, @@ -523,26 +706,35 @@ int test_q_convolution() { 513, 514, 715, 716}; //Convolution Filters - const INT_T qmat_B[2 * 2 * 1 * 1] = {0, 1, - 1, 0}; - const INT_T qmat_C[2 * 2 * 2 * 1] = {0, 1, - 1, 0, + const Q15_T qmat_B[2 * 2 * 2 * 1 * 1] = {0, 1, + 1, 0, + + + 0, 1, + 1, 0,}; + const Q15_T qmat_C[1 * 2 * 2 * 2 * 1] = {0, 1, + 1, 0, - 1, 0, - 0, 1}; - const INT_T qmat_D[3 * 3 * 1 * 1] = {0, 0, 1, - 0, 1, 0, - 1, 0, 0}; + 1, 0, + 0, 1}; + const Q15_T qmat_D[2 * 3 * 3 * 1 * 1] = {0, 0, 1, + 0, 1, 0, + 1, 0, 0, - const INT_T expected_A[2 * 1 * 1 * 2] = {44, 25, + 0, 0, 1, + 0, 1, 0, + 1, 0, 0}; - 230, 206}; - const INT_T expected_B[2 * 1 * 1 * 1] = {58, + const Q15_T expected_A[2 * 1 * 1 * 2] = {45, 25, - 317}; - const INT_T expected_C[2 * 2 * 2 * 2] = {1, 27, + 231, 206}; + const Q15_T expected_B[2 * 1 * 1 * 1] = {59, + + + 318}; + const Q15_T expected_C[2 * 2 * 2 * 2] = {1, 27, 22, 12, 22, 12, @@ -554,7 +746,7 @@ int test_q_convolution() { 115, 103, 89, 89}; - const INT_T expected_D[2 * 3 * 3 * 2] = {0, 0, + const Q15_T expected_D[2 * 3 * 3 * 2] = {0, 0, 0, 0, 1, 1, @@ -578,74 +770,72 @@ int test_q_convolution() { 12, 9, 0, 0, 0, 0}; - INT_T pred_A[2 * 1 * 1 * 2], pred_B[2 * 1 * 1 * 1], pred_C[2 * 2 * 2 * 2], pred_D[2 * 3 * 3 * 2]; - INTM_T temp[16]; + Q15_T pred_A[2 * 1 * 1 * 2], pred_B[2 * 1 * 1 * 1], pred_C[2 * 2 * 2 * 2], pred_D[2 * 3 * 3 * 2]; #ifdef SHIFT - q_convolution(qmat_A, qmat_B, pred_A, temp, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 0, 0, 0); - q_convolution(qmat_A, qmat_C, pred_B, temp, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 3, 0, 0, 0); - q_convolution(qmat_A, qmat_D, pred_C, temp, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 0, 0, 0); - q_convolution(qmat_A, qmat_B, pred_D, temp, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 0, 1, 1); + q15_convolution(qmat_A, qmat_B, pred_A, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 2); + q15_convolution(qmat_A, qmat_C, pred_B, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 3); + q15_convolution(qmat_A, qmat_D, pred_C, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 3); + q15_convolution(qmat_A, qmat_B, pred_D, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 1, 1, 3); #else - q_convolution(qmat_A, qmat_B, pred_A, temp, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 0, 1, 1); - q_convolution(qmat_A, qmat_C, pred_B, temp, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 3, 0, 1, 1); - q_convolution(qmat_A, qmat_D, pred_C, temp, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 0, 1, 1); - q_convolution(qmat_A, qmat_B, pred_D, temp, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 3, 0, 2, 2); + q15_convolution(qmat_A, qmat_B, pred_A, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 4); + q15_convolution(qmat_A, qmat_C, pred_B, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 8); + q15_convolution(qmat_A, qmat_D, pred_C, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8); + q15_convolution(qmat_A, qmat_B, pred_D, 2, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, 1, 1, 3, 3, 2, 2, 8); #endif - return (check_output(pred_A, expected_A, 4) || check_output(pred_B, expected_B, 2) || check_output(pred_C, expected_C, 16) || check_output(pred_D, expected_D, 36)); + + return (check_output_q15(pred_A, expected_A, 4) || check_output_q15(pred_B, expected_B, 2) || check_output_q15(pred_C, expected_C, 16) || check_output_q15(pred_D, expected_D, 36)); } int main() { - if (test_v_q_treesum()) { - printf("Test Failure for v_q_treesum()!\n"); - } else if (test_v_q_add()) { - printf("Test Failure for v_q_add()!\n"); - } else if (test_v_q_sub()) { - printf("Test Failure for v_q_sub()!\n"); - } else if (test_v_q_hadamard()) { - printf("Test Failure for v_q_hadamard()!\n"); - } else if (test_v_q_sigmoid()) { - printf("Test Failure for v_q_sigmoid()!\n"); - } else if (test_v_q_tanh()) { - printf("Test Failure for v_q_tanh()!\n"); - } else if (test_v_q_scalar_add()) { - printf("Test Failure for v_q_scalar_add()!\n"); - } else if (test_v_q_scalar_sub()) { - printf("Test Failure for v_q_scalar_sub()!\n"); - } else if (test_v_q_sub_scalar()) { - printf("Test Failure for v_q_sub_scalar()!\n"); - } else if (test_v_q_scalar_mul()) { - printf("Test Failure for v_q_scalar_mul()!\n"); - } else if (test_v_q_argmax()) { - printf("Test Failure for v_q_argmax()!\n"); - } else if (test_v_q_relu()) { - printf("Test Failure for v_q_relu()!\n"); - } else if (test_v_q_exp()) { - printf("Test Failure for v_q_exp()!\n"); - } else if (test_v_q_scale_up()) { - printf("Test Failure for v_q_scale_up()!\n"); - } else if (test_v_q_scale_down()) { - printf("Test Failure for v_q_scale_down()!\n"); - } else if (test_m_q_transpose()) { - printf("Test Failure for m_q_transpose()!\n"); - } else if (test_m_q_reverse()) { - printf("Test Failure for m_q_reverse()!\n"); - } else if (test_m_q_add_vec()) { - printf("Test Failure for m_q_add_vec()!\n"); - } else if (test_m_q_sub_vec()) { - printf("Test Failure for m_q_sub_vec()!\n"); - } else if (test_m_q_mulvec()) { - printf("Test Failure for m_q_mulvec()!\n"); - } else if (test_m_q_sparse_mulvec()) { - printf("Test Failure for m_q_sparse_mulvec()!\n"); - } else if (test_t_q_add_vec()) { - printf("Test Failure for t_q_add_vec()!\n"); - } else if (test_t_q_sub_vec()) { - printf("Test Failure for t_q_sub_vec()!\n"); - } else if (test_q_maxpool()) { - printf("Test Failure for q_maxpool()!\n"); - } else if (test_q_convolution()) { - printf("Test Failure for q_convolution()!\n"); + if (test_q15_v_add()) { + printf("Test Failure for q15_v_add()!\n"); + } else if (test_q7_v_sub()) { + printf("Test Failure for q7_v_sub()!\n"); + } else if (test_q15_v_sub()) { + printf("Test Failure for q15_v_sub()!\n"); + } else if (test_q7_v_hadamard()) { + printf("Test Failure for q7_v_hadamard()!\n"); + } else if (test_q15_v_hadamard()) { + printf("Test Failure for q15_v_hadamard()!\n"); + } else if (test_q15_v_sigmoid()) { + printf("Test Failure for q15_v_sigmoid()!\n"); + } else if (test_q15_v_tanh()) { + printf("Test Failure for q15_v_tanh()!\n"); + } else if (test_q15_v_scalar_add()) { + printf("Test Failure for q15_v_scalar_add()!\n"); + } else if (test_q15_v_scalar_sub()) { + printf("Test Failure for q15_v_scalar_sub()!\n"); + } else if (test_q15_v_scalar_mul()) { + printf("Test Failure for q15_v_scalar_mul()!\n"); + } else if (test_q15_v_argmax()) { + printf("Test Failure for q15_v_argmax()!\n"); + } else if (test_q15_v_scale_up()) { + printf("Test Failure for q15_v_scale_up()!\n"); + } else if (test_q15_v_scale_down()) { + printf("Test Failure for q15_v_scale_down()!\n"); + } else if (test_q15xq7_q15_m_mulvec()) { + printf("Test Failure for q15xq7_q15_m_mulvec()!\n"); + } else if (test_q15_m_mulvec()) { + printf("Test Failure for q15_m_mulvec()!\n"); + } else if (test_q7_t_add()) { + printf("Test Failure for q7_t_add()!\n"); + } else if (test_q15_t_add()) { + printf("Test Failure for q15_t_add()!\n"); + } else if (test_q7xq15_q7_t_add_vec()) { + printf("Test Failure for q7xq15_q7_t_add_vec()!\n"); + } else if (test_q15_t_add_vec()) { + printf("Test Failure for q15_t_add_vec()!\n"); + } else if (test_q7_t_relu()) { + printf("Test Failure for q7_t_relu()!\n"); + } else if (test_q15_t_l2_norm()) { + printf("Test Failure for q15_t_l2_norm()!\n"); + } else if (test_q7xq15_q7_convolution()) { + printf("Test Failure for q7xq15_q7_convolution()!\n"); + } else if (test_q7xq15_q15_convolution()) { + printf("Test Failure for q7xq15_q15_convolution()!\n"); + } else if (test_q15_convolution()) { + printf("Test Failure for q15_convolution()!\n"); } else { printf("All Tests Passed!\n"); return 0;